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.
; ---------------------------------------------------------------------------- ;
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
;
; 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
;
; 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:
; 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
; 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
; 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
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.
; ---------------------------------------------------------------------------- ;
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
; 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
;
; 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
;
; 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: