From 9a82bbb8a3af0a25c67f74e8f17a7c60c65be15d Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Mon, 3 Jun 2019 08:44:09 +0000 Subject: [PATCH] [NFC][X86] extract-{low,}bits.ll: one more pattern c with truncation git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362364 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/extract-bits.ll | 416 ++++++++++++++++++---------- test/CodeGen/X86/extract-lowbits.ll | 223 +++++++++------ 2 files changed, 411 insertions(+), 228 deletions(-) diff --git a/test/CodeGen/X86/extract-bits.ll b/test/CodeGen/X86/extract-bits.ll index ed0bdf3efc0..254e006b1ce 100644 --- a/test/CodeGen/X86/extract-bits.ll +++ b/test/CodeGen/X86/extract-bits.ll @@ -6515,6 +6515,134 @@ define i32 @bextr64_32_c2(i64 %val, i64 %numskipbits, i32 %numlowbits) nounwind ret i32 %truncmasked } +; Shifting happens in 64-bit. Mask is 32-bit, but calculated in 64-bit. +; Masking is 64-bit. Then truncation. +define i32 @bextr64_32_c3(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind { +; X86-NOBMI-LABEL: bextr64_32_c3: +; X86-NOBMI: # %bb.0: +; X86-NOBMI-NEXT: pushl %esi +; X86-NOBMI-NEXT: movb {{[0-9]+}}(%esp), %cl +; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-NOBMI-NEXT: movl %esi, %edx +; X86-NOBMI-NEXT: shrl %cl, %edx +; X86-NOBMI-NEXT: shrdl %cl, %esi, %eax +; X86-NOBMI-NEXT: testb $32, %cl +; X86-NOBMI-NEXT: jne .LBB50_2 +; X86-NOBMI-NEXT: # %bb.1: +; X86-NOBMI-NEXT: movl %eax, %edx +; X86-NOBMI-NEXT: .LBB50_2: +; X86-NOBMI-NEXT: movb $64, %cl +; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl +; X86-NOBMI-NEXT: xorl %eax, %eax +; X86-NOBMI-NEXT: movl $-1, %esi +; X86-NOBMI-NEXT: shrdl %cl, %eax, %esi +; X86-NOBMI-NEXT: testb $32, %cl +; X86-NOBMI-NEXT: jne .LBB50_4 +; X86-NOBMI-NEXT: # %bb.3: +; X86-NOBMI-NEXT: movl %esi, %eax +; X86-NOBMI-NEXT: .LBB50_4: +; X86-NOBMI-NEXT: andl %edx, %eax +; X86-NOBMI-NEXT: popl %esi +; X86-NOBMI-NEXT: retl +; +; X86-BMI1NOTBM-LABEL: bextr64_32_c3: +; X86-BMI1NOTBM: # %bb.0: +; X86-BMI1NOTBM-NEXT: pushl %esi +; X86-BMI1NOTBM-NEXT: movb {{[0-9]+}}(%esp), %cl +; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %esi +; X86-BMI1NOTBM-NEXT: movl %esi, %edx +; X86-BMI1NOTBM-NEXT: shrl %cl, %edx +; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %eax +; X86-BMI1NOTBM-NEXT: testb $32, %cl +; X86-BMI1NOTBM-NEXT: jne .LBB50_2 +; X86-BMI1NOTBM-NEXT: # %bb.1: +; X86-BMI1NOTBM-NEXT: movl %eax, %edx +; X86-BMI1NOTBM-NEXT: .LBB50_2: +; X86-BMI1NOTBM-NEXT: movb $64, %cl +; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl +; X86-BMI1NOTBM-NEXT: xorl %eax, %eax +; X86-BMI1NOTBM-NEXT: movl $-1, %esi +; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %esi +; X86-BMI1NOTBM-NEXT: testb $32, %cl +; X86-BMI1NOTBM-NEXT: jne .LBB50_4 +; X86-BMI1NOTBM-NEXT: # %bb.3: +; X86-BMI1NOTBM-NEXT: movl %esi, %eax +; X86-BMI1NOTBM-NEXT: .LBB50_4: +; X86-BMI1NOTBM-NEXT: andl %edx, %eax +; X86-BMI1NOTBM-NEXT: popl %esi +; X86-BMI1NOTBM-NEXT: retl +; +; X86-BMI1BMI2-LABEL: bextr64_32_c3: +; X86-BMI1BMI2: # %bb.0: +; X86-BMI1BMI2-NEXT: pushl %esi +; X86-BMI1BMI2-NEXT: movb {{[0-9]+}}(%esp), %cl +; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx +; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax +; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %edx +; X86-BMI1BMI2-NEXT: testb $32, %cl +; X86-BMI1BMI2-NEXT: je .LBB50_2 +; X86-BMI1BMI2-NEXT: # %bb.1: +; X86-BMI1BMI2-NEXT: shrxl %ecx, %eax, %edx +; X86-BMI1BMI2-NEXT: .LBB50_2: +; X86-BMI1BMI2-NEXT: movb $64, %cl +; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl +; X86-BMI1BMI2-NEXT: xorl %eax, %eax +; X86-BMI1BMI2-NEXT: movl $-1, %esi +; X86-BMI1BMI2-NEXT: shrdl %cl, %eax, %esi +; X86-BMI1BMI2-NEXT: testb $32, %cl +; X86-BMI1BMI2-NEXT: jne .LBB50_4 +; X86-BMI1BMI2-NEXT: # %bb.3: +; X86-BMI1BMI2-NEXT: movl %esi, %eax +; X86-BMI1BMI2-NEXT: .LBB50_4: +; X86-BMI1BMI2-NEXT: andl %edx, %eax +; X86-BMI1BMI2-NEXT: popl %esi +; X86-BMI1BMI2-NEXT: retl +; +; X64-NOBMI-LABEL: bextr64_32_c3: +; X64-NOBMI: # %bb.0: +; X64-NOBMI-NEXT: movq %rsi, %rcx +; X64-NOBMI-NEXT: # kill: def $cl killed $cl killed $rcx +; X64-NOBMI-NEXT: shrq %cl, %rdi +; X64-NOBMI-NEXT: negb %dl +; X64-NOBMI-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF +; X64-NOBMI-NEXT: movl %edx, %ecx +; X64-NOBMI-NEXT: shrq %cl, %rax +; X64-NOBMI-NEXT: andl %edi, %eax +; X64-NOBMI-NEXT: # kill: def $eax killed $eax killed $rax +; X64-NOBMI-NEXT: retq +; +; X64-BMI1NOTBM-LABEL: bextr64_32_c3: +; X64-BMI1NOTBM: # %bb.0: +; X64-BMI1NOTBM-NEXT: movq %rsi, %rcx +; X64-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $rcx +; X64-BMI1NOTBM-NEXT: shrq %cl, %rdi +; X64-BMI1NOTBM-NEXT: negb %dl +; X64-BMI1NOTBM-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF +; X64-BMI1NOTBM-NEXT: movl %edx, %ecx +; X64-BMI1NOTBM-NEXT: shrq %cl, %rax +; X64-BMI1NOTBM-NEXT: andl %edi, %eax +; X64-BMI1NOTBM-NEXT: # kill: def $eax killed $eax killed $rax +; X64-BMI1NOTBM-NEXT: retq +; +; X64-BMI1BMI2-LABEL: bextr64_32_c3: +; X64-BMI1BMI2: # %bb.0: +; X64-BMI1BMI2-NEXT: shrxq %rsi, %rdi, %rcx +; X64-BMI1BMI2-NEXT: negb %dl +; X64-BMI1BMI2-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF +; X64-BMI1BMI2-NEXT: shrxq %rdx, %rax, %rax +; X64-BMI1BMI2-NEXT: andl %ecx, %eax +; X64-BMI1BMI2-NEXT: # kill: def $eax killed $eax killed $rax +; X64-BMI1BMI2-NEXT: retq + %shifted = lshr i64 %val, %numskipbits + %numhighbits = sub i64 64, %numlowbits + %mask = lshr i64 4294967295, %numhighbits + %masked = and i64 %mask, %shifted + %truncmasked = trunc i64 %masked to i32 + ret i32 %truncmasked +} + ; ---------------------------------------------------------------------------- ; ; Pattern d. 32-bit. ; ---------------------------------------------------------------------------- ; @@ -6895,36 +7023,36 @@ define i64 @bextr64_d0(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind { ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi ; X86-NOBMI-NEXT: xorl %esi, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB55_2 +; X86-NOBMI-NEXT: je .LBB56_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi ; X86-NOBMI-NEXT: xorl %eax, %eax -; X86-NOBMI-NEXT: .LBB55_2: +; X86-NOBMI-NEXT: .LBB56_2: ; X86-NOBMI-NEXT: movb $64, %cl ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax ; X86-NOBMI-NEXT: shll %cl, %edi ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %edi, %ebx -; X86-NOBMI-NEXT: jne .LBB55_4 +; X86-NOBMI-NEXT: jne .LBB56_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %eax, %ebx -; X86-NOBMI-NEXT: .LBB55_4: +; X86-NOBMI-NEXT: .LBB56_4: ; X86-NOBMI-NEXT: movl %ebx, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB55_6 +; X86-NOBMI-NEXT: jne .LBB56_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %edi, %esi ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB55_6: +; X86-NOBMI-NEXT: .LBB56_6: ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB55_8 +; X86-NOBMI-NEXT: jne .LBB56_8 ; X86-NOBMI-NEXT: # %bb.7: ; X86-NOBMI-NEXT: movl %esi, %eax -; X86-NOBMI-NEXT: .LBB55_8: +; X86-NOBMI-NEXT: .LBB56_8: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -6943,36 +7071,36 @@ define i64 @bextr64_d0(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind { ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB55_2 +; X86-BMI1NOTBM-NEXT: je .LBB56_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax -; X86-BMI1NOTBM-NEXT: .LBB55_2: +; X86-BMI1NOTBM-NEXT: .LBB56_2: ; X86-BMI1NOTBM-NEXT: movb $64, %cl ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax ; X86-BMI1NOTBM-NEXT: shll %cl, %edi ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx -; X86-BMI1NOTBM-NEXT: jne .LBB55_4 +; X86-BMI1NOTBM-NEXT: jne .LBB56_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx -; X86-BMI1NOTBM-NEXT: .LBB55_4: +; X86-BMI1NOTBM-NEXT: .LBB56_4: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB55_6 +; X86-BMI1NOTBM-NEXT: jne .LBB56_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %edi, %esi ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB55_6: +; X86-BMI1NOTBM-NEXT: .LBB56_6: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB55_8 +; X86-BMI1NOTBM-NEXT: jne .LBB56_8 ; X86-BMI1NOTBM-NEXT: # %bb.7: ; X86-BMI1NOTBM-NEXT: movl %esi, %eax -; X86-BMI1NOTBM-NEXT: .LBB55_8: +; X86-BMI1NOTBM-NEXT: .LBB56_8: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -6989,32 +7117,32 @@ define i64 @bextr64_d0(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind { ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %esi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB55_2 +; X86-BMI1BMI2-NEXT: je .LBB56_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %esi, %eax ; X86-BMI1BMI2-NEXT: xorl %esi, %esi -; X86-BMI1BMI2-NEXT: .LBB55_2: +; X86-BMI1BMI2-NEXT: .LBB56_2: ; X86-BMI1BMI2-NEXT: movb $64, %cl ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB55_4 +; X86-BMI1BMI2-NEXT: je .LBB56_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB55_4: +; X86-BMI1BMI2-NEXT: .LBB56_4: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB55_6 +; X86-BMI1BMI2-NEXT: jne .LBB56_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB55_6: +; X86-BMI1BMI2-NEXT: .LBB56_6: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB55_8 +; X86-BMI1BMI2-NEXT: jne .LBB56_8 ; X86-BMI1BMI2-NEXT: # %bb.7: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB55_8: +; X86-BMI1BMI2-NEXT: .LBB56_8: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -7065,36 +7193,36 @@ define i64 @bextr64_d1_indexzext(i64 %val, i8 %numskipbits, i8 %numlowbits) noun ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi ; X86-NOBMI-NEXT: xorl %esi, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB56_2 +; X86-NOBMI-NEXT: je .LBB57_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi ; X86-NOBMI-NEXT: xorl %eax, %eax -; X86-NOBMI-NEXT: .LBB56_2: +; X86-NOBMI-NEXT: .LBB57_2: ; X86-NOBMI-NEXT: movb $64, %cl ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax ; X86-NOBMI-NEXT: shll %cl, %edi ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %edi, %ebx -; X86-NOBMI-NEXT: jne .LBB56_4 +; X86-NOBMI-NEXT: jne .LBB57_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %eax, %ebx -; X86-NOBMI-NEXT: .LBB56_4: +; X86-NOBMI-NEXT: .LBB57_4: ; X86-NOBMI-NEXT: movl %ebx, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB56_6 +; X86-NOBMI-NEXT: jne .LBB57_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %edi, %esi ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB56_6: +; X86-NOBMI-NEXT: .LBB57_6: ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB56_8 +; X86-NOBMI-NEXT: jne .LBB57_8 ; X86-NOBMI-NEXT: # %bb.7: ; X86-NOBMI-NEXT: movl %esi, %eax -; X86-NOBMI-NEXT: .LBB56_8: +; X86-NOBMI-NEXT: .LBB57_8: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -7113,36 +7241,36 @@ define i64 @bextr64_d1_indexzext(i64 %val, i8 %numskipbits, i8 %numlowbits) noun ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB56_2 +; X86-BMI1NOTBM-NEXT: je .LBB57_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax -; X86-BMI1NOTBM-NEXT: .LBB56_2: +; X86-BMI1NOTBM-NEXT: .LBB57_2: ; X86-BMI1NOTBM-NEXT: movb $64, %cl ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax ; X86-BMI1NOTBM-NEXT: shll %cl, %edi ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx -; X86-BMI1NOTBM-NEXT: jne .LBB56_4 +; X86-BMI1NOTBM-NEXT: jne .LBB57_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx -; X86-BMI1NOTBM-NEXT: .LBB56_4: +; X86-BMI1NOTBM-NEXT: .LBB57_4: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB56_6 +; X86-BMI1NOTBM-NEXT: jne .LBB57_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %edi, %esi ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB56_6: +; X86-BMI1NOTBM-NEXT: .LBB57_6: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB56_8 +; X86-BMI1NOTBM-NEXT: jne .LBB57_8 ; X86-BMI1NOTBM-NEXT: # %bb.7: ; X86-BMI1NOTBM-NEXT: movl %esi, %eax -; X86-BMI1NOTBM-NEXT: .LBB56_8: +; X86-BMI1NOTBM-NEXT: .LBB57_8: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -7159,32 +7287,32 @@ define i64 @bextr64_d1_indexzext(i64 %val, i8 %numskipbits, i8 %numlowbits) noun ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %esi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB56_2 +; X86-BMI1BMI2-NEXT: je .LBB57_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %esi, %eax ; X86-BMI1BMI2-NEXT: xorl %esi, %esi -; X86-BMI1BMI2-NEXT: .LBB56_2: +; X86-BMI1BMI2-NEXT: .LBB57_2: ; X86-BMI1BMI2-NEXT: movb $64, %cl ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB56_4 +; X86-BMI1BMI2-NEXT: je .LBB57_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB56_4: +; X86-BMI1BMI2-NEXT: .LBB57_4: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB56_6 +; X86-BMI1BMI2-NEXT: jne .LBB57_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB56_6: +; X86-BMI1BMI2-NEXT: .LBB57_6: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB56_8 +; X86-BMI1BMI2-NEXT: jne .LBB57_8 ; X86-BMI1BMI2-NEXT: # %bb.7: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB56_8: +; X86-BMI1BMI2-NEXT: .LBB57_8: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -7240,36 +7368,36 @@ define i64 @bextr64_d2_load(i64* %w, i64 %numskipbits, i64 %numlowbits) nounwind ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi ; X86-NOBMI-NEXT: xorl %esi, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB57_2 +; X86-NOBMI-NEXT: je .LBB58_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi ; X86-NOBMI-NEXT: xorl %eax, %eax -; X86-NOBMI-NEXT: .LBB57_2: +; X86-NOBMI-NEXT: .LBB58_2: ; X86-NOBMI-NEXT: movb $64, %cl ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax ; X86-NOBMI-NEXT: shll %cl, %edi ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %edi, %ebx -; X86-NOBMI-NEXT: jne .LBB57_4 +; X86-NOBMI-NEXT: jne .LBB58_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %eax, %ebx -; X86-NOBMI-NEXT: .LBB57_4: +; X86-NOBMI-NEXT: .LBB58_4: ; X86-NOBMI-NEXT: movl %ebx, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB57_6 +; X86-NOBMI-NEXT: jne .LBB58_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %edi, %esi ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB57_6: +; X86-NOBMI-NEXT: .LBB58_6: ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB57_8 +; X86-NOBMI-NEXT: jne .LBB58_8 ; X86-NOBMI-NEXT: # %bb.7: ; X86-NOBMI-NEXT: movl %esi, %eax -; X86-NOBMI-NEXT: .LBB57_8: +; X86-NOBMI-NEXT: .LBB58_8: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -7289,36 +7417,36 @@ define i64 @bextr64_d2_load(i64* %w, i64 %numskipbits, i64 %numlowbits) nounwind ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB57_2 +; X86-BMI1NOTBM-NEXT: je .LBB58_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax -; X86-BMI1NOTBM-NEXT: .LBB57_2: +; X86-BMI1NOTBM-NEXT: .LBB58_2: ; X86-BMI1NOTBM-NEXT: movb $64, %cl ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax ; X86-BMI1NOTBM-NEXT: shll %cl, %edi ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx -; X86-BMI1NOTBM-NEXT: jne .LBB57_4 +; X86-BMI1NOTBM-NEXT: jne .LBB58_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx -; X86-BMI1NOTBM-NEXT: .LBB57_4: +; X86-BMI1NOTBM-NEXT: .LBB58_4: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB57_6 +; X86-BMI1NOTBM-NEXT: jne .LBB58_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %edi, %esi ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB57_6: +; X86-BMI1NOTBM-NEXT: .LBB58_6: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB57_8 +; X86-BMI1NOTBM-NEXT: jne .LBB58_8 ; X86-BMI1NOTBM-NEXT: # %bb.7: ; X86-BMI1NOTBM-NEXT: movl %esi, %eax -; X86-BMI1NOTBM-NEXT: .LBB57_8: +; X86-BMI1NOTBM-NEXT: .LBB58_8: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -7336,32 +7464,32 @@ define i64 @bextr64_d2_load(i64* %w, i64 %numskipbits, i64 %numlowbits) nounwind ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB57_2 +; X86-BMI1BMI2-NEXT: je .LBB58_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %esi, %eax ; X86-BMI1BMI2-NEXT: xorl %esi, %esi -; X86-BMI1BMI2-NEXT: .LBB57_2: +; X86-BMI1BMI2-NEXT: .LBB58_2: ; X86-BMI1BMI2-NEXT: movb $64, %cl ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB57_4 +; X86-BMI1BMI2-NEXT: je .LBB58_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB57_4: +; X86-BMI1BMI2-NEXT: .LBB58_4: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB57_6 +; X86-BMI1BMI2-NEXT: jne .LBB58_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB57_6: +; X86-BMI1BMI2-NEXT: .LBB58_6: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB57_8 +; X86-BMI1BMI2-NEXT: jne .LBB58_8 ; X86-BMI1BMI2-NEXT: # %bb.7: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB57_8: +; X86-BMI1BMI2-NEXT: .LBB58_8: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -7414,36 +7542,36 @@ define i64 @bextr64_d3_load_indexzext(i64* %w, i8 %numskipbits, i8 %numlowbits) ; X86-NOBMI-NEXT: shrdl %cl, %edx, %edi ; X86-NOBMI-NEXT: xorl %esi, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB58_2 +; X86-NOBMI-NEXT: je .LBB59_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi ; X86-NOBMI-NEXT: xorl %eax, %eax -; X86-NOBMI-NEXT: .LBB58_2: +; X86-NOBMI-NEXT: .LBB59_2: ; X86-NOBMI-NEXT: movb $64, %cl ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shldl %cl, %edi, %eax ; X86-NOBMI-NEXT: shll %cl, %edi ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %edi, %ebx -; X86-NOBMI-NEXT: jne .LBB58_4 +; X86-NOBMI-NEXT: jne .LBB59_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %eax, %ebx -; X86-NOBMI-NEXT: .LBB58_4: +; X86-NOBMI-NEXT: .LBB59_4: ; X86-NOBMI-NEXT: movl %ebx, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB58_6 +; X86-NOBMI-NEXT: jne .LBB59_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %edi, %esi ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB58_6: +; X86-NOBMI-NEXT: .LBB59_6: ; X86-NOBMI-NEXT: shrdl %cl, %ebx, %esi ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB58_8 +; X86-NOBMI-NEXT: jne .LBB59_8 ; X86-NOBMI-NEXT: # %bb.7: ; X86-NOBMI-NEXT: movl %esi, %eax -; X86-NOBMI-NEXT: .LBB58_8: +; X86-NOBMI-NEXT: .LBB59_8: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -7463,36 +7591,36 @@ define i64 @bextr64_d3_load_indexzext(i64* %w, i8 %numskipbits, i8 %numlowbits) ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %edi ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB58_2 +; X86-BMI1NOTBM-NEXT: je .LBB59_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax -; X86-BMI1NOTBM-NEXT: .LBB58_2: +; X86-BMI1NOTBM-NEXT: .LBB59_2: ; X86-BMI1NOTBM-NEXT: movb $64, %cl ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1NOTBM-NEXT: shldl %cl, %edi, %eax ; X86-BMI1NOTBM-NEXT: shll %cl, %edi ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %edi, %ebx -; X86-BMI1NOTBM-NEXT: jne .LBB58_4 +; X86-BMI1NOTBM-NEXT: jne .LBB59_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %eax, %ebx -; X86-BMI1NOTBM-NEXT: .LBB58_4: +; X86-BMI1NOTBM-NEXT: .LBB59_4: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB58_6 +; X86-BMI1NOTBM-NEXT: jne .LBB59_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %edi, %esi ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB58_6: +; X86-BMI1NOTBM-NEXT: .LBB59_6: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebx, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB58_8 +; X86-BMI1NOTBM-NEXT: jne .LBB59_8 ; X86-BMI1NOTBM-NEXT: # %bb.7: ; X86-BMI1NOTBM-NEXT: movl %esi, %eax -; X86-BMI1NOTBM-NEXT: .LBB58_8: +; X86-BMI1NOTBM-NEXT: .LBB59_8: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -7510,32 +7638,32 @@ define i64 @bextr64_d3_load_indexzext(i64* %w, i8 %numskipbits, i8 %numlowbits) ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB58_2 +; X86-BMI1BMI2-NEXT: je .LBB59_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %esi, %eax ; X86-BMI1BMI2-NEXT: xorl %esi, %esi -; X86-BMI1BMI2-NEXT: .LBB58_2: +; X86-BMI1BMI2-NEXT: .LBB59_2: ; X86-BMI1BMI2-NEXT: movb $64, %cl ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %esi ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB58_4 +; X86-BMI1BMI2-NEXT: je .LBB59_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB58_4: +; X86-BMI1BMI2-NEXT: .LBB59_4: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB58_6 +; X86-BMI1BMI2-NEXT: jne .LBB59_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB58_6: +; X86-BMI1BMI2-NEXT: .LBB59_6: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB58_8 +; X86-BMI1BMI2-NEXT: jne .LBB59_8 ; X86-BMI1BMI2-NEXT: # %bb.7: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB58_8: +; X86-BMI1BMI2-NEXT: .LBB59_8: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -7594,37 +7722,37 @@ define i64 @bextr64_d5_skipextrauses(i64 %val, i64 %numskipbits, i64 %numlowbits ; X86-NOBMI-NEXT: shrdl %cl, %edx, %ebx ; X86-NOBMI-NEXT: xorl %edx, %edx ; X86-NOBMI-NEXT: testb $32, %al -; X86-NOBMI-NEXT: je .LBB59_2 +; X86-NOBMI-NEXT: je .LBB60_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %esi, %ebx ; X86-NOBMI-NEXT: xorl %esi, %esi -; X86-NOBMI-NEXT: .LBB59_2: +; X86-NOBMI-NEXT: .LBB60_2: ; X86-NOBMI-NEXT: movb $64, %cl ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shldl %cl, %ebx, %esi ; X86-NOBMI-NEXT: shll %cl, %ebx ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %ebx, %ebp -; X86-NOBMI-NEXT: jne .LBB59_4 +; X86-NOBMI-NEXT: jne .LBB60_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %esi, %ebp -; X86-NOBMI-NEXT: .LBB59_4: +; X86-NOBMI-NEXT: .LBB60_4: ; X86-NOBMI-NEXT: movl %ebp, %esi ; X86-NOBMI-NEXT: shrl %cl, %esi ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edi -; X86-NOBMI-NEXT: jne .LBB59_6 +; X86-NOBMI-NEXT: jne .LBB60_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %ebx, %edx ; X86-NOBMI-NEXT: movl %esi, %edi -; X86-NOBMI-NEXT: .LBB59_6: +; X86-NOBMI-NEXT: .LBB60_6: ; X86-NOBMI-NEXT: shrdl %cl, %ebp, %edx ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X86-NOBMI-NEXT: jne .LBB59_8 +; X86-NOBMI-NEXT: jne .LBB60_8 ; X86-NOBMI-NEXT: # %bb.7: ; X86-NOBMI-NEXT: movl %edx, %esi -; X86-NOBMI-NEXT: .LBB59_8: +; X86-NOBMI-NEXT: .LBB60_8: ; X86-NOBMI-NEXT: subl $8, %esp ; X86-NOBMI-NEXT: pushl %ecx ; X86-NOBMI-NEXT: pushl %eax @@ -7655,37 +7783,37 @@ define i64 @bextr64_d5_skipextrauses(i64 %val, i64 %numskipbits, i64 %numlowbits ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edx, %ebx ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx ; X86-BMI1NOTBM-NEXT: testb $32, %al -; X86-BMI1NOTBM-NEXT: je .LBB59_2 +; X86-BMI1NOTBM-NEXT: je .LBB60_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %esi, %ebx ; X86-BMI1NOTBM-NEXT: xorl %esi, %esi -; X86-BMI1NOTBM-NEXT: .LBB59_2: +; X86-BMI1NOTBM-NEXT: .LBB60_2: ; X86-BMI1NOTBM-NEXT: movb $64, %cl ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1NOTBM-NEXT: shldl %cl, %ebx, %esi ; X86-BMI1NOTBM-NEXT: shll %cl, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %ebx, %ebp -; X86-BMI1NOTBM-NEXT: jne .LBB59_4 +; X86-BMI1NOTBM-NEXT: jne .LBB60_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %esi, %ebp -; X86-BMI1NOTBM-NEXT: .LBB59_4: +; X86-BMI1NOTBM-NEXT: .LBB60_4: ; X86-BMI1NOTBM-NEXT: movl %ebp, %esi ; X86-BMI1NOTBM-NEXT: shrl %cl, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edi -; X86-BMI1NOTBM-NEXT: jne .LBB59_6 +; X86-BMI1NOTBM-NEXT: jne .LBB60_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %ebx, %edx ; X86-BMI1NOTBM-NEXT: movl %esi, %edi -; X86-BMI1NOTBM-NEXT: .LBB59_6: +; X86-BMI1NOTBM-NEXT: .LBB60_6: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %ebp, %edx ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X86-BMI1NOTBM-NEXT: jne .LBB59_8 +; X86-BMI1NOTBM-NEXT: jne .LBB60_8 ; X86-BMI1NOTBM-NEXT: # %bb.7: ; X86-BMI1NOTBM-NEXT: movl %edx, %esi -; X86-BMI1NOTBM-NEXT: .LBB59_8: +; X86-BMI1NOTBM-NEXT: .LBB60_8: ; X86-BMI1NOTBM-NEXT: subl $8, %esp ; X86-BMI1NOTBM-NEXT: pushl %ecx ; X86-BMI1NOTBM-NEXT: pushl %eax @@ -7713,33 +7841,33 @@ define i64 @bextr64_d5_skipextrauses(i64 %val, i64 %numskipbits, i64 %numlowbits ; X86-BMI1BMI2-NEXT: shrxl %eax, %edx, %edx ; X86-BMI1BMI2-NEXT: xorl %esi, %esi ; X86-BMI1BMI2-NEXT: testb $32, %al -; X86-BMI1BMI2-NEXT: je .LBB59_2 +; X86-BMI1BMI2-NEXT: je .LBB60_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %edx, %edi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx -; X86-BMI1BMI2-NEXT: .LBB59_2: +; X86-BMI1BMI2-NEXT: .LBB60_2: ; X86-BMI1BMI2-NEXT: movb $64, %cl ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1BMI2-NEXT: shldl %cl, %edi, %edx ; X86-BMI1BMI2-NEXT: shlxl %ecx, %edi, %ebx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB59_4 +; X86-BMI1BMI2-NEXT: je .LBB60_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %ebx, %edx ; X86-BMI1BMI2-NEXT: movl $0, %ebx -; X86-BMI1BMI2-NEXT: .LBB59_4: +; X86-BMI1BMI2-NEXT: .LBB60_4: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edi -; X86-BMI1BMI2-NEXT: jne .LBB59_6 +; X86-BMI1BMI2-NEXT: jne .LBB60_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %edi, %esi -; X86-BMI1BMI2-NEXT: .LBB59_6: +; X86-BMI1BMI2-NEXT: .LBB60_6: ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %ebx ; X86-BMI1BMI2-NEXT: testb $32, %cl ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx -; X86-BMI1BMI2-NEXT: jne .LBB59_8 +; X86-BMI1BMI2-NEXT: jne .LBB60_8 ; X86-BMI1BMI2-NEXT: # %bb.7: ; X86-BMI1BMI2-NEXT: movl %ebx, %edi -; X86-BMI1BMI2-NEXT: .LBB59_8: +; X86-BMI1BMI2-NEXT: .LBB60_8: ; X86-BMI1BMI2-NEXT: subl $8, %esp ; X86-BMI1BMI2-NEXT: pushl %ecx ; X86-BMI1BMI2-NEXT: pushl %eax @@ -7813,28 +7941,28 @@ define i32 @bextr64_32_d0(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB60_2 +; X86-NOBMI-NEXT: je .LBB61_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edx ; X86-NOBMI-NEXT: xorl %eax, %eax -; X86-NOBMI-NEXT: .LBB60_2: +; X86-NOBMI-NEXT: .LBB61_2: ; X86-NOBMI-NEXT: movb $64, %cl ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shldl %cl, %edx, %eax ; X86-NOBMI-NEXT: shll %cl, %edx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB60_4 +; X86-NOBMI-NEXT: je .LBB61_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %edx, %eax ; X86-NOBMI-NEXT: xorl %edx, %edx -; X86-NOBMI-NEXT: .LBB60_4: +; X86-NOBMI-NEXT: .LBB61_4: ; X86-NOBMI-NEXT: shrdl %cl, %eax, %edx ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB60_6 +; X86-NOBMI-NEXT: jne .LBB61_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %edx, %eax -; X86-NOBMI-NEXT: .LBB60_6: +; X86-NOBMI-NEXT: .LBB61_6: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: retl ; @@ -7848,28 +7976,28 @@ define i32 @bextr64_32_d0(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: shrdl %cl, %esi, %edx ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB60_2 +; X86-BMI1NOTBM-NEXT: je .LBB61_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edx ; X86-BMI1NOTBM-NEXT: xorl %eax, %eax -; X86-BMI1NOTBM-NEXT: .LBB60_2: +; X86-BMI1NOTBM-NEXT: .LBB61_2: ; X86-BMI1NOTBM-NEXT: movb $64, %cl ; X86-BMI1NOTBM-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1NOTBM-NEXT: shldl %cl, %edx, %eax ; X86-BMI1NOTBM-NEXT: shll %cl, %edx ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB60_4 +; X86-BMI1NOTBM-NEXT: je .LBB61_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %edx, %eax ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx -; X86-BMI1NOTBM-NEXT: .LBB60_4: +; X86-BMI1NOTBM-NEXT: .LBB61_4: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %edx ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB60_6 +; X86-BMI1NOTBM-NEXT: jne .LBB61_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %edx, %eax -; X86-BMI1NOTBM-NEXT: .LBB60_6: +; X86-BMI1NOTBM-NEXT: .LBB61_6: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: retl ; @@ -7881,27 +8009,27 @@ define i32 @bextr64_32_d0(i64 %val, i64 %numskipbits, i64 %numlowbits) nounwind ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB60_2 +; X86-BMI1BMI2-NEXT: je .LBB61_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %edx, %eax ; X86-BMI1BMI2-NEXT: xorl %edx, %edx -; X86-BMI1BMI2-NEXT: .LBB60_2: +; X86-BMI1BMI2-NEXT: .LBB61_2: ; X86-BMI1BMI2-NEXT: movb $64, %cl ; X86-BMI1BMI2-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %eax ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB60_4 +; X86-BMI1BMI2-NEXT: je .LBB61_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %eax, %edx ; X86-BMI1BMI2-NEXT: xorl %eax, %eax -; X86-BMI1BMI2-NEXT: .LBB60_4: +; X86-BMI1BMI2-NEXT: .LBB61_4: ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB60_6 +; X86-BMI1BMI2-NEXT: je .LBB61_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %eax -; X86-BMI1BMI2-NEXT: .LBB60_6: +; X86-BMI1BMI2-NEXT: .LBB61_6: ; X86-BMI1BMI2-NEXT: retl ; ; X64-NOBMI-LABEL: bextr64_32_d0: @@ -7952,10 +8080,10 @@ define i32 @bextr64_32_d1(i64 %val, i64 %numskipbits, i32 %numlowbits) nounwind ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: shrdl %cl, %esi, %edx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB61_2 +; X86-NOBMI-NEXT: jne .LBB62_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %edx, %eax -; X86-NOBMI-NEXT: .LBB61_2: +; X86-NOBMI-NEXT: .LBB62_2: ; X86-NOBMI-NEXT: xorl %ecx, %ecx ; X86-NOBMI-NEXT: subb {{[0-9]+}}(%esp), %cl ; X86-NOBMI-NEXT: shll %cl, %eax @@ -7976,10 +8104,10 @@ define i32 @bextr64_32_d1(i64 %val, i64 %numskipbits, i32 %numlowbits) nounwind ; X86-BMI1NOTBM-NEXT: shrl %cl, %edx ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %esi ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB61_2 +; X86-BMI1NOTBM-NEXT: jne .LBB62_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %esi, %edx -; X86-BMI1NOTBM-NEXT: .LBB61_2: +; X86-BMI1NOTBM-NEXT: .LBB62_2: ; X86-BMI1NOTBM-NEXT: shll $8, %eax ; X86-BMI1NOTBM-NEXT: bextrl %eax, %edx, %eax ; X86-BMI1NOTBM-NEXT: popl %esi @@ -7995,10 +8123,10 @@ define i32 @bextr64_32_d1(i64 %val, i64 %numskipbits, i32 %numlowbits) nounwind ; X86-BMI1BMI2-NEXT: movl {{[0-9]+}}(%esp), %esi ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB61_2 +; X86-BMI1BMI2-NEXT: je .LBB62_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %edx -; X86-BMI1BMI2-NEXT: .LBB61_2: +; X86-BMI1BMI2-NEXT: .LBB62_2: ; X86-BMI1BMI2-NEXT: bzhil %eax, %edx, %eax ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: retl diff --git a/test/CodeGen/X86/extract-lowbits.ll b/test/CodeGen/X86/extract-lowbits.ll index 6564486bd52..7e65c1d5cc9 100644 --- a/test/CodeGen/X86/extract-lowbits.ll +++ b/test/CodeGen/X86/extract-lowbits.ll @@ -3630,6 +3630,61 @@ define i32 @bzhi64_32_c2(i64 %val, i32 %numlowbits) nounwind { ret i32 %truncmasked } +; Shifting happens in 64-bit. Mask is 32-bit, but calculated in 64-bit. +; Masking is 64-bit. Then truncation. +define i32 @bzhi64_32_c3(i64 %val, i64 %numlowbits) nounwind { +; X86-LABEL: bzhi64_32_c3: +; X86: # %bb.0: +; X86-NEXT: movb $64, %cl +; X86-NEXT: subb {{[0-9]+}}(%esp), %cl +; X86-NEXT: xorl %eax, %eax +; X86-NEXT: movl $-1, %edx +; X86-NEXT: shrdl %cl, %eax, %edx +; X86-NEXT: testb $32, %cl +; X86-NEXT: jne .LBB42_2 +; X86-NEXT: # %bb.1: +; X86-NEXT: movl %edx, %eax +; X86-NEXT: .LBB42_2: +; X86-NEXT: andl {{[0-9]+}}(%esp), %eax +; X86-NEXT: retl +; +; X64-NOBMI-LABEL: bzhi64_32_c3: +; X64-NOBMI: # %bb.0: +; X64-NOBMI-NEXT: movq %rsi, %rcx +; X64-NOBMI-NEXT: negb %cl +; X64-NOBMI-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF +; X64-NOBMI-NEXT: # kill: def $cl killed $cl killed $rcx +; X64-NOBMI-NEXT: shrq %cl, %rax +; X64-NOBMI-NEXT: andl %edi, %eax +; X64-NOBMI-NEXT: # kill: def $eax killed $eax killed $rax +; X64-NOBMI-NEXT: retq +; +; X64-BMI1NOTBM-LABEL: bzhi64_32_c3: +; X64-BMI1NOTBM: # %bb.0: +; X64-BMI1NOTBM-NEXT: movq %rsi, %rcx +; X64-BMI1NOTBM-NEXT: negb %cl +; X64-BMI1NOTBM-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF +; X64-BMI1NOTBM-NEXT: # kill: def $cl killed $cl killed $rcx +; X64-BMI1NOTBM-NEXT: shrq %cl, %rax +; X64-BMI1NOTBM-NEXT: andl %edi, %eax +; X64-BMI1NOTBM-NEXT: # kill: def $eax killed $eax killed $rax +; X64-BMI1NOTBM-NEXT: retq +; +; X64-BMI1BMI2-LABEL: bzhi64_32_c3: +; X64-BMI1BMI2: # %bb.0: +; X64-BMI1BMI2-NEXT: negb %sil +; X64-BMI1BMI2-NEXT: movl $4294967295, %eax # imm = 0xFFFFFFFF +; X64-BMI1BMI2-NEXT: shrxq %rsi, %rax, %rax +; X64-BMI1BMI2-NEXT: andl %edi, %eax +; X64-BMI1BMI2-NEXT: # kill: def $eax killed $eax killed $rax +; X64-BMI1BMI2-NEXT: retq + %numhighbits = sub i64 64, %numlowbits + %mask = lshr i64 4294967295, %numhighbits + %masked = and i64 %mask, %val + %truncmasked = trunc i64 %masked to i32 + ret i32 %truncmasked +} + ; ---------------------------------------------------------------------------- ; ; Pattern d. 32-bit. ; ---------------------------------------------------------------------------- ; @@ -3861,26 +3916,26 @@ define i64 @bzhi64_d0(i64 %val, i64 %numlowbits) nounwind { ; X86-NOBMI-NEXT: shldl %cl, %edx, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %esi, %edi -; X86-NOBMI-NEXT: jne .LBB46_2 +; X86-NOBMI-NEXT: jne .LBB47_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi -; X86-NOBMI-NEXT: .LBB46_2: +; X86-NOBMI-NEXT: .LBB47_2: ; X86-NOBMI-NEXT: movl %edi, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: xorl %ebx, %ebx ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB46_4 +; X86-NOBMI-NEXT: jne .LBB47_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %esi, %ebx ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB46_4: +; X86-NOBMI-NEXT: .LBB47_4: ; X86-NOBMI-NEXT: shrdl %cl, %edi, %ebx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB46_6 +; X86-NOBMI-NEXT: jne .LBB47_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %ebx, %eax -; X86-NOBMI-NEXT: .LBB46_6: +; X86-NOBMI-NEXT: .LBB47_6: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -3900,26 +3955,26 @@ define i64 @bzhi64_d0(i64 %val, i64 %numlowbits) nounwind { ; X86-BMI1NOTBM-NEXT: shldl %cl, %edx, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %esi, %edi -; X86-BMI1NOTBM-NEXT: jne .LBB46_2 +; X86-BMI1NOTBM-NEXT: jne .LBB47_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi -; X86-BMI1NOTBM-NEXT: .LBB46_2: +; X86-BMI1NOTBM-NEXT: .LBB47_2: ; X86-BMI1NOTBM-NEXT: movl %edi, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB46_4 +; X86-BMI1NOTBM-NEXT: jne .LBB47_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %esi, %ebx ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB46_4: +; X86-BMI1NOTBM-NEXT: .LBB47_4: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB46_6 +; X86-BMI1NOTBM-NEXT: jne .LBB47_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax -; X86-BMI1NOTBM-NEXT: .LBB46_6: +; X86-BMI1NOTBM-NEXT: .LBB47_6: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -3937,22 +3992,22 @@ define i64 @bzhi64_d0(i64 %val, i64 %numlowbits) nounwind { ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB46_2 +; X86-BMI1BMI2-NEXT: je .LBB47_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB46_2: +; X86-BMI1BMI2-NEXT: .LBB47_2: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB46_4 +; X86-BMI1BMI2-NEXT: jne .LBB47_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB46_4: +; X86-BMI1BMI2-NEXT: .LBB47_4: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB46_6 +; X86-BMI1BMI2-NEXT: jne .LBB47_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB46_6: +; X86-BMI1BMI2-NEXT: .LBB47_6: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -3998,26 +4053,26 @@ define i64 @bzhi64_d1_indexzext(i64 %val, i8 %numlowbits) nounwind { ; X86-NOBMI-NEXT: shldl %cl, %edx, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %esi, %edi -; X86-NOBMI-NEXT: jne .LBB47_2 +; X86-NOBMI-NEXT: jne .LBB48_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi -; X86-NOBMI-NEXT: .LBB47_2: +; X86-NOBMI-NEXT: .LBB48_2: ; X86-NOBMI-NEXT: movl %edi, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: xorl %ebx, %ebx ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB47_4 +; X86-NOBMI-NEXT: jne .LBB48_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %esi, %ebx ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB47_4: +; X86-NOBMI-NEXT: .LBB48_4: ; X86-NOBMI-NEXT: shrdl %cl, %edi, %ebx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB47_6 +; X86-NOBMI-NEXT: jne .LBB48_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %ebx, %eax -; X86-NOBMI-NEXT: .LBB47_6: +; X86-NOBMI-NEXT: .LBB48_6: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -4037,26 +4092,26 @@ define i64 @bzhi64_d1_indexzext(i64 %val, i8 %numlowbits) nounwind { ; X86-BMI1NOTBM-NEXT: shldl %cl, %edx, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %esi, %edi -; X86-BMI1NOTBM-NEXT: jne .LBB47_2 +; X86-BMI1NOTBM-NEXT: jne .LBB48_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi -; X86-BMI1NOTBM-NEXT: .LBB47_2: +; X86-BMI1NOTBM-NEXT: .LBB48_2: ; X86-BMI1NOTBM-NEXT: movl %edi, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB47_4 +; X86-BMI1NOTBM-NEXT: jne .LBB48_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %esi, %ebx ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB47_4: +; X86-BMI1NOTBM-NEXT: .LBB48_4: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB47_6 +; X86-BMI1NOTBM-NEXT: jne .LBB48_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax -; X86-BMI1NOTBM-NEXT: .LBB47_6: +; X86-BMI1NOTBM-NEXT: .LBB48_6: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -4074,22 +4129,22 @@ define i64 @bzhi64_d1_indexzext(i64 %val, i8 %numlowbits) nounwind { ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %edi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB47_2 +; X86-BMI1BMI2-NEXT: je .LBB48_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB47_2: +; X86-BMI1BMI2-NEXT: .LBB48_2: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB47_4 +; X86-BMI1BMI2-NEXT: jne .LBB48_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB47_4: +; X86-BMI1BMI2-NEXT: .LBB48_4: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB47_6 +; X86-BMI1BMI2-NEXT: jne .LBB48_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB47_6: +; X86-BMI1BMI2-NEXT: .LBB48_6: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -4139,26 +4194,26 @@ define i64 @bzhi64_d2_load(i64* %w, i64 %numlowbits) nounwind { ; X86-NOBMI-NEXT: shldl %cl, %edx, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %esi, %edi -; X86-NOBMI-NEXT: jne .LBB48_2 +; X86-NOBMI-NEXT: jne .LBB49_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi -; X86-NOBMI-NEXT: .LBB48_2: +; X86-NOBMI-NEXT: .LBB49_2: ; X86-NOBMI-NEXT: movl %edi, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: xorl %ebx, %ebx ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB48_4 +; X86-NOBMI-NEXT: jne .LBB49_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %esi, %ebx ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB48_4: +; X86-NOBMI-NEXT: .LBB49_4: ; X86-NOBMI-NEXT: shrdl %cl, %edi, %ebx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB48_6 +; X86-NOBMI-NEXT: jne .LBB49_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %ebx, %eax -; X86-NOBMI-NEXT: .LBB48_6: +; X86-NOBMI-NEXT: .LBB49_6: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -4179,26 +4234,26 @@ define i64 @bzhi64_d2_load(i64* %w, i64 %numlowbits) nounwind { ; X86-BMI1NOTBM-NEXT: shldl %cl, %edx, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %esi, %edi -; X86-BMI1NOTBM-NEXT: jne .LBB48_2 +; X86-BMI1NOTBM-NEXT: jne .LBB49_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi -; X86-BMI1NOTBM-NEXT: .LBB48_2: +; X86-BMI1NOTBM-NEXT: .LBB49_2: ; X86-BMI1NOTBM-NEXT: movl %edi, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB48_4 +; X86-BMI1NOTBM-NEXT: jne .LBB49_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %esi, %ebx ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB48_4: +; X86-BMI1NOTBM-NEXT: .LBB49_4: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB48_6 +; X86-BMI1NOTBM-NEXT: jne .LBB49_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax -; X86-BMI1NOTBM-NEXT: .LBB48_6: +; X86-BMI1NOTBM-NEXT: .LBB49_6: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -4217,22 +4272,22 @@ define i64 @bzhi64_d2_load(i64* %w, i64 %numlowbits) nounwind { ; X86-BMI1BMI2-NEXT: shlxl %ecx, %edx, %edi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB48_2 +; X86-BMI1BMI2-NEXT: je .LBB49_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB48_2: +; X86-BMI1BMI2-NEXT: .LBB49_2: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB48_4 +; X86-BMI1BMI2-NEXT: jne .LBB49_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB48_4: +; X86-BMI1BMI2-NEXT: .LBB49_4: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB48_6 +; X86-BMI1BMI2-NEXT: jne .LBB49_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB48_6: +; X86-BMI1BMI2-NEXT: .LBB49_6: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -4280,26 +4335,26 @@ define i64 @bzhi64_d3_load_indexzext(i64* %w, i8 %numlowbits) nounwind { ; X86-NOBMI-NEXT: shldl %cl, %edx, %eax ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl %esi, %edi -; X86-NOBMI-NEXT: jne .LBB49_2 +; X86-NOBMI-NEXT: jne .LBB50_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %eax, %edi -; X86-NOBMI-NEXT: .LBB49_2: +; X86-NOBMI-NEXT: .LBB50_2: ; X86-NOBMI-NEXT: movl %edi, %eax ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: xorl %ebx, %ebx ; X86-NOBMI-NEXT: testb $32, %cl ; X86-NOBMI-NEXT: movl $0, %edx -; X86-NOBMI-NEXT: jne .LBB49_4 +; X86-NOBMI-NEXT: jne .LBB50_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %esi, %ebx ; X86-NOBMI-NEXT: movl %eax, %edx -; X86-NOBMI-NEXT: .LBB49_4: +; X86-NOBMI-NEXT: .LBB50_4: ; X86-NOBMI-NEXT: shrdl %cl, %edi, %ebx ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB49_6 +; X86-NOBMI-NEXT: jne .LBB50_6 ; X86-NOBMI-NEXT: # %bb.5: ; X86-NOBMI-NEXT: movl %ebx, %eax -; X86-NOBMI-NEXT: .LBB49_6: +; X86-NOBMI-NEXT: .LBB50_6: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: popl %edi ; X86-NOBMI-NEXT: popl %ebx @@ -4320,26 +4375,26 @@ define i64 @bzhi64_d3_load_indexzext(i64* %w, i8 %numlowbits) nounwind { ; X86-BMI1NOTBM-NEXT: shldl %cl, %edx, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl %esi, %edi -; X86-BMI1NOTBM-NEXT: jne .LBB49_2 +; X86-BMI1NOTBM-NEXT: jne .LBB50_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %eax, %edi -; X86-BMI1NOTBM-NEXT: .LBB49_2: +; X86-BMI1NOTBM-NEXT: .LBB50_2: ; X86-BMI1NOTBM-NEXT: movl %edi, %eax ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: xorl %ebx, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl ; X86-BMI1NOTBM-NEXT: movl $0, %edx -; X86-BMI1NOTBM-NEXT: jne .LBB49_4 +; X86-BMI1NOTBM-NEXT: jne .LBB50_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %esi, %ebx ; X86-BMI1NOTBM-NEXT: movl %eax, %edx -; X86-BMI1NOTBM-NEXT: .LBB49_4: +; X86-BMI1NOTBM-NEXT: .LBB50_4: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %edi, %ebx ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB49_6 +; X86-BMI1NOTBM-NEXT: jne .LBB50_6 ; X86-BMI1NOTBM-NEXT: # %bb.5: ; X86-BMI1NOTBM-NEXT: movl %ebx, %eax -; X86-BMI1NOTBM-NEXT: .LBB49_6: +; X86-BMI1NOTBM-NEXT: .LBB50_6: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: popl %edi ; X86-BMI1NOTBM-NEXT: popl %ebx @@ -4358,22 +4413,22 @@ define i64 @bzhi64_d3_load_indexzext(i64* %w, i8 %numlowbits) nounwind { ; X86-BMI1BMI2-NEXT: shlxl %ecx, %edx, %edi ; X86-BMI1BMI2-NEXT: xorl %edx, %edx ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB49_2 +; X86-BMI1BMI2-NEXT: je .LBB50_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %edi, %esi ; X86-BMI1BMI2-NEXT: movl $0, %edi -; X86-BMI1BMI2-NEXT: .LBB49_2: +; X86-BMI1BMI2-NEXT: .LBB50_2: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %esi, %eax -; X86-BMI1BMI2-NEXT: jne .LBB49_4 +; X86-BMI1BMI2-NEXT: jne .LBB50_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: movl %eax, %edx -; X86-BMI1BMI2-NEXT: .LBB49_4: +; X86-BMI1BMI2-NEXT: .LBB50_4: ; X86-BMI1BMI2-NEXT: shrdl %cl, %esi, %edi ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: jne .LBB49_6 +; X86-BMI1BMI2-NEXT: jne .LBB50_6 ; X86-BMI1BMI2-NEXT: # %bb.5: ; X86-BMI1BMI2-NEXT: movl %edi, %eax -; X86-BMI1BMI2-NEXT: .LBB49_6: +; X86-BMI1BMI2-NEXT: .LBB50_6: ; X86-BMI1BMI2-NEXT: popl %esi ; X86-BMI1BMI2-NEXT: popl %edi ; X86-BMI1BMI2-NEXT: retl @@ -4423,18 +4478,18 @@ define i32 @bzhi64_32_d0(i64 %val, i64 %numlowbits) nounwind { ; X86-NOBMI-NEXT: shll %cl, %edx ; X86-NOBMI-NEXT: shldl %cl, %esi, %eax ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: je .LBB50_2 +; X86-NOBMI-NEXT: je .LBB51_2 ; X86-NOBMI-NEXT: # %bb.1: ; X86-NOBMI-NEXT: movl %edx, %eax ; X86-NOBMI-NEXT: xorl %edx, %edx -; X86-NOBMI-NEXT: .LBB50_2: +; X86-NOBMI-NEXT: .LBB51_2: ; X86-NOBMI-NEXT: shrdl %cl, %eax, %edx ; X86-NOBMI-NEXT: shrl %cl, %eax ; X86-NOBMI-NEXT: testb $32, %cl -; X86-NOBMI-NEXT: jne .LBB50_4 +; X86-NOBMI-NEXT: jne .LBB51_4 ; X86-NOBMI-NEXT: # %bb.3: ; X86-NOBMI-NEXT: movl %edx, %eax -; X86-NOBMI-NEXT: .LBB50_4: +; X86-NOBMI-NEXT: .LBB51_4: ; X86-NOBMI-NEXT: popl %esi ; X86-NOBMI-NEXT: retl ; @@ -4449,18 +4504,18 @@ define i32 @bzhi64_32_d0(i64 %val, i64 %numlowbits) nounwind { ; X86-BMI1NOTBM-NEXT: shll %cl, %edx ; X86-BMI1NOTBM-NEXT: shldl %cl, %esi, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: je .LBB50_2 +; X86-BMI1NOTBM-NEXT: je .LBB51_2 ; X86-BMI1NOTBM-NEXT: # %bb.1: ; X86-BMI1NOTBM-NEXT: movl %edx, %eax ; X86-BMI1NOTBM-NEXT: xorl %edx, %edx -; X86-BMI1NOTBM-NEXT: .LBB50_2: +; X86-BMI1NOTBM-NEXT: .LBB51_2: ; X86-BMI1NOTBM-NEXT: shrdl %cl, %eax, %edx ; X86-BMI1NOTBM-NEXT: shrl %cl, %eax ; X86-BMI1NOTBM-NEXT: testb $32, %cl -; X86-BMI1NOTBM-NEXT: jne .LBB50_4 +; X86-BMI1NOTBM-NEXT: jne .LBB51_4 ; X86-BMI1NOTBM-NEXT: # %bb.3: ; X86-BMI1NOTBM-NEXT: movl %edx, %eax -; X86-BMI1NOTBM-NEXT: .LBB50_4: +; X86-BMI1NOTBM-NEXT: .LBB51_4: ; X86-BMI1NOTBM-NEXT: popl %esi ; X86-BMI1NOTBM-NEXT: retl ; @@ -4473,17 +4528,17 @@ define i32 @bzhi64_32_d0(i64 %val, i64 %numlowbits) nounwind { ; X86-BMI1BMI2-NEXT: shldl %cl, %eax, %edx ; X86-BMI1BMI2-NEXT: shlxl %ecx, %eax, %eax ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB50_2 +; X86-BMI1BMI2-NEXT: je .LBB51_2 ; X86-BMI1BMI2-NEXT: # %bb.1: ; X86-BMI1BMI2-NEXT: movl %eax, %edx ; X86-BMI1BMI2-NEXT: xorl %eax, %eax -; X86-BMI1BMI2-NEXT: .LBB50_2: +; X86-BMI1BMI2-NEXT: .LBB51_2: ; X86-BMI1BMI2-NEXT: shrdl %cl, %edx, %eax ; X86-BMI1BMI2-NEXT: testb $32, %cl -; X86-BMI1BMI2-NEXT: je .LBB50_4 +; X86-BMI1BMI2-NEXT: je .LBB51_4 ; X86-BMI1BMI2-NEXT: # %bb.3: ; X86-BMI1BMI2-NEXT: shrxl %ecx, %edx, %eax -; X86-BMI1BMI2-NEXT: .LBB50_4: +; X86-BMI1BMI2-NEXT: .LBB51_4: ; X86-BMI1BMI2-NEXT: retl ; ; X64-NOBMI-LABEL: bzhi64_32_d0: -- 2.50.1