Skip to content

Commit 09ee1fe

Browse files
committed
[X86] Add more tests for D89178. NFC
1 parent 3b1d018 commit 09ee1fe

File tree

1 file changed

+209
-0
lines changed

1 file changed

+209
-0
lines changed

llvm/test/CodeGen/X86/xaluo128.ll

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=x86_64-darwin-unknown < %s | FileCheck %s --check-prefix=SDAG --check-prefix=X64
3+
; RUN: llc -mtriple=i686-darwin-unknown < %s | FileCheck %s --check-prefix=SDAG --check-prefix=X86
4+
5+
define zeroext i1 @saddoi128(i128 %v1, i128 %v2, i128* %res) nounwind {
6+
; X64-LABEL: saddoi128:
7+
; X64: ## %bb.0:
8+
; X64-NEXT: testq %rcx, %rcx
9+
; X64-NEXT: setns %r9b
10+
; X64-NEXT: testq %rsi, %rsi
11+
; X64-NEXT: setns %al
12+
; X64-NEXT: cmpb %r9b, %al
13+
; X64-NEXT: sete %r9b
14+
; X64-NEXT: addq %rdx, %rdi
15+
; X64-NEXT: adcq %rcx, %rsi
16+
; X64-NEXT: setns %cl
17+
; X64-NEXT: cmpb %cl, %al
18+
; X64-NEXT: setne %al
19+
; X64-NEXT: andb %r9b, %al
20+
; X64-NEXT: movq %rdi, (%r8)
21+
; X64-NEXT: movq %rsi, 8(%r8)
22+
; X64-NEXT: retq
23+
;
24+
; X86-LABEL: saddoi128:
25+
; X86: ## %bb.0:
26+
; X86-NEXT: pushl %ebp
27+
; X86-NEXT: pushl %ebx
28+
; X86-NEXT: pushl %edi
29+
; X86-NEXT: pushl %esi
30+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
31+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
32+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
33+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
34+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
35+
; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)
36+
; X86-NEXT: setns %al
37+
; X86-NEXT: testl %ebx, %ebx
38+
; X86-NEXT: setns %ah
39+
; X86-NEXT: cmpb %al, %ah
40+
; X86-NEXT: sete %cl
41+
; X86-NEXT: addl {{[0-9]+}}(%esp), %esi
42+
; X86-NEXT: adcl {{[0-9]+}}(%esp), %edi
43+
; X86-NEXT: adcl {{[0-9]+}}(%esp), %edx
44+
; X86-NEXT: adcl {{[0-9]+}}(%esp), %ebx
45+
; X86-NEXT: setns %al
46+
; X86-NEXT: cmpb %al, %ah
47+
; X86-NEXT: setne %al
48+
; X86-NEXT: andb %cl, %al
49+
; X86-NEXT: movl %esi, (%ebp)
50+
; X86-NEXT: movl %edi, 4(%ebp)
51+
; X86-NEXT: movl %edx, 8(%ebp)
52+
; X86-NEXT: movl %ebx, 12(%ebp)
53+
; X86-NEXT: popl %esi
54+
; X86-NEXT: popl %edi
55+
; X86-NEXT: popl %ebx
56+
; X86-NEXT: popl %ebp
57+
; X86-NEXT: retl
58+
%t = call {i128, i1} @llvm.sadd.with.overflow.i128(i128 %v1, i128 %v2)
59+
%val = extractvalue {i128, i1} %t, 0
60+
%obit = extractvalue {i128, i1} %t, 1
61+
store i128 %val, i128* %res
62+
ret i1 %obit
63+
}
64+
65+
define zeroext i1 @uaddoi128(i128 %v1, i128 %v2, i128* %res) nounwind {
66+
; X64-LABEL: uaddoi128:
67+
; X64: ## %bb.0:
68+
; X64-NEXT: addq %rdx, %rdi
69+
; X64-NEXT: adcq %rcx, %rsi
70+
; X64-NEXT: setb %al
71+
; X64-NEXT: movq %rdi, (%r8)
72+
; X64-NEXT: movq %rsi, 8(%r8)
73+
; X64-NEXT: retq
74+
;
75+
; X86-LABEL: uaddoi128:
76+
; X86: ## %bb.0:
77+
; X86-NEXT: pushl %ebx
78+
; X86-NEXT: pushl %edi
79+
; X86-NEXT: pushl %esi
80+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
81+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
82+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
83+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
84+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
85+
; X86-NEXT: addl {{[0-9]+}}(%esp), %edi
86+
; X86-NEXT: adcl {{[0-9]+}}(%esp), %ebx
87+
; X86-NEXT: adcl {{[0-9]+}}(%esp), %esi
88+
; X86-NEXT: adcl {{[0-9]+}}(%esp), %edx
89+
; X86-NEXT: setb %al
90+
; X86-NEXT: movl %edi, (%ecx)
91+
; X86-NEXT: movl %ebx, 4(%ecx)
92+
; X86-NEXT: movl %esi, 8(%ecx)
93+
; X86-NEXT: movl %edx, 12(%ecx)
94+
; X86-NEXT: popl %esi
95+
; X86-NEXT: popl %edi
96+
; X86-NEXT: popl %ebx
97+
; X86-NEXT: retl
98+
%t = call {i128, i1} @llvm.uadd.with.overflow.i128(i128 %v1, i128 %v2)
99+
%val = extractvalue {i128, i1} %t, 0
100+
%obit = extractvalue {i128, i1} %t, 1
101+
store i128 %val, i128* %res
102+
ret i1 %obit
103+
}
104+
105+
106+
define zeroext i1 @ssuboi128(i128 %v1, i128 %v2, i128* %res) nounwind {
107+
; X64-LABEL: ssuboi128:
108+
; X64: ## %bb.0:
109+
; X64-NEXT: testq %rcx, %rcx
110+
; X64-NEXT: setns %r9b
111+
; X64-NEXT: testq %rsi, %rsi
112+
; X64-NEXT: setns %al
113+
; X64-NEXT: cmpb %r9b, %al
114+
; X64-NEXT: setne %r9b
115+
; X64-NEXT: subq %rdx, %rdi
116+
; X64-NEXT: sbbq %rcx, %rsi
117+
; X64-NEXT: setns %cl
118+
; X64-NEXT: cmpb %cl, %al
119+
; X64-NEXT: setne %al
120+
; X64-NEXT: andb %r9b, %al
121+
; X64-NEXT: movq %rdi, (%r8)
122+
; X64-NEXT: movq %rsi, 8(%r8)
123+
; X64-NEXT: retq
124+
;
125+
; X86-LABEL: ssuboi128:
126+
; X86: ## %bb.0:
127+
; X86-NEXT: pushl %ebp
128+
; X86-NEXT: pushl %ebx
129+
; X86-NEXT: pushl %edi
130+
; X86-NEXT: pushl %esi
131+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
132+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
133+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
134+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
135+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
136+
; X86-NEXT: cmpl $0, {{[0-9]+}}(%esp)
137+
; X86-NEXT: setns %al
138+
; X86-NEXT: testl %ebx, %ebx
139+
; X86-NEXT: setns %ah
140+
; X86-NEXT: cmpb %al, %ah
141+
; X86-NEXT: setne %cl
142+
; X86-NEXT: subl {{[0-9]+}}(%esp), %esi
143+
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edi
144+
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edx
145+
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %ebx
146+
; X86-NEXT: setns %al
147+
; X86-NEXT: cmpb %al, %ah
148+
; X86-NEXT: setne %al
149+
; X86-NEXT: andb %cl, %al
150+
; X86-NEXT: movl %esi, (%ebp)
151+
; X86-NEXT: movl %edi, 4(%ebp)
152+
; X86-NEXT: movl %edx, 8(%ebp)
153+
; X86-NEXT: movl %ebx, 12(%ebp)
154+
; X86-NEXT: popl %esi
155+
; X86-NEXT: popl %edi
156+
; X86-NEXT: popl %ebx
157+
; X86-NEXT: popl %ebp
158+
; X86-NEXT: retl
159+
%t = call {i128, i1} @llvm.ssub.with.overflow.i128(i128 %v1, i128 %v2)
160+
%val = extractvalue {i128, i1} %t, 0
161+
%obit = extractvalue {i128, i1} %t, 1
162+
store i128 %val, i128* %res
163+
ret i1 %obit
164+
}
165+
166+
define zeroext i1 @usuboi128(i128 %v1, i128 %v2, i128* %res) nounwind {
167+
; X64-LABEL: usuboi128:
168+
; X64: ## %bb.0:
169+
; X64-NEXT: subq %rdx, %rdi
170+
; X64-NEXT: sbbq %rcx, %rsi
171+
; X64-NEXT: setb %al
172+
; X64-NEXT: movq %rdi, (%r8)
173+
; X64-NEXT: movq %rsi, 8(%r8)
174+
; X64-NEXT: retq
175+
;
176+
; X86-LABEL: usuboi128:
177+
; X86: ## %bb.0:
178+
; X86-NEXT: pushl %ebx
179+
; X86-NEXT: pushl %edi
180+
; X86-NEXT: pushl %esi
181+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
182+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
183+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
184+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
185+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
186+
; X86-NEXT: subl {{[0-9]+}}(%esp), %edi
187+
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %ebx
188+
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %esi
189+
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edx
190+
; X86-NEXT: setb %al
191+
; X86-NEXT: movl %edi, (%ecx)
192+
; X86-NEXT: movl %ebx, 4(%ecx)
193+
; X86-NEXT: movl %esi, 8(%ecx)
194+
; X86-NEXT: movl %edx, 12(%ecx)
195+
; X86-NEXT: popl %esi
196+
; X86-NEXT: popl %edi
197+
; X86-NEXT: popl %ebx
198+
; X86-NEXT: retl
199+
%t = call {i128, i1} @llvm.usub.with.overflow.i128(i128 %v1, i128 %v2)
200+
%val = extractvalue {i128, i1} %t, 0
201+
%obit = extractvalue {i128, i1} %t, 1
202+
store i128 %val, i128* %res
203+
ret i1 %obit
204+
}
205+
206+
declare {i128, i1} @llvm.sadd.with.overflow.i128(i128, i128) nounwind readnone
207+
declare {i128, i1} @llvm.uadd.with.overflow.i128(i128, i128) nounwind readnone
208+
declare {i128, i1} @llvm.ssub.with.overflow.i128(i128, i128) nounwind readnone
209+
declare {i128, i1} @llvm.usub.with.overflow.i128(i128, i128) nounwind readnone

0 commit comments

Comments
 (0)