xref: /llvm-project/llvm/test/CodeGen/X86/pr58685.ll (revision 7218103bcaca36be0287172a91ae2907ca20930c)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
3
4define i1 @lock_add_sete(ptr %0, i32 %1) nounwind {
5; CHECK-LABEL: lock_add_sete:
6; CHECK:       # %bb.0:
7; CHECK-NEXT:    lock addl %esi, (%rdi)
8; CHECK-NEXT:    sete %al
9; CHECK-NEXT:    retq
10  %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
11  %4 = sub i32 0, %1
12  %5 = icmp eq i32 %3, %4
13  ret i1 %5
14}
15
16define i1 @lock_add_sets(ptr %0, i32 %1) nounwind {
17; CHECK-LABEL: lock_add_sets:
18; CHECK:       # %bb.0:
19; CHECK-NEXT:    lock addl %esi, (%rdi)
20; CHECK-NEXT:    sets %al
21; CHECK-NEXT:    retq
22  %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
23  %4 = add i32 %3, %1
24  %5 = icmp slt i32 %4, 0
25  ret i1 %5
26}
27
28define i1 @lock_sub_sete(ptr %0, i32 %1) nounwind {
29; CHECK-LABEL: lock_sub_sete:
30; CHECK:       # %bb.0:
31; CHECK-NEXT:    lock subl %esi, (%rdi)
32; CHECK-NEXT:    sete %al
33; CHECK-NEXT:    retq
34  %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
35  %4 = icmp eq i32 %3, %1
36  ret i1 %4
37}
38
39define i1 @lock_sub_sets(ptr %0, i32 %1) nounwind {
40; CHECK-LABEL: lock_sub_sets:
41; CHECK:       # %bb.0:
42; CHECK-NEXT:    lock subl %esi, (%rdi)
43; CHECK-NEXT:    sets %al
44; CHECK-NEXT:    retq
45  %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
46  %4 = sub i32 %3, %1
47  %5 = icmp slt i32 %4, 0
48  ret i1 %5
49}
50
51define i1 @lock_or_sete(ptr %0, i32 %1) nounwind {
52; CHECK-LABEL: lock_or_sete:
53; CHECK:       # %bb.0:
54; CHECK-NEXT:    lock orl %esi, (%rdi)
55; CHECK-NEXT:    sete %al
56; CHECK-NEXT:    retq
57  %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
58  %4 = or i32 %3, %1
59  %5 = icmp eq i32 %4, 0
60  ret i1 %5
61}
62
63define i1 @lock_or_sets(ptr %0, i32 %1) nounwind {
64; CHECK-LABEL: lock_or_sets:
65; CHECK:       # %bb.0:
66; CHECK-NEXT:    lock orl %esi, (%rdi)
67; CHECK-NEXT:    sets %al
68; CHECK-NEXT:    retq
69  %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
70  %4 = or i32 %3, %1
71  %5 = icmp slt i32 %4, 0
72  ret i1 %5
73}
74
75define i1 @lock_and_sete(ptr %0, i32 %1) nounwind {
76; CHECK-LABEL: lock_and_sete:
77; CHECK:       # %bb.0:
78; CHECK-NEXT:    lock andl %esi, (%rdi)
79; CHECK-NEXT:    sete %al
80; CHECK-NEXT:    retq
81  %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
82  %4 = and i32 %3, %1
83  %5 = icmp eq i32 %4, 0
84  ret i1 %5
85}
86
87define i1 @lock_and_sets(ptr %0, i32 %1) nounwind {
88; CHECK-LABEL: lock_and_sets:
89; CHECK:       # %bb.0:
90; CHECK-NEXT:    lock andl %esi, (%rdi)
91; CHECK-NEXT:    sets %al
92; CHECK-NEXT:    retq
93  %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
94  %4 = and i32 %3, %1
95  %5 = icmp slt i32 %4, 0
96  ret i1 %5
97}
98
99define i1 @lock_xor_sete(ptr %0, i32 %1) nounwind {
100; CHECK-LABEL: lock_xor_sete:
101; CHECK:       # %bb.0:
102; CHECK-NEXT:    lock xorl %esi, (%rdi)
103; CHECK-NEXT:    sete %al
104; CHECK-NEXT:    retq
105  %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
106  %4 = icmp eq i32 %3, %1
107  ret i1 %4
108}
109
110define i1 @lock_xor_sets(ptr %0, i32 %1) nounwind {
111; CHECK-LABEL: lock_xor_sets:
112; CHECK:       # %bb.0:
113; CHECK-NEXT:    lock xorl %esi, (%rdi)
114; CHECK-NEXT:    sets %al
115; CHECK-NEXT:    retq
116  %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
117  %4 = xor i32 %3, %1
118  %5 = icmp slt i32 %4, 0
119  ret i1 %5
120}
121
122define i1 @lock_add_setne(ptr %0, i32 %1) nounwind {
123; CHECK-LABEL: lock_add_setne:
124; CHECK:       # %bb.0:
125; CHECK-NEXT:    lock addl %esi, (%rdi)
126; CHECK-NEXT:    setne %al
127; CHECK-NEXT:    retq
128  %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
129  %4 = sub i32 0, %1
130  %5 = icmp ne i32 %3, %4
131  ret i1 %5
132}
133
134define i1 @lock_add_setns(ptr %0, i32 %1) nounwind {
135; CHECK-LABEL: lock_add_setns:
136; CHECK:       # %bb.0:
137; CHECK-NEXT:    lock addl %esi, (%rdi)
138; CHECK-NEXT:    setns %al
139; CHECK-NEXT:    retq
140  %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
141  %4 = add i32 %3, %1
142  %5 = icmp sgt i32 %4, -1
143  ret i1 %5
144}
145
146define i1 @lock_sub_setne(ptr %0, i32 %1) nounwind {
147; CHECK-LABEL: lock_sub_setne:
148; CHECK:       # %bb.0:
149; CHECK-NEXT:    lock subl %esi, (%rdi)
150; CHECK-NEXT:    setne %al
151; CHECK-NEXT:    retq
152  %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
153  %4 = icmp ne i32 %3, %1
154  ret i1 %4
155}
156
157define i1 @lock_sub_setns(ptr %0, i32 %1) nounwind {
158; CHECK-LABEL: lock_sub_setns:
159; CHECK:       # %bb.0:
160; CHECK-NEXT:    lock subl %esi, (%rdi)
161; CHECK-NEXT:    setns %al
162; CHECK-NEXT:    retq
163  %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
164  %4 = sub i32 %3, %1
165  %5 = icmp sgt i32 %4, -1
166  ret i1 %5
167}
168
169define i1 @lock_or_setne(ptr %0, i32 %1) nounwind {
170; CHECK-LABEL: lock_or_setne:
171; CHECK:       # %bb.0:
172; CHECK-NEXT:    lock orl %esi, (%rdi)
173; CHECK-NEXT:    setne %al
174; CHECK-NEXT:    retq
175  %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
176  %4 = or i32 %3, %1
177  %5 = icmp ne i32 %4, 0
178  ret i1 %5
179}
180
181define i1 @lock_or_setns(ptr %0, i32 %1) nounwind {
182; CHECK-LABEL: lock_or_setns:
183; CHECK:       # %bb.0:
184; CHECK-NEXT:    lock orl %esi, (%rdi)
185; CHECK-NEXT:    setns %al
186; CHECK-NEXT:    retq
187  %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
188  %4 = or i32 %3, %1
189  %5 = icmp sgt i32 %4, -1
190  ret i1 %5
191}
192
193define i1 @lock_and_setne(ptr %0, i32 %1) nounwind {
194; CHECK-LABEL: lock_and_setne:
195; CHECK:       # %bb.0:
196; CHECK-NEXT:    lock andl %esi, (%rdi)
197; CHECK-NEXT:    setne %al
198; CHECK-NEXT:    retq
199  %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
200  %4 = and i32 %3, %1
201  %5 = icmp ne i32 %4, 0
202  ret i1 %5
203}
204
205define i1 @lock_and_setns(ptr %0, i32 %1) nounwind {
206; CHECK-LABEL: lock_and_setns:
207; CHECK:       # %bb.0:
208; CHECK-NEXT:    lock andl %esi, (%rdi)
209; CHECK-NEXT:    setns %al
210; CHECK-NEXT:    retq
211  %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
212  %4 = and i32 %3, %1
213  %5 = icmp sgt i32 %4, -1
214  ret i1 %5
215}
216
217define i1 @lock_xor_setne(ptr %0, i32 %1) nounwind {
218; CHECK-LABEL: lock_xor_setne:
219; CHECK:       # %bb.0:
220; CHECK-NEXT:    lock xorl %esi, (%rdi)
221; CHECK-NEXT:    setne %al
222; CHECK-NEXT:    retq
223  %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
224  %4 = icmp ne i32 %3, %1
225  ret i1 %4
226}
227
228define i1 @lock_xor_setns(ptr %0, i32 %1) nounwind {
229; CHECK-LABEL: lock_xor_setns:
230; CHECK:       # %bb.0:
231; CHECK-NEXT:    lock xorl %esi, (%rdi)
232; CHECK-NEXT:    setns %al
233; CHECK-NEXT:    retq
234  %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
235  %4 = xor i32 %3, %1
236  %5 = icmp sgt i32 %4, -1
237  ret i1 %5
238}
239