blob: 1cfbc49ab1c9112993f3bdee15c5f718a02127e8 [file] [log] [blame]
Michael Liaoda22b302013-03-06 00:17:04 +00001; RUN: llc -march=x86 -mattr=+cmov -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=LINUX
Michael Liaod5cac372013-03-07 01:01:29 +00002; RUN: llc -march=x86 -mattr=-cmov -mtriple=i386-pc-linux -verify-machineinstrs < %s | FileCheck %s -check-prefix=NOCMOV
Michael Liaoda22b302013-03-06 00:17:04 +00003; RUN: llc -march=x86 -mtriple=i386-macosx -relocation-model=pic -verify-machineinstrs < %s | FileCheck %s -check-prefix=PIC
Evan Cheng3903e1b2012-10-09 23:48:33 +00004
Michael Liaode51caf2012-09-25 18:08:13 +00005@sc64 = external global i64
6
7define void @atomic_maxmin_i6432() {
Evan Cheng3903e1b2012-10-09 23:48:33 +00008; LINUX: atomic_maxmin_i6432
Michael Liaode51caf2012-09-25 18:08:13 +00009 %1 = atomicrmw max i64* @sc64, i64 5 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000010; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
11; LINUX: cmpl
12; LINUX: setl
13; LINUX: cmpl
14; LINUX: setl
15; LINUX: cmovne
16; LINUX: cmovne
17; LINUX: lock
18; LINUX-NEXT: cmpxchg8b
19; LINUX: jne [[LABEL]]
Michael Liaod5cac372013-03-07 01:01:29 +000020; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]]
21; NOCMOV: cmpl
22; NOCMOV: setl
23; NOCMOV: cmpl
24; NOCMOV: setl
25; NOCMOV: jne
26; NOCMOV: jne
27; NOCMOV: lock
28; NOCMOV-NEXT: cmpxchg8b
29; NOCMOV: jne [[LABEL]]
Michael Liaode51caf2012-09-25 18:08:13 +000030 %2 = atomicrmw min i64* @sc64, i64 6 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000031; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
32; LINUX: cmpl
33; LINUX: setg
34; LINUX: cmpl
35; LINUX: setg
36; LINUX: cmovne
37; LINUX: cmovne
38; LINUX: lock
39; LINUX-NEXT: cmpxchg8b
40; LINUX: jne [[LABEL]]
Michael Liaod5cac372013-03-07 01:01:29 +000041; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]]
42; NOCMOV: cmpl
43; NOCMOV: setg
44; NOCMOV: cmpl
45; NOCMOV: setg
46; NOCMOV: jne
47; NOCMOV: jne
48; NOCMOV: lock
49; NOCMOV-NEXT: cmpxchg8b
50; NOCMOV: jne [[LABEL]]
Michael Liaode51caf2012-09-25 18:08:13 +000051 %3 = atomicrmw umax i64* @sc64, i64 7 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000052; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
53; LINUX: cmpl
54; LINUX: setb
55; LINUX: cmpl
56; LINUX: setb
57; LINUX: cmovne
58; LINUX: cmovne
59; LINUX: lock
60; LINUX-NEXT: cmpxchg8b
61; LINUX: jne [[LABEL]]
Michael Liaod5cac372013-03-07 01:01:29 +000062; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]]
63; NOCMOV: cmpl
64; NOCMOV: setb
65; NOCMOV: cmpl
66; NOCMOV: setb
67; NOCMOV: jne
68; NOCMOV: jne
69; NOCMOV: lock
70; NOCMOV-NEXT: cmpxchg8b
71; NOCMOV: jne [[LABEL]]
Michael Liaode51caf2012-09-25 18:08:13 +000072 %4 = atomicrmw umin i64* @sc64, i64 8 acquire
Evan Cheng3903e1b2012-10-09 23:48:33 +000073; LINUX: [[LABEL:.LBB[0-9]+_[0-9]+]]
74; LINUX: cmpl
75; LINUX: seta
76; LINUX: cmpl
77; LINUX: seta
78; LINUX: cmovne
79; LINUX: cmovne
80; LINUX: lock
81; LINUX-NEXT: cmpxchg8b
82; LINUX: jne [[LABEL]]
Michael Liaod5cac372013-03-07 01:01:29 +000083; NOCMOV: [[LABEL:.LBB[0-9]+_[0-9]+]]
84; NOCMOV: cmpl
85; NOCMOV: seta
86; NOCMOV: cmpl
87; NOCMOV: seta
88; NOCMOV: jne
89; NOCMOV: jne
90; NOCMOV: lock
91; NOCMOV-NEXT: cmpxchg8b
92; NOCMOV: jne [[LABEL]]
Evan Cheng3903e1b2012-10-09 23:48:33 +000093 ret void
94}
95
96; rdar://12453106
97@id = internal global i64 0, align 8
98
99define void @tf_bug(i8* %ptr) nounwind {
Stephen Lind24ab202013-07-14 06:24:09 +0000100; PIC-LABEL: tf_bug:
Evan Cheng3903e1b2012-10-09 23:48:33 +0000101; PIC: movl _id-L1$pb(
102; PIC: movl (_id-L1$pb)+4(
103 %tmp1 = atomicrmw add i64* @id, i64 1 seq_cst
104 %tmp2 = add i64 %tmp1, 1
105 %tmp3 = bitcast i8* %ptr to i64*
106 store i64 %tmp2, i64* %tmp3, align 4
Michael Liaode51caf2012-09-25 18:08:13 +0000107 ret void
108}