Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / X86 / pr58685.ll
blobc63150e6ef60807bb5f15a2e07b9232241bffeb9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
4 define 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
16 define 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
28 define 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
39 define 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
51 define 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
63 define 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
75 define 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
87 define 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
99 define 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
110 define 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
122 define 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
134 define 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
146 define 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
157 define 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
169 define 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
181 define 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
193 define 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
205 define 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
217 define 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
228 define 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