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:
7 ; CHECK-NEXT: lock addl %esi, (%rdi)
10 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
12 %5 = icmp eq i32 %3, %4
16 define i1 @lock_add_sets(ptr %0, i32 %1) nounwind {
17 ; CHECK-LABEL: lock_add_sets:
19 ; CHECK-NEXT: lock addl %esi, (%rdi)
20 ; CHECK-NEXT: sets %al
22 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
24 %5 = icmp slt i32 %4, 0
28 define i1 @lock_sub_sete(ptr %0, i32 %1) nounwind {
29 ; CHECK-LABEL: lock_sub_sete:
31 ; CHECK-NEXT: lock subl %esi, (%rdi)
32 ; CHECK-NEXT: sete %al
34 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
35 %4 = icmp eq i32 %3, %1
39 define i1 @lock_sub_sets(ptr %0, i32 %1) nounwind {
40 ; CHECK-LABEL: lock_sub_sets:
42 ; CHECK-NEXT: lock subl %esi, (%rdi)
43 ; CHECK-NEXT: sets %al
45 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
47 %5 = icmp slt i32 %4, 0
51 define i1 @lock_or_sete(ptr %0, i32 %1) nounwind {
52 ; CHECK-LABEL: lock_or_sete:
54 ; CHECK-NEXT: lock orl %esi, (%rdi)
55 ; CHECK-NEXT: sete %al
57 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
59 %5 = icmp eq i32 %4, 0
63 define i1 @lock_or_sets(ptr %0, i32 %1) nounwind {
64 ; CHECK-LABEL: lock_or_sets:
66 ; CHECK-NEXT: lock orl %esi, (%rdi)
67 ; CHECK-NEXT: sets %al
69 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
71 %5 = icmp slt i32 %4, 0
75 define i1 @lock_and_sete(ptr %0, i32 %1) nounwind {
76 ; CHECK-LABEL: lock_and_sete:
78 ; CHECK-NEXT: lock andl %esi, (%rdi)
79 ; CHECK-NEXT: sete %al
81 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
83 %5 = icmp eq i32 %4, 0
87 define i1 @lock_and_sets(ptr %0, i32 %1) nounwind {
88 ; CHECK-LABEL: lock_and_sets:
90 ; CHECK-NEXT: lock andl %esi, (%rdi)
91 ; CHECK-NEXT: sets %al
93 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
95 %5 = icmp slt i32 %4, 0
99 define i1 @lock_xor_sete(ptr %0, i32 %1) nounwind {
100 ; CHECK-LABEL: lock_xor_sete:
102 ; CHECK-NEXT: lock xorl %esi, (%rdi)
103 ; CHECK-NEXT: sete %al
105 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
106 %4 = icmp eq i32 %3, %1
110 define i1 @lock_xor_sets(ptr %0, i32 %1) nounwind {
111 ; CHECK-LABEL: lock_xor_sets:
113 ; CHECK-NEXT: lock xorl %esi, (%rdi)
114 ; CHECK-NEXT: sets %al
116 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
118 %5 = icmp slt i32 %4, 0
122 define i1 @lock_add_setne(ptr %0, i32 %1) nounwind {
123 ; CHECK-LABEL: lock_add_setne:
125 ; CHECK-NEXT: lock addl %esi, (%rdi)
126 ; CHECK-NEXT: setne %al
128 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
130 %5 = icmp ne i32 %3, %4
134 define i1 @lock_add_setns(ptr %0, i32 %1) nounwind {
135 ; CHECK-LABEL: lock_add_setns:
137 ; CHECK-NEXT: lock addl %esi, (%rdi)
138 ; CHECK-NEXT: setns %al
140 %3 = atomicrmw add ptr %0, i32 %1 seq_cst, align 4
142 %5 = icmp sgt i32 %4, -1
146 define i1 @lock_sub_setne(ptr %0, i32 %1) nounwind {
147 ; CHECK-LABEL: lock_sub_setne:
149 ; CHECK-NEXT: lock subl %esi, (%rdi)
150 ; CHECK-NEXT: setne %al
152 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
153 %4 = icmp ne i32 %3, %1
157 define i1 @lock_sub_setns(ptr %0, i32 %1) nounwind {
158 ; CHECK-LABEL: lock_sub_setns:
160 ; CHECK-NEXT: lock subl %esi, (%rdi)
161 ; CHECK-NEXT: setns %al
163 %3 = atomicrmw sub ptr %0, i32 %1 seq_cst, align 4
165 %5 = icmp sgt i32 %4, -1
169 define i1 @lock_or_setne(ptr %0, i32 %1) nounwind {
170 ; CHECK-LABEL: lock_or_setne:
172 ; CHECK-NEXT: lock orl %esi, (%rdi)
173 ; CHECK-NEXT: setne %al
175 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
177 %5 = icmp ne i32 %4, 0
181 define i1 @lock_or_setns(ptr %0, i32 %1) nounwind {
182 ; CHECK-LABEL: lock_or_setns:
184 ; CHECK-NEXT: lock orl %esi, (%rdi)
185 ; CHECK-NEXT: setns %al
187 %3 = atomicrmw or ptr %0, i32 %1 seq_cst, align 4
189 %5 = icmp sgt i32 %4, -1
193 define i1 @lock_and_setne(ptr %0, i32 %1) nounwind {
194 ; CHECK-LABEL: lock_and_setne:
196 ; CHECK-NEXT: lock andl %esi, (%rdi)
197 ; CHECK-NEXT: setne %al
199 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
201 %5 = icmp ne i32 %4, 0
205 define i1 @lock_and_setns(ptr %0, i32 %1) nounwind {
206 ; CHECK-LABEL: lock_and_setns:
208 ; CHECK-NEXT: lock andl %esi, (%rdi)
209 ; CHECK-NEXT: setns %al
211 %3 = atomicrmw and ptr %0, i32 %1 seq_cst, align 4
213 %5 = icmp sgt i32 %4, -1
217 define i1 @lock_xor_setne(ptr %0, i32 %1) nounwind {
218 ; CHECK-LABEL: lock_xor_setne:
220 ; CHECK-NEXT: lock xorl %esi, (%rdi)
221 ; CHECK-NEXT: setne %al
223 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
224 %4 = icmp ne i32 %3, %1
228 define i1 @lock_xor_setns(ptr %0, i32 %1) nounwind {
229 ; CHECK-LABEL: lock_xor_setns:
231 ; CHECK-NEXT: lock xorl %esi, (%rdi)
232 ; CHECK-NEXT: setns %al
234 %3 = atomicrmw xor ptr %0, i32 %1 seq_cst, align 4
236 %5 = icmp sgt i32 %4, -1