11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=-bmi,-tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X86-NOBMI
3- ; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,-tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X86-BMI1
4- ; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,+tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X86-BMI1
53; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,+tbm,+bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X86-BMI2
64; RUN: llc -mtriple=i686-unknown-linux-gnu -mattr=+bmi,-tbm,+bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X86-BMI2
75; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=-bmi,-tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X64-NOBMI
8- ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+bmi,-tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X64-BMI1
9- ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+bmi,+tbm,-bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X64-BMI1
106; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+bmi,+tbm,+bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X64-BMI2
117; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+bmi,-tbm,+bmi2,+fast-bextr < %s | FileCheck %s --check-prefixes=X64-BMI2
128
13- define i32 @mask_pair (i32 %x , i32 %y ) {
9+ define i32 @mask_pair (i32 %x , i32 %y ) nounwind {
1410; X86-NOBMI-LABEL: mask_pair:
1511; X86-NOBMI: # %bb.0:
1612; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
@@ -19,14 +15,6 @@ define i32 @mask_pair(i32 %x, i32 %y) {
1915; X86-NOBMI-NEXT: shll %cl, %eax
2016; X86-NOBMI-NEXT: retl
2117;
22- ; X86-BMI1-LABEL: mask_pair:
23- ; X86-BMI1: # %bb.0:
24- ; X86-BMI1-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
25- ; X86-BMI1-NEXT: movl {{[0-9]+}}(%esp), %eax
26- ; X86-BMI1-NEXT: shrl %cl, %eax
27- ; X86-BMI1-NEXT: shll %cl, %eax
28- ; X86-BMI1-NEXT: retl
29- ;
3018; X86-BMI2-LABEL: mask_pair:
3119; X86-BMI2: # %bb.0:
3220; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %eax
@@ -43,15 +31,6 @@ define i32 @mask_pair(i32 %x, i32 %y) {
4331; X64-NOBMI-NEXT: shll %cl, %eax
4432; X64-NOBMI-NEXT: retq
4533;
46- ; X64-BMI1-LABEL: mask_pair:
47- ; X64-BMI1: # %bb.0:
48- ; X64-BMI1-NEXT: movl %esi, %ecx
49- ; X64-BMI1-NEXT: movl %edi, %eax
50- ; X64-BMI1-NEXT: shrl %cl, %eax
51- ; X64-BMI1-NEXT: # kill: def $cl killed $cl killed $ecx
52- ; X64-BMI1-NEXT: shll %cl, %eax
53- ; X64-BMI1-NEXT: retq
54- ;
5534; X64-BMI2-LABEL: mask_pair:
5635; X64-BMI2: # %bb.0:
5736; X64-BMI2-NEXT: shrxl %esi, %edi, %eax
@@ -62,7 +41,7 @@ define i32 @mask_pair(i32 %x, i32 %y) {
6241 ret i32 %and
6342}
6443
65- define i64 @mask_pair_64 (i64 %x , i64 %y ) {
44+ define i64 @mask_pair_64 (i64 %x , i64 %y ) nounwind {
6645; X86-NOBMI-LABEL: mask_pair_64:
6746; X86-NOBMI: # %bb.0:
6847; X86-NOBMI-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
@@ -79,22 +58,6 @@ define i64 @mask_pair_64(i64 %x, i64 %y) {
7958; X86-NOBMI-NEXT: andl {{[0-9]+}}(%esp), %edx
8059; X86-NOBMI-NEXT: retl
8160;
82- ; X86-BMI1-LABEL: mask_pair_64:
83- ; X86-BMI1: # %bb.0:
84- ; X86-BMI1-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
85- ; X86-BMI1-NEXT: movl $-1, %edx
86- ; X86-BMI1-NEXT: movl $-1, %eax
87- ; X86-BMI1-NEXT: shll %cl, %eax
88- ; X86-BMI1-NEXT: testb $32, %cl
89- ; X86-BMI1-NEXT: je .LBB1_2
90- ; X86-BMI1-NEXT: # %bb.1:
91- ; X86-BMI1-NEXT: movl %eax, %edx
92- ; X86-BMI1-NEXT: xorl %eax, %eax
93- ; X86-BMI1-NEXT: .LBB1_2:
94- ; X86-BMI1-NEXT: andl {{[0-9]+}}(%esp), %eax
95- ; X86-BMI1-NEXT: andl {{[0-9]+}}(%esp), %edx
96- ; X86-BMI1-NEXT: retl
97- ;
9861; X86-BMI2-LABEL: mask_pair_64:
9962; X86-BMI2: # %bb.0:
10063; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
@@ -119,15 +82,6 @@ define i64 @mask_pair_64(i64 %x, i64 %y) {
11982; X64-NOBMI-NEXT: shlq %cl, %rax
12083; X64-NOBMI-NEXT: retq
12184;
122- ; X64-BMI1-LABEL: mask_pair_64:
123- ; X64-BMI1: # %bb.0:
124- ; X64-BMI1-NEXT: movq %rsi, %rcx
125- ; X64-BMI1-NEXT: movq %rdi, %rax
126- ; X64-BMI1-NEXT: shrq %cl, %rax
127- ; X64-BMI1-NEXT: # kill: def $cl killed $cl killed $rcx
128- ; X64-BMI1-NEXT: shlq %cl, %rax
129- ; X64-BMI1-NEXT: retq
130- ;
13185; X64-BMI2-LABEL: mask_pair_64:
13286; X64-BMI2: # %bb.0:
13387; X64-BMI2-NEXT: shrxq %rsi, %rdi, %rax
@@ -138,20 +92,13 @@ define i64 @mask_pair_64(i64 %x, i64 %y) {
13892 ret i64 %and
13993}
14094
141- define i128 @mask_pair_128 (i128 %x , i128 %y ) {
95+ define i128 @mask_pair_128 (i128 %x , i128 %y ) nounwind {
14296; X86-NOBMI-LABEL: mask_pair_128:
14397; X86-NOBMI: # %bb.0:
14498; X86-NOBMI-NEXT: pushl %ebx
145- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 8
14699; X86-NOBMI-NEXT: pushl %edi
147- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 12
148100; X86-NOBMI-NEXT: pushl %esi
149- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 16
150101; X86-NOBMI-NEXT: subl $32, %esp
151- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 48
152- ; X86-NOBMI-NEXT: .cfi_offset %esi, -16
153- ; X86-NOBMI-NEXT: .cfi_offset %edi, -12
154- ; X86-NOBMI-NEXT: .cfi_offset %ebx, -8
155102; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx
156103; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax
157104; X86-NOBMI-NEXT: movl $-1, {{[0-9]+}}(%esp)
@@ -185,83 +132,17 @@ define i128 @mask_pair_128(i128 %x, i128 %y) {
185132; X86-NOBMI-NEXT: movl %ebx, 4(%eax)
186133; X86-NOBMI-NEXT: movl %edi, (%eax)
187134; X86-NOBMI-NEXT: addl $32, %esp
188- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 16
189135; X86-NOBMI-NEXT: popl %esi
190- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 12
191136; X86-NOBMI-NEXT: popl %edi
192- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 8
193137; X86-NOBMI-NEXT: popl %ebx
194- ; X86-NOBMI-NEXT: .cfi_def_cfa_offset 4
195138; X86-NOBMI-NEXT: retl $4
196139;
197- ; X86-BMI1-LABEL: mask_pair_128:
198- ; X86-BMI1: # %bb.0:
199- ; X86-BMI1-NEXT: pushl %ebx
200- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 8
201- ; X86-BMI1-NEXT: pushl %edi
202- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 12
203- ; X86-BMI1-NEXT: pushl %esi
204- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 16
205- ; X86-BMI1-NEXT: subl $32, %esp
206- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 48
207- ; X86-BMI1-NEXT: .cfi_offset %esi, -16
208- ; X86-BMI1-NEXT: .cfi_offset %edi, -12
209- ; X86-BMI1-NEXT: .cfi_offset %ebx, -8
210- ; X86-BMI1-NEXT: movl {{[0-9]+}}(%esp), %ecx
211- ; X86-BMI1-NEXT: movl {{[0-9]+}}(%esp), %eax
212- ; X86-BMI1-NEXT: movl $-1, {{[0-9]+}}(%esp)
213- ; X86-BMI1-NEXT: movl $-1, {{[0-9]+}}(%esp)
214- ; X86-BMI1-NEXT: movl $-1, {{[0-9]+}}(%esp)
215- ; X86-BMI1-NEXT: movl $-1, {{[0-9]+}}(%esp)
216- ; X86-BMI1-NEXT: movl $0, {{[0-9]+}}(%esp)
217- ; X86-BMI1-NEXT: movl $0, {{[0-9]+}}(%esp)
218- ; X86-BMI1-NEXT: movl $0, {{[0-9]+}}(%esp)
219- ; X86-BMI1-NEXT: movl $0, (%esp)
220- ; X86-BMI1-NEXT: movl %ecx, %edx
221- ; X86-BMI1-NEXT: shrb $3, %dl
222- ; X86-BMI1-NEXT: andb $12, %dl
223- ; X86-BMI1-NEXT: negb %dl
224- ; X86-BMI1-NEXT: movsbl %dl, %ebx
225- ; X86-BMI1-NEXT: movl 24(%esp,%ebx), %edx
226- ; X86-BMI1-NEXT: movl 28(%esp,%ebx), %esi
227- ; X86-BMI1-NEXT: shldl %cl, %edx, %esi
228- ; X86-BMI1-NEXT: movl 16(%esp,%ebx), %edi
229- ; X86-BMI1-NEXT: movl 20(%esp,%ebx), %ebx
230- ; X86-BMI1-NEXT: shldl %cl, %ebx, %edx
231- ; X86-BMI1-NEXT: shldl %cl, %edi, %ebx
232- ; X86-BMI1-NEXT: # kill: def $cl killed $cl killed $ecx
233- ; X86-BMI1-NEXT: shll %cl, %edi
234- ; X86-BMI1-NEXT: andl {{[0-9]+}}(%esp), %edx
235- ; X86-BMI1-NEXT: andl {{[0-9]+}}(%esp), %esi
236- ; X86-BMI1-NEXT: andl {{[0-9]+}}(%esp), %edi
237- ; X86-BMI1-NEXT: andl {{[0-9]+}}(%esp), %ebx
238- ; X86-BMI1-NEXT: movl %esi, 12(%eax)
239- ; X86-BMI1-NEXT: movl %edx, 8(%eax)
240- ; X86-BMI1-NEXT: movl %ebx, 4(%eax)
241- ; X86-BMI1-NEXT: movl %edi, (%eax)
242- ; X86-BMI1-NEXT: addl $32, %esp
243- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 16
244- ; X86-BMI1-NEXT: popl %esi
245- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 12
246- ; X86-BMI1-NEXT: popl %edi
247- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 8
248- ; X86-BMI1-NEXT: popl %ebx
249- ; X86-BMI1-NEXT: .cfi_def_cfa_offset 4
250- ; X86-BMI1-NEXT: retl $4
251- ;
252140; X86-BMI2-LABEL: mask_pair_128:
253141; X86-BMI2: # %bb.0:
254142; X86-BMI2-NEXT: pushl %ebx
255- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 8
256143; X86-BMI2-NEXT: pushl %edi
257- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 12
258144; X86-BMI2-NEXT: pushl %esi
259- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 16
260145; X86-BMI2-NEXT: subl $32, %esp
261- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 48
262- ; X86-BMI2-NEXT: .cfi_offset %esi, -16
263- ; X86-BMI2-NEXT: .cfi_offset %edi, -12
264- ; X86-BMI2-NEXT: .cfi_offset %ebx, -8
265146; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
266147; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
267148; X86-BMI2-NEXT: movl $-1, {{[0-9]+}}(%esp)
@@ -294,13 +175,9 @@ define i128 @mask_pair_128(i128 %x, i128 %y) {
294175; X86-BMI2-NEXT: movl %edi, 4(%eax)
295176; X86-BMI2-NEXT: movl %ecx, (%eax)
296177; X86-BMI2-NEXT: addl $32, %esp
297- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 16
298178; X86-BMI2-NEXT: popl %esi
299- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 12
300179; X86-BMI2-NEXT: popl %edi
301- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 8
302180; X86-BMI2-NEXT: popl %ebx
303- ; X86-BMI2-NEXT: .cfi_def_cfa_offset 4
304181; X86-BMI2-NEXT: retl $4
305182;
306183; X64-NOBMI-LABEL: mask_pair_128:
@@ -317,20 +194,6 @@ define i128 @mask_pair_128(i128 %x, i128 %y) {
317194; X64-NOBMI-NEXT: andq %rsi, %rdx
318195; X64-NOBMI-NEXT: retq
319196;
320- ; X64-BMI1-LABEL: mask_pair_128:
321- ; X64-BMI1: # %bb.0:
322- ; X64-BMI1-NEXT: movq %rdx, %rcx
323- ; X64-BMI1-NEXT: movq $-1, %rdx
324- ; X64-BMI1-NEXT: movq $-1, %r8
325- ; X64-BMI1-NEXT: shlq %cl, %r8
326- ; X64-BMI1-NEXT: xorl %eax, %eax
327- ; X64-BMI1-NEXT: testb $64, %cl
328- ; X64-BMI1-NEXT: cmovneq %r8, %rdx
329- ; X64-BMI1-NEXT: cmoveq %r8, %rax
330- ; X64-BMI1-NEXT: andq %rdi, %rax
331- ; X64-BMI1-NEXT: andq %rsi, %rdx
332- ; X64-BMI1-NEXT: retq
333- ;
334197; X64-BMI2-LABEL: mask_pair_128:
335198; X64-BMI2: # %bb.0:
336199; X64-BMI2-NEXT: movq $-1, %rcx
0 commit comments