@@ -124,13 +124,14 @@ L4:
124
124
ret i32 4
125
125
}
126
126
127
- ; PR20841 - ensure we reuse the ZF flag from XADD for compares with zero.
127
+ ; FIXME: PR20841 - ensure we reuse the ZF flag from XADD for compares with zero.
128
128
129
129
define zeroext i1 @xadd_cmp0_i64 (i64* %x ) nounwind {
130
130
; X64-LABEL: xadd_cmp0_i64:
131
131
; X64: # %bb.0:
132
132
; X64-NEXT: movl $1, %eax
133
133
; X64-NEXT: lock xaddq %rax, (%rdi)
134
+ ; X64-NEXT: testq %rax, %rax
134
135
; X64-NEXT: sete %al
135
136
; X64-NEXT: retq
136
137
;
@@ -166,6 +167,7 @@ define zeroext i1 @xadd_cmp0_i32(i32* %x) nounwind {
166
167
; X64: # %bb.0:
167
168
; X64-NEXT: movl $1, %eax
168
169
; X64-NEXT: lock xaddl %eax, (%rdi)
170
+ ; X64-NEXT: testl %eax, %eax
169
171
; X64-NEXT: setne %al
170
172
; X64-NEXT: retq
171
173
;
@@ -174,6 +176,7 @@ define zeroext i1 @xadd_cmp0_i32(i32* %x) nounwind {
174
176
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
175
177
; X86-NEXT: movl $1, %ecx
176
178
; X86-NEXT: lock xaddl %ecx, (%eax)
179
+ ; X86-NEXT: testl %ecx, %ecx
177
180
; X86-NEXT: setne %al
178
181
; X86-NEXT: retl
179
182
%add = atomicrmw add i32* %x , i32 1 seq_cst
@@ -186,6 +189,7 @@ define zeroext i1 @xadd_cmp0_i16(i16* %x) nounwind {
186
189
; X64: # %bb.0:
187
190
; X64-NEXT: movw $1, %ax
188
191
; X64-NEXT: lock xaddw %ax, (%rdi)
192
+ ; X64-NEXT: testw %ax, %ax
189
193
; X64-NEXT: sete %al
190
194
; X64-NEXT: retq
191
195
;
@@ -194,6 +198,7 @@ define zeroext i1 @xadd_cmp0_i16(i16* %x) nounwind {
194
198
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
195
199
; X86-NEXT: movw $1, %cx
196
200
; X86-NEXT: lock xaddw %cx, (%eax)
201
+ ; X86-NEXT: testw %cx, %cx
197
202
; X86-NEXT: sete %al
198
203
; X86-NEXT: retl
199
204
%add = atomicrmw add i16* %x , i16 1 seq_cst
@@ -206,6 +211,7 @@ define zeroext i1 @xadd_cmp0_i8(i8* %x) nounwind {
206
211
; X64: # %bb.0:
207
212
; X64-NEXT: movb $1, %al
208
213
; X64-NEXT: lock xaddb %al, (%rdi)
214
+ ; X64-NEXT: testb %al, %al
209
215
; X64-NEXT: setne %al
210
216
; X64-NEXT: retq
211
217
;
@@ -214,6 +220,7 @@ define zeroext i1 @xadd_cmp0_i8(i8* %x) nounwind {
214
220
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
215
221
; X86-NEXT: movb $1, %cl
216
222
; X86-NEXT: lock xaddb %cl, (%eax)
223
+ ; X86-NEXT: testb %cl, %cl
217
224
; X86-NEXT: setne %al
218
225
; X86-NEXT: retl
219
226
%add = atomicrmw add i8* %x , i8 1 seq_cst
0 commit comments