1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X32
3
- ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix= X64
2
+ ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK,X86
3
+ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=CHECK, X64
4
4
5
5
define void @knownbits_zext_in_reg (ptr ) nounwind {
6
- ; X32 -LABEL: knownbits_zext_in_reg:
7
- ; X32 : # %bb.0: # %BB
8
- ; X32 -NEXT: pushl %ebx
9
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
10
- ; X32 -NEXT: movzbl (%eax), %ecx
11
- ; X32 -NEXT: imull $101, %ecx, %eax
12
- ; X32 -NEXT: shrl $14, %eax
13
- ; X32 -NEXT: imull $177, %ecx, %edx
14
- ; X32 -NEXT: shrl $14, %edx
15
- ; X32 -NEXT: movzbl %al, %ecx
16
- ; X32 -NEXT: xorl %ebx, %ebx
17
- ; X32 -NEXT: .p2align 4, 0x90
18
- ; X32 -NEXT: .LBB0_1: # %CF
19
- ; X32 -NEXT: # =>This Loop Header: Depth=1
20
- ; X32 -NEXT: # Child Loop BB0_2 Depth 2
21
- ; X32 -NEXT: movl %ecx, %eax
22
- ; X32 -NEXT: divb %dl
23
- ; X32 -NEXT: .p2align 4, 0x90
24
- ; X32 -NEXT: .LBB0_2: # %CF237
25
- ; X32 -NEXT: # Parent Loop BB0_1 Depth=1
26
- ; X32 -NEXT: # => This Inner Loop Header: Depth=2
27
- ; X32 -NEXT: testb %bl, %bl
28
- ; X32 -NEXT: jne .LBB0_2
29
- ; X32 -NEXT: jmp .LBB0_1
6
+ ; X86 -LABEL: knownbits_zext_in_reg:
7
+ ; X86 : # %bb.0: # %BB
8
+ ; X86 -NEXT: pushl %ebx
9
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
10
+ ; X86 -NEXT: movzbl (%eax), %ecx
11
+ ; X86 -NEXT: imull $101, %ecx, %eax
12
+ ; X86 -NEXT: shrl $14, %eax
13
+ ; X86 -NEXT: imull $177, %ecx, %edx
14
+ ; X86 -NEXT: shrl $14, %edx
15
+ ; X86 -NEXT: movzbl %al, %ecx
16
+ ; X86 -NEXT: xorl %ebx, %ebx
17
+ ; X86 -NEXT: .p2align 4, 0x90
18
+ ; X86 -NEXT: .LBB0_1: # %CF
19
+ ; X86 -NEXT: # =>This Loop Header: Depth=1
20
+ ; X86 -NEXT: # Child Loop BB0_2 Depth 2
21
+ ; X86 -NEXT: movl %ecx, %eax
22
+ ; X86 -NEXT: divb %dl
23
+ ; X86 -NEXT: .p2align 4, 0x90
24
+ ; X86 -NEXT: .LBB0_2: # %CF237
25
+ ; X86 -NEXT: # Parent Loop BB0_1 Depth=1
26
+ ; X86 -NEXT: # => This Inner Loop Header: Depth=2
27
+ ; X86 -NEXT: testb %bl, %bl
28
+ ; X86 -NEXT: jne .LBB0_2
29
+ ; X86 -NEXT: jmp .LBB0_1
30
30
;
31
31
; X64-LABEL: knownbits_zext_in_reg:
32
32
; X64: # %bb.0: # %BB
@@ -74,15 +74,10 @@ CF246: ; preds = %CF237
74
74
}
75
75
76
76
define i32 @knownbits_mask_add_lshr (i32 %a0 , i32 %a1 ) nounwind {
77
- ; X32-LABEL: knownbits_mask_add_lshr:
78
- ; X32: # %bb.0:
79
- ; X32-NEXT: xorl %eax, %eax
80
- ; X32-NEXT: retl
81
- ;
82
- ; X64-LABEL: knownbits_mask_add_lshr:
83
- ; X64: # %bb.0:
84
- ; X64-NEXT: xorl %eax, %eax
85
- ; X64-NEXT: retq
77
+ ; CHECK-LABEL: knownbits_mask_add_lshr:
78
+ ; CHECK: # %bb.0:
79
+ ; CHECK-NEXT: xorl %eax, %eax
80
+ ; CHECK-NEXT: ret{{[l|q]}}
86
81
%1 = and i32 %a0 , 32767
87
82
%2 = and i32 %a1 , 32766
88
83
%3 = add i32 %1 , %2
@@ -91,29 +86,29 @@ define i32 @knownbits_mask_add_lshr(i32 %a0, i32 %a1) nounwind {
91
86
}
92
87
93
88
define i128 @knownbits_mask_addc_shl (i64 %a0 , i64 %a1 , i64 %a2 ) nounwind {
94
- ; X32 -LABEL: knownbits_mask_addc_shl:
95
- ; X32 : # %bb.0:
96
- ; X32 -NEXT: pushl %edi
97
- ; X32 -NEXT: pushl %esi
98
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
99
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %ecx
100
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %edx
101
- ; X32 -NEXT: movl $-1024, %esi # imm = 0xFC00
102
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %edi
103
- ; X32 -NEXT: andl %esi, %edi
104
- ; X32 -NEXT: andl {{[0-9]+}}(%esp), %esi
105
- ; X32 -NEXT: addl %edi, %esi
106
- ; X32 -NEXT: adcl {{[0-9]+}}(%esp), %edx
107
- ; X32 -NEXT: adcl $0, %ecx
108
- ; X32 -NEXT: shldl $22, %edx, %ecx
109
- ; X32 -NEXT: shldl $22, %esi, %edx
110
- ; X32 -NEXT: movl %edx, 8(%eax)
111
- ; X32 -NEXT: movl %ecx, 12(%eax)
112
- ; X32 -NEXT: movl $0, 4(%eax)
113
- ; X32 -NEXT: movl $0, (%eax)
114
- ; X32 -NEXT: popl %esi
115
- ; X32 -NEXT: popl %edi
116
- ; X32 -NEXT: retl $4
89
+ ; X86 -LABEL: knownbits_mask_addc_shl:
90
+ ; X86 : # %bb.0:
91
+ ; X86 -NEXT: pushl %edi
92
+ ; X86 -NEXT: pushl %esi
93
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
94
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %ecx
95
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %edx
96
+ ; X86 -NEXT: movl $-1024, %esi # imm = 0xFC00
97
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %edi
98
+ ; X86 -NEXT: andl %esi, %edi
99
+ ; X86 -NEXT: andl {{[0-9]+}}(%esp), %esi
100
+ ; X86 -NEXT: addl %edi, %esi
101
+ ; X86 -NEXT: adcl {{[0-9]+}}(%esp), %edx
102
+ ; X86 -NEXT: adcl $0, %ecx
103
+ ; X86 -NEXT: shldl $22, %edx, %ecx
104
+ ; X86 -NEXT: shldl $22, %esi, %edx
105
+ ; X86 -NEXT: movl %edx, 8(%eax)
106
+ ; X86 -NEXT: movl %ecx, 12(%eax)
107
+ ; X86 -NEXT: movl $0, 4(%eax)
108
+ ; X86 -NEXT: movl $0, (%eax)
109
+ ; X86 -NEXT: popl %esi
110
+ ; X86 -NEXT: popl %edi
111
+ ; X86 -NEXT: retl $4
117
112
;
118
113
; X64-LABEL: knownbits_mask_addc_shl:
119
114
; X64: # %bb.0:
@@ -137,15 +132,15 @@ define i128 @knownbits_mask_addc_shl(i64 %a0, i64 %a1, i64 %a2) nounwind {
137
132
}
138
133
139
134
define {i32 , i1 } @knownbits_uaddo_saddo (i64 %a0 , i64 %a1 ) nounwind {
140
- ; X32 -LABEL: knownbits_uaddo_saddo:
141
- ; X32 : # %bb.0:
142
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
143
- ; X32 -NEXT: addl {{[0-9]+}}(%esp), %eax
144
- ; X32 -NEXT: setb %al
145
- ; X32 -NEXT: seto %dl
146
- ; X32 -NEXT: orb %al, %dl
147
- ; X32 -NEXT: xorl %eax, %eax
148
- ; X32 -NEXT: retl
135
+ ; X86 -LABEL: knownbits_uaddo_saddo:
136
+ ; X86 : # %bb.0:
137
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
138
+ ; X86 -NEXT: addl {{[0-9]+}}(%esp), %eax
139
+ ; X86 -NEXT: setb %al
140
+ ; X86 -NEXT: seto %dl
141
+ ; X86 -NEXT: orb %al, %dl
142
+ ; X86 -NEXT: xorl %eax, %eax
143
+ ; X86 -NEXT: retl
149
144
;
150
145
; X64-LABEL: knownbits_uaddo_saddo:
151
146
; X64: # %bb.0:
@@ -174,15 +169,15 @@ define {i32, i1} @knownbits_uaddo_saddo(i64 %a0, i64 %a1) nounwind {
174
169
}
175
170
176
171
define {i32 , i1 } @knownbits_usubo_ssubo (i64 %a0 , i64 %a1 ) nounwind {
177
- ; X32 -LABEL: knownbits_usubo_ssubo:
178
- ; X32 : # %bb.0:
179
- ; X32 -NEXT: movl {{[0-9]+}}(%esp), %eax
180
- ; X32 -NEXT: cmpl {{[0-9]+}}(%esp), %eax
181
- ; X32 -NEXT: setb %al
182
- ; X32 -NEXT: seto %dl
183
- ; X32 -NEXT: orb %al, %dl
184
- ; X32 -NEXT: xorl %eax, %eax
185
- ; X32 -NEXT: retl
172
+ ; X86 -LABEL: knownbits_usubo_ssubo:
173
+ ; X86 : # %bb.0:
174
+ ; X86 -NEXT: movl {{[0-9]+}}(%esp), %eax
175
+ ; X86 -NEXT: cmpl {{[0-9]+}}(%esp), %eax
176
+ ; X86 -NEXT: setb %al
177
+ ; X86 -NEXT: seto %dl
178
+ ; X86 -NEXT: orb %al, %dl
179
+ ; X86 -NEXT: xorl %eax, %eax
180
+ ; X86 -NEXT: retl
186
181
;
187
182
; X64-LABEL: knownbits_usubo_ssubo:
188
183
; X64: # %bb.0:
@@ -216,30 +211,20 @@ declare {i64, i1} @llvm.usub.with.overflow.i64(i64, i64) nounwind readnone
216
211
declare {i64 , i1 } @llvm.ssub.with.overflow.i64 (i64 , i64 ) nounwind readnone
217
212
218
213
define i32 @knownbits_fshl (i32 %a0 ) nounwind {
219
- ; X32-LABEL: knownbits_fshl:
220
- ; X32: # %bb.0:
221
- ; X32-NEXT: movl $3, %eax
222
- ; X32-NEXT: retl
223
- ;
224
- ; X64-LABEL: knownbits_fshl:
225
- ; X64: # %bb.0:
226
- ; X64-NEXT: movl $3, %eax
227
- ; X64-NEXT: retq
214
+ ; CHECK-LABEL: knownbits_fshl:
215
+ ; CHECK: # %bb.0:
216
+ ; CHECK-NEXT: movl $3, %eax
217
+ ; CHECK-NEXT: ret{{[l|q]}}
228
218
%1 = tail call i32 @llvm.fshl.i32 (i32 %a0 , i32 -1 , i32 5 )
229
219
%2 = and i32 %1 , 3
230
220
ret i32 %2
231
221
}
232
222
233
223
define i32 @knownbits_fshr (i32 %a0 ) nounwind {
234
- ; X32-LABEL: knownbits_fshr:
235
- ; X32: # %bb.0:
236
- ; X32-NEXT: movl $3, %eax
237
- ; X32-NEXT: retl
238
- ;
239
- ; X64-LABEL: knownbits_fshr:
240
- ; X64: # %bb.0:
241
- ; X64-NEXT: movl $3, %eax
242
- ; X64-NEXT: retq
224
+ ; CHECK-LABEL: knownbits_fshr:
225
+ ; CHECK: # %bb.0:
226
+ ; CHECK-NEXT: movl $3, %eax
227
+ ; CHECK-NEXT: ret{{[l|q]}}
243
228
%1 = tail call i32 @llvm.fshr.i32 (i32 %a0 , i32 -1 , i32 5 )
244
229
%2 = and i32 %1 , 3
245
230
ret i32 %2
0 commit comments