Skip to content

Commit f6cd43c

Browse files
committed
[X86] Add more tests for D111858. NFC
Add tests with sub instead of neg.
1 parent da07942 commit f6cd43c

File tree

1 file changed

+167
-0
lines changed

1 file changed

+167
-0
lines changed

llvm/test/CodeGen/X86/neg-abs.ll

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,170 @@ define i128 @neg_abs_i128(i128 %x) nounwind {
154154
%neg = sub nsw i128 0, %abs
155155
ret i128 %neg
156156
}
157+
158+
define i8 @sub_abs_i8(i8 %x, i8 %y) nounwind {
159+
; X86-LABEL: sub_abs_i8:
160+
; X86: # %bb.0:
161+
; X86-NEXT: movb {{[0-9]+}}(%esp), %al
162+
; X86-NEXT: movb {{[0-9]+}}(%esp), %cl
163+
; X86-NEXT: movl %ecx, %edx
164+
; X86-NEXT: sarb $7, %dl
165+
; X86-NEXT: addb %dl, %cl
166+
; X86-NEXT: xorb %dl, %cl
167+
; X86-NEXT: subb %cl, %al
168+
; X86-NEXT: retl
169+
;
170+
; X64-LABEL: sub_abs_i8:
171+
; X64: # %bb.0:
172+
; X64-NEXT: movl %esi, %eax
173+
; X64-NEXT: movl %edi, %ecx
174+
; X64-NEXT: sarb $7, %cl
175+
; X64-NEXT: addb %cl, %dil
176+
; X64-NEXT: xorb %cl, %dil
177+
; X64-NEXT: subb %dil, %al
178+
; X64-NEXT: # kill: def $al killed $al killed $eax
179+
; X64-NEXT: retq
180+
%abs = tail call i8 @llvm.abs.i8(i8 %x, i1 false)
181+
%neg = sub nsw i8 %y, %abs
182+
ret i8 %neg
183+
}
184+
185+
define i16 @sub_abs_i16(i16 %x, i16 %y) nounwind {
186+
; X86-LABEL: sub_abs_i16:
187+
; X86: # %bb.0:
188+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
189+
; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
190+
; X86-NEXT: movl %ecx, %edx
191+
; X86-NEXT: sarl $15, %edx
192+
; X86-NEXT: addl %edx, %ecx
193+
; X86-NEXT: xorl %edx, %ecx
194+
; X86-NEXT: subl %ecx, %eax
195+
; X86-NEXT: # kill: def $ax killed $ax killed $eax
196+
; X86-NEXT: retl
197+
;
198+
; X64-LABEL: sub_abs_i16:
199+
; X64: # %bb.0:
200+
; X64-NEXT: movl %esi, %eax
201+
; X64-NEXT: movl %edi, %ecx
202+
; X64-NEXT: negw %cx
203+
; X64-NEXT: cmovsw %di, %cx
204+
; X64-NEXT: subl %ecx, %eax
205+
; X64-NEXT: # kill: def $ax killed $ax killed $eax
206+
; X64-NEXT: retq
207+
%abs = tail call i16 @llvm.abs.i16(i16 %x, i1 false)
208+
%neg = sub i16 %y, %abs
209+
ret i16 %neg
210+
}
211+
212+
define i32 @sub_abs_i32(i32 %x, i32 %y) nounwind {
213+
; X86-LABEL: sub_abs_i32:
214+
; X86: # %bb.0:
215+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
216+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
217+
; X86-NEXT: movl %ecx, %edx
218+
; X86-NEXT: sarl $31, %edx
219+
; X86-NEXT: addl %edx, %ecx
220+
; X86-NEXT: xorl %edx, %ecx
221+
; X86-NEXT: subl %ecx, %eax
222+
; X86-NEXT: retl
223+
;
224+
; X64-LABEL: sub_abs_i32:
225+
; X64: # %bb.0:
226+
; X64-NEXT: movl %esi, %eax
227+
; X64-NEXT: movl %edi, %ecx
228+
; X64-NEXT: negl %ecx
229+
; X64-NEXT: cmovsl %edi, %ecx
230+
; X64-NEXT: subl %ecx, %eax
231+
; X64-NEXT: retq
232+
%abs = tail call i32 @llvm.abs.i32(i32 %x, i1 false)
233+
%neg = sub i32 %y, %abs
234+
ret i32 %neg
235+
}
236+
237+
define i64 @sub_abs_i64(i64 %x, i64 %y) nounwind {
238+
; X86-LABEL: sub_abs_i64:
239+
; X86: # %bb.0:
240+
; X86-NEXT: pushl %edi
241+
; X86-NEXT: pushl %esi
242+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
243+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
244+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
245+
; X86-NEXT: movl %ecx, %esi
246+
; X86-NEXT: sarl $31, %esi
247+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
248+
; X86-NEXT: addl %esi, %edi
249+
; X86-NEXT: adcl %esi, %ecx
250+
; X86-NEXT: xorl %esi, %ecx
251+
; X86-NEXT: xorl %esi, %edi
252+
; X86-NEXT: subl %edi, %eax
253+
; X86-NEXT: sbbl %ecx, %edx
254+
; X86-NEXT: popl %esi
255+
; X86-NEXT: popl %edi
256+
; X86-NEXT: retl
257+
;
258+
; X64-LABEL: sub_abs_i64:
259+
; X64: # %bb.0:
260+
; X64-NEXT: movq %rsi, %rax
261+
; X64-NEXT: movq %rdi, %rcx
262+
; X64-NEXT: negq %rcx
263+
; X64-NEXT: cmovsq %rdi, %rcx
264+
; X64-NEXT: subq %rcx, %rax
265+
; X64-NEXT: retq
266+
%abs = tail call i64 @llvm.abs.i64(i64 %x, i1 false)
267+
%neg = sub i64 %y, %abs
268+
ret i64 %neg
269+
}
270+
271+
define i128 @sub_abs_i128(i128 %x, i128 %y) nounwind {
272+
; X86-LABEL: sub_abs_i128:
273+
; X86: # %bb.0:
274+
; X86-NEXT: pushl %edi
275+
; X86-NEXT: pushl %esi
276+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
277+
; X86-NEXT: movl %eax, %ecx
278+
; X86-NEXT: sarl $31, %ecx
279+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
280+
; X86-NEXT: addl %ecx, %edx
281+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
282+
; X86-NEXT: adcl %ecx, %esi
283+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
284+
; X86-NEXT: adcl %ecx, %edi
285+
; X86-NEXT: adcl %ecx, %eax
286+
; X86-NEXT: xorl %ecx, %eax
287+
; X86-NEXT: xorl %ecx, %edi
288+
; X86-NEXT: xorl %ecx, %esi
289+
; X86-NEXT: xorl %ecx, %edx
290+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
291+
; X86-NEXT: subl %edx, %ecx
292+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
293+
; X86-NEXT: sbbl %esi, %edx
294+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
295+
; X86-NEXT: sbbl %edi, %esi
296+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
297+
; X86-NEXT: sbbl %eax, %edi
298+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
299+
; X86-NEXT: movl %ecx, (%eax)
300+
; X86-NEXT: movl %edx, 4(%eax)
301+
; X86-NEXT: movl %esi, 8(%eax)
302+
; X86-NEXT: movl %edi, 12(%eax)
303+
; X86-NEXT: popl %esi
304+
; X86-NEXT: popl %edi
305+
; X86-NEXT: retl $4
306+
;
307+
; X64-LABEL: sub_abs_i128:
308+
; X64: # %bb.0:
309+
; X64-NEXT: movq %rdx, %rax
310+
; X64-NEXT: movq %rsi, %rdx
311+
; X64-NEXT: sarq $63, %rdx
312+
; X64-NEXT: addq %rdx, %rdi
313+
; X64-NEXT: adcq %rdx, %rsi
314+
; X64-NEXT: xorq %rdx, %rsi
315+
; X64-NEXT: xorq %rdx, %rdi
316+
; X64-NEXT: subq %rdi, %rax
317+
; X64-NEXT: sbbq %rsi, %rcx
318+
; X64-NEXT: movq %rcx, %rdx
319+
; X64-NEXT: retq
320+
%abs = tail call i128 @llvm.abs.i128(i128 %x, i1 false)
321+
%neg = sub i128 %y, %abs
322+
ret i128 %neg
323+
}

0 commit comments

Comments
 (0)