blob: 1fce256a8a24aa92deba82c3dfdef2a9d21ecfc4 [file] [log] [blame]
Dan Gohman40503392009-09-08 23:54:48 +00001; RUN: llc < %s -march=x86-64 | FileCheck %s
Evan Chenge62288f2009-07-30 08:33:02 +00002
3; rdar://7103704
4
5define void @sub1(i32* nocapture %p, i32 %v) nounwind ssp {
6entry:
7; CHECK: sub1:
8; CHECK: subl
Eli Friedmana486cb92011-09-26 23:15:09 +00009 %0 = atomicrmw sub i32* %p, i32 %v monotonic
10 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000011}
12
13define void @inc4(i64* nocapture %p) nounwind ssp {
14entry:
15; CHECK: inc4:
16; CHECK: incq
Eli Friedmana486cb92011-09-26 23:15:09 +000017 %0 = atomicrmw add i64* %p, i64 1 monotonic
18 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000019}
20
Evan Chenge62288f2009-07-30 08:33:02 +000021define void @add8(i64* nocapture %p) nounwind ssp {
22entry:
23; CHECK: add8:
24; CHECK: addq $2
Eli Friedmana486cb92011-09-26 23:15:09 +000025 %0 = atomicrmw add i64* %p, i64 2 monotonic
26 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000027}
28
29define void @add4(i64* nocapture %p, i32 %v) nounwind ssp {
30entry:
31; CHECK: add4:
32; CHECK: addq
Eli Friedmana486cb92011-09-26 23:15:09 +000033 %0 = sext i32 %v to i64 ; <i64> [#uses=1]
34 %1 = atomicrmw add i64* %p, i64 %0 monotonic
35 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000036}
37
38define void @inc3(i8* nocapture %p) nounwind ssp {
39entry:
40; CHECK: inc3:
41; CHECK: incb
Eli Friedmana486cb92011-09-26 23:15:09 +000042 %0 = atomicrmw add i8* %p, i8 1 monotonic
43 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000044}
45
Evan Chenge62288f2009-07-30 08:33:02 +000046define void @add7(i8* nocapture %p) nounwind ssp {
47entry:
48; CHECK: add7:
49; CHECK: addb $2
Eli Friedmana486cb92011-09-26 23:15:09 +000050 %0 = atomicrmw add i8* %p, i8 2 monotonic
51 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000052}
53
54define void @add3(i8* nocapture %p, i32 %v) nounwind ssp {
55entry:
56; CHECK: add3:
57; CHECK: addb
Eli Friedmana486cb92011-09-26 23:15:09 +000058 %0 = trunc i32 %v to i8 ; <i8> [#uses=1]
59 %1 = atomicrmw add i8* %p, i8 %0 monotonic
60 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000061}
62
63define void @inc2(i16* nocapture %p) nounwind ssp {
64entry:
65; CHECK: inc2:
66; CHECK: incw
Eli Friedmana486cb92011-09-26 23:15:09 +000067 %0 = atomicrmw add i16* %p, i16 1 monotonic
68 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000069}
70
Evan Chenge62288f2009-07-30 08:33:02 +000071define void @add6(i16* nocapture %p) nounwind ssp {
72entry:
73; CHECK: add6:
74; CHECK: addw $2
Eli Friedmana486cb92011-09-26 23:15:09 +000075 %0 = atomicrmw add i16* %p, i16 2 monotonic
76 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000077}
78
79define void @add2(i16* nocapture %p, i32 %v) nounwind ssp {
80entry:
81; CHECK: add2:
82; CHECK: addw
83 %0 = trunc i32 %v to i16 ; <i16> [#uses=1]
Eli Friedmana486cb92011-09-26 23:15:09 +000084 %1 = atomicrmw add i16* %p, i16 %0 monotonic
85 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000086}
87
88define void @inc1(i32* nocapture %p) nounwind ssp {
89entry:
90; CHECK: inc1:
91; CHECK: incl
Eli Friedmana486cb92011-09-26 23:15:09 +000092 %0 = atomicrmw add i32* %p, i32 1 monotonic
93 ret void
Evan Chenge62288f2009-07-30 08:33:02 +000094}
95
Evan Chenge62288f2009-07-30 08:33:02 +000096define void @add5(i32* nocapture %p) nounwind ssp {
97entry:
98; CHECK: add5:
99; CHECK: addl $2
Eli Friedmana486cb92011-09-26 23:15:09 +0000100 %0 = atomicrmw add i32* %p, i32 2 monotonic
101 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000102}
103
104define void @add1(i32* nocapture %p, i32 %v) nounwind ssp {
105entry:
106; CHECK: add1:
107; CHECK: addl
Eli Friedmana486cb92011-09-26 23:15:09 +0000108 %0 = atomicrmw add i32* %p, i32 %v monotonic
109 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000110}
111
112define void @dec4(i64* nocapture %p) nounwind ssp {
113entry:
114; CHECK: dec4:
115; CHECK: decq
Eli Friedmana486cb92011-09-26 23:15:09 +0000116 %0 = atomicrmw sub i64* %p, i64 1 monotonic
117 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000118}
119
Evan Chenge62288f2009-07-30 08:33:02 +0000120define void @sub8(i64* nocapture %p) nounwind ssp {
121entry:
122; CHECK: sub8:
123; CHECK: subq $2
Eli Friedmana486cb92011-09-26 23:15:09 +0000124 %0 = atomicrmw sub i64* %p, i64 2 monotonic
125 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000126}
127
128define void @sub4(i64* nocapture %p, i32 %v) nounwind ssp {
129entry:
130; CHECK: sub4:
131; CHECK: subq
132 %0 = sext i32 %v to i64 ; <i64> [#uses=1]
Eli Friedmana486cb92011-09-26 23:15:09 +0000133 %1 = atomicrmw sub i64* %p, i64 %0 monotonic
134 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000135}
136
137define void @dec3(i8* nocapture %p) nounwind ssp {
138entry:
139; CHECK: dec3:
140; CHECK: decb
Eli Friedmana486cb92011-09-26 23:15:09 +0000141 %0 = atomicrmw sub i8* %p, i8 1 monotonic
142 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000143}
144
Evan Chenge62288f2009-07-30 08:33:02 +0000145define void @sub7(i8* nocapture %p) nounwind ssp {
146entry:
147; CHECK: sub7:
148; CHECK: subb $2
Eli Friedmana486cb92011-09-26 23:15:09 +0000149 %0 = atomicrmw sub i8* %p, i8 2 monotonic
150 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000151}
152
153define void @sub3(i8* nocapture %p, i32 %v) nounwind ssp {
154entry:
155; CHECK: sub3:
156; CHECK: subb
157 %0 = trunc i32 %v to i8 ; <i8> [#uses=1]
Eli Friedmana486cb92011-09-26 23:15:09 +0000158 %1 = atomicrmw sub i8* %p, i8 %0 monotonic
159 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000160}
161
162define void @dec2(i16* nocapture %p) nounwind ssp {
163entry:
164; CHECK: dec2:
165; CHECK: decw
Eli Friedmana486cb92011-09-26 23:15:09 +0000166 %0 = atomicrmw sub i16* %p, i16 1 monotonic
167 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000168}
169
Evan Chenge62288f2009-07-30 08:33:02 +0000170define void @sub6(i16* nocapture %p) nounwind ssp {
171entry:
172; CHECK: sub6:
173; CHECK: subw $2
Eli Friedmana486cb92011-09-26 23:15:09 +0000174 %0 = atomicrmw sub i16* %p, i16 2 monotonic
175 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000176}
177
178define void @sub2(i16* nocapture %p, i32 %v) nounwind ssp {
179entry:
180; CHECK: sub2:
Evan Cheng050df1b2010-04-28 08:30:49 +0000181; CHECK: negl
Evan Chenge62288f2009-07-30 08:33:02 +0000182 %0 = trunc i32 %v to i16 ; <i16> [#uses=1]
Eli Friedmana486cb92011-09-26 23:15:09 +0000183 %1 = atomicrmw sub i16* %p, i16 %0 monotonic
184 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000185}
186
187define void @dec1(i32* nocapture %p) nounwind ssp {
188entry:
189; CHECK: dec1:
190; CHECK: decl
Eli Friedmana486cb92011-09-26 23:15:09 +0000191 %0 = atomicrmw sub i32* %p, i32 1 monotonic
192 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000193}
194
Evan Chenge62288f2009-07-30 08:33:02 +0000195define void @sub5(i32* nocapture %p) nounwind ssp {
196entry:
197; CHECK: sub5:
198; CHECK: subl $2
Eli Friedmana486cb92011-09-26 23:15:09 +0000199 %0 = atomicrmw sub i32* %p, i32 2 monotonic
200 ret void
Evan Chenge62288f2009-07-30 08:33:02 +0000201}