blob: ffb7a3fd6f64718eabf109177c75f724441fe030 [file] [log] [blame]
Tim Northover277066a2014-07-01 18:53:31 +00001; RUN: llc -march=x86 -mattr=+cmov,cx16 -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=LINUX
2; RUN: llc -march=x86 -mattr=cx16 -mtriple=i386-macosx -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s -check-prefix=PIC
Evan Cheng3903e1b2012-10-09 23:48:33 +00003
Michael Liaode51caf2012-09-25 18:08:13 +00004@sc64 = external global i64
5
6define void @atomic_maxmin_i6432() {
Evan Cheng3903e1b2012-10-09 23:48:33 +00007; LINUX: atomic_maxmin_i6432
Michael Liaode51caf2012-09-25 18:08:13 +00008 %1 = atomicrmw max i64* @sc64, i64 5 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +00009; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
10; LINUX: cmpl
Tim Northover277066a2014-07-01 18:53:31 +000011; LINUX: seta
Evan Cheng3903e1b2012-10-09 23:48:33 +000012; LINUX: cmovne
13; LINUX: cmovne
14; LINUX: lock
15; LINUX-NEXT: cmpxchg8b
16; LINUX: jne [[LABEL]]
Michael Liaode51caf2012-09-25 18:08:13 +000017 %2 = atomicrmw min i64* @sc64, i64 6 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000018; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
19; LINUX: cmpl
Tim Northover277066a2014-07-01 18:53:31 +000020; LINUX: setb
Evan Cheng3903e1b2012-10-09 23:48:33 +000021; LINUX: cmovne
22; LINUX: cmovne
23; LINUX: lock
24; LINUX-NEXT: cmpxchg8b
25; LINUX: jne [[LABEL]]
Michael Liaode51caf2012-09-25 18:08:13 +000026 %3 = atomicrmw umax i64* @sc64, i64 7 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000027; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
28; LINUX: cmpl
Tim Northover277066a2014-07-01 18:53:31 +000029; LINUX: seta
Evan Cheng3903e1b2012-10-09 23:48:33 +000030; LINUX: cmovne
31; LINUX: cmovne
32; LINUX: lock
33; LINUX-NEXT: cmpxchg8b
34; LINUX: jne [[LABEL]]
Michael Liaode51caf2012-09-25 18:08:13 +000035 %4 = atomicrmw umin i64* @sc64, i64 8 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000036; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
37; LINUX: cmpl
Tim Northover277066a2014-07-01 18:53:31 +000038; LINUX: setb
Evan Cheng3903e1b2012-10-09 23:48:33 +000039; LINUX: cmovne
40; LINUX: cmovne
41; LINUX: lock
42; LINUX-NEXT: cmpxchg8b
43; LINUX: jne [[LABEL]]
44 ret void
45}
46
47; rdar://12453106
48@id = internal global i64 0, align 8
49
50define void @tf_bug(i8* %ptr) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +000051; PIC-LABEL: tf_bug:
Tim Northover277066a2014-07-01 18:53:31 +000052; PIC-DAG: movl _id-L1$pb(
53; PIC-DAG: movl (_id-L1$pb)+4(
Evan Cheng3903e1b2012-10-09 23:48:33 +000054 %tmp1 = atomicrmw add i64* @id, i64 1 seq_cst
55 %tmp2 = add i64 %tmp1, 1
56 %tmp3 = bitcast i8* %ptr to i64*
57 store i64 %tmp2, i64* %tmp3, align 4
Michael Liaode51caf2012-09-25 18:08:13 +000058 ret void
59}