; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ebx
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: shrxl %eax, {{[0-9]+}}(%esp), %esi
-; X86-BMI2-NEXT: movl %ebx, %eax
-; X86-BMI2-NEXT: negb %al
-; X86-BMI2-NEXT: movl $-1, %ecx
-; X86-BMI2-NEXT: shrxl %eax, %ecx, %eax
+; X86-BMI2-NEXT: movl $-1, %eax
+; X86-BMI2-NEXT: bzhil %ebx, %eax, %eax
; X86-BMI2-NEXT: movl %eax, (%esp)
; X86-BMI2-NEXT: calll use32@PLT
; X86-BMI2-NEXT: bzhil %ebx, %esi, %eax
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: shrxl %esi, %edi, %ebp
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %eax, %ecx, %edi
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %edx, %eax, %edi
; X64-BMI2-NEXT: callq use32@PLT
; X64-BMI2-NEXT: bzhil %ebx, %ebp, %eax
; X64-BMI2-NEXT: addq $8, %rsp
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ebx
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: shrxl %eax, {{[0-9]+}}(%esp), %esi
-; X86-BMI2-NEXT: movl %ebx, %eax
-; X86-BMI2-NEXT: negb %al
-; X86-BMI2-NEXT: movl $-1, %ecx
-; X86-BMI2-NEXT: shrxl %eax, %ecx, %eax
+; X86-BMI2-NEXT: movl $-1, %eax
+; X86-BMI2-NEXT: bzhil %ebx, %eax, %eax
; X86-BMI2-NEXT: movl %eax, (%esp)
; X86-BMI2-NEXT: calll use32@PLT
; X86-BMI2-NEXT: bzhil %ebx, %esi, %eax
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: shrxl %esi, %edi, %ebp
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %eax, %ecx, %edi
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %edx, %eax, %edi
; X64-BMI2-NEXT: callq use32@PLT
; X64-BMI2-NEXT: bzhil %ebx, %ebp, %eax
; X64-BMI2-NEXT: addq $8, %rsp
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; X86-BMI2-NEXT: shrxl %ecx, (%eax), %esi
-; X86-BMI2-NEXT: movl %ebx, %eax
-; X86-BMI2-NEXT: negb %al
-; X86-BMI2-NEXT: movl $-1, %ecx
-; X86-BMI2-NEXT: shrxl %eax, %ecx, %eax
+; X86-BMI2-NEXT: movl $-1, %eax
+; X86-BMI2-NEXT: bzhil %ebx, %eax, %eax
; X86-BMI2-NEXT: movl %eax, (%esp)
; X86-BMI2-NEXT: calll use32@PLT
; X86-BMI2-NEXT: bzhil %ebx, %esi, %eax
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: shrxl %esi, (%rdi), %ebp
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %eax, %ecx, %edi
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %edx, %eax, %edi
; X64-BMI2-NEXT: callq use32@PLT
; X64-BMI2-NEXT: bzhil %ebx, %ebp, %eax
; X64-BMI2-NEXT: addq $8, %rsp
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
; X86-BMI2-NEXT: shrxl %ecx, (%eax), %esi
-; X86-BMI2-NEXT: movl %ebx, %eax
-; X86-BMI2-NEXT: negb %al
-; X86-BMI2-NEXT: movl $-1, %ecx
-; X86-BMI2-NEXT: shrxl %eax, %ecx, %eax
+; X86-BMI2-NEXT: movl $-1, %eax
+; X86-BMI2-NEXT: bzhil %ebx, %eax, %eax
; X86-BMI2-NEXT: movl %eax, (%esp)
; X86-BMI2-NEXT: calll use32@PLT
; X86-BMI2-NEXT: bzhil %ebx, %esi, %eax
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: shrxl %esi, (%rdi), %ebp
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %eax, %ecx, %edi
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %edx, %eax, %edi
; X64-BMI2-NEXT: callq use32@PLT
; X64-BMI2-NEXT: bzhil %ebx, %ebp, %eax
; X64-BMI2-NEXT: addq $8, %rsp
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ebx
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: shrxl %eax, {{[0-9]+}}(%esp), %esi
-; X86-BMI2-NEXT: movl %ebx, %eax
-; X86-BMI2-NEXT: negb %al
-; X86-BMI2-NEXT: movl $-1, %ecx
-; X86-BMI2-NEXT: shrxl %eax, %ecx, %eax
+; X86-BMI2-NEXT: movl $-1, %eax
+; X86-BMI2-NEXT: bzhil %ebx, %eax, %eax
; X86-BMI2-NEXT: movl %eax, (%esp)
; X86-BMI2-NEXT: calll use32@PLT
; X86-BMI2-NEXT: bzhil %ebx, %esi, %eax
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: shrxl %esi, %edi, %ebp
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %eax, %ecx, %edi
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %edx, %eax, %edi
; X64-BMI2-NEXT: callq use32@PLT
; X64-BMI2-NEXT: bzhil %ebx, %ebp, %eax
; X64-BMI2-NEXT: addq $8, %rsp
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ebx
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edi
; X86-BMI2-NEXT: shrxl %edi, {{[0-9]+}}(%esp), %esi
-; X86-BMI2-NEXT: movl %ebx, %eax
-; X86-BMI2-NEXT: negb %al
-; X86-BMI2-NEXT: movl $-1, %ecx
-; X86-BMI2-NEXT: shrxl %eax, %ecx, %eax
+; X86-BMI2-NEXT: movl $-1, %eax
+; X86-BMI2-NEXT: bzhil %ebx, %eax, %eax
; X86-BMI2-NEXT: movl %eax, (%esp)
; X86-BMI2-NEXT: calll use32@PLT
; X86-BMI2-NEXT: bzhil %ebx, %esi, %esi
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: movl %esi, %ebp
; X64-BMI2-NEXT: shrxl %esi, %edi, %r14d
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %eax, %ecx, %edi
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %edx, %eax, %edi
; X64-BMI2-NEXT: callq use32@PLT
; X64-BMI2-NEXT: bzhil %ebx, %r14d, %ebx
; X64-BMI2-NEXT: movl %ebp, %edi
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movq %rdx, %rbx
; X64-BMI2-NEXT: shrxq %rsi, %rdi, %r14
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rax, %rcx, %rdi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rdx, %rax, %rdi
; X64-BMI2-NEXT: callq use64@PLT
; X64-BMI2-NEXT: bzhiq %rbx, %r14, %rax
; X64-BMI2-NEXT: addq $8, %rsp
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: # kill: def $esi killed $esi def $rsi
; X64-BMI2-NEXT: shrxq %rsi, %rdi, %r14
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rax, %rcx, %rdi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rbx, %rax, %rdi
; X64-BMI2-NEXT: callq use64@PLT
; X64-BMI2-NEXT: bzhiq %rbx, %r14, %rax
; X64-BMI2-NEXT: addq $8, %rsp
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movq %rdx, %rbx
; X64-BMI2-NEXT: shrxq %rsi, (%rdi), %r14
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rax, %rcx, %rdi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rdx, %rax, %rdi
; X64-BMI2-NEXT: callq use64@PLT
; X64-BMI2-NEXT: bzhiq %rbx, %r14, %rax
; X64-BMI2-NEXT: addq $8, %rsp
; X64-BMI2-NEXT: movl %edx, %ebx
; X64-BMI2-NEXT: # kill: def $esi killed $esi def $rsi
; X64-BMI2-NEXT: shrxq %rsi, (%rdi), %r14
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rax, %rcx, %rdi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rbx, %rax, %rdi
; X64-BMI2-NEXT: callq use64@PLT
; X64-BMI2-NEXT: bzhiq %rbx, %r14, %rax
; X64-BMI2-NEXT: addq $8, %rsp
; X64-BMI2-NEXT: pushq %rax
; X64-BMI2-NEXT: movq %rdx, %rbx
; X64-BMI2-NEXT: shrxq %rsi, %rdi, %r14
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rax, %rcx, %rdi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rdx, %rax, %rdi
; X64-BMI2-NEXT: callq use64@PLT
; X64-BMI2-NEXT: bzhiq %rbx, %r14, %rax
; X64-BMI2-NEXT: addq $8, %rsp
; X64-BMI2-NEXT: movq %rdx, %rbx
; X64-BMI2-NEXT: movq %rsi, %r14
; X64-BMI2-NEXT: shrxq %rsi, %rdi, %r15
-; X64-BMI2-NEXT: movl %ebx, %eax
-; X64-BMI2-NEXT: negb %al
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rax, %rcx, %rdi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rdx, %rax, %rdi
; X64-BMI2-NEXT: callq use64@PLT
; X64-BMI2-NEXT: bzhiq %rbx, %r15, %rbx
; X64-BMI2-NEXT: movq %r14, %rdi
;
; X86-BMI2-LABEL: bzhi32_c0:
; X86-BMI2: # %bb.0:
-; X86-BMI2-NEXT: pushl %esi
-; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %edx
-; X86-BMI2-NEXT: bzhil %edx, {{[0-9]+}}(%esp), %eax
-; X86-BMI2-NEXT: # kill: def $dl killed $dl killed $edx def $edx
-; X86-BMI2-NEXT: negb %dl
-; X86-BMI2-NEXT: movl $-1, %esi
-; X86-BMI2-NEXT: shrxl %edx, %esi, %edx
-; X86-BMI2-NEXT: movl %edx, (%ecx)
-; X86-BMI2-NEXT: popl %esi
+; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
+; X86-BMI2-NEXT: movl $-1, %edx
+; X86-BMI2-NEXT: bzhil %ecx, %edx, %edx
+; X86-BMI2-NEXT: movl %edx, (%eax)
+; X86-BMI2-NEXT: bzhil %ecx, {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: retl
;
; X64-NOBMI-LABEL: bzhi32_c0:
;
; X64-BMI2-LABEL: bzhi32_c0:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %esi, %eax, %eax
+; X64-BMI2-NEXT: movl %eax, (%rdx)
; X64-BMI2-NEXT: bzhil %esi, %edi, %eax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $esi def $esi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %esi, %ecx, %ecx
-; X64-BMI2-NEXT: movl %ecx, (%rdx)
; X64-BMI2-NEXT: retq
%numhighbits = sub i32 32, %numlowbits
%mask = lshr i32 -1, %numhighbits
;
; X86-BMI2-LABEL: bzhi32_c1_indexzext:
; X86-BMI2: # %bb.0:
-; X86-BMI2-NEXT: pushl %esi
-; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %edx
-; X86-BMI2-NEXT: bzhil %edx, {{[0-9]+}}(%esp), %eax
-; X86-BMI2-NEXT: # kill: def $dl killed $dl killed $edx def $edx
-; X86-BMI2-NEXT: negb %dl
-; X86-BMI2-NEXT: movl $-1, %esi
-; X86-BMI2-NEXT: shrxl %edx, %esi, %edx
-; X86-BMI2-NEXT: movl %edx, (%ecx)
-; X86-BMI2-NEXT: popl %esi
+; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
+; X86-BMI2-NEXT: movl $-1, %edx
+; X86-BMI2-NEXT: bzhil %ecx, %edx, %edx
+; X86-BMI2-NEXT: movl %edx, (%eax)
+; X86-BMI2-NEXT: bzhil %ecx, {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: retl
;
; X64-NOBMI-LABEL: bzhi32_c1_indexzext:
;
; X64-BMI2-LABEL: bzhi32_c1_indexzext:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %esi, %eax, %eax
+; X64-BMI2-NEXT: movl %eax, (%rdx)
; X64-BMI2-NEXT: bzhil %esi, %edi, %eax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $esi def $esi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %esi, %ecx, %ecx
-; X64-BMI2-NEXT: movl %ecx, (%rdx)
; X64-BMI2-NEXT: retq
%numhighbits = sub i8 32, %numlowbits
%sh_prom = zext i8 %numhighbits to i32
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %edx
-; X86-BMI2-NEXT: bzhil %edx, (%eax), %eax
-; X86-BMI2-NEXT: # kill: def $dl killed $dl killed $edx def $edx
-; X86-BMI2-NEXT: negb %dl
; X86-BMI2-NEXT: movl $-1, %esi
-; X86-BMI2-NEXT: shrxl %edx, %esi, %edx
-; X86-BMI2-NEXT: movl %edx, (%ecx)
+; X86-BMI2-NEXT: bzhil %edx, %esi, %esi
+; X86-BMI2-NEXT: bzhil %edx, (%eax), %eax
+; X86-BMI2-NEXT: movl %esi, (%ecx)
; X86-BMI2-NEXT: popl %esi
; X86-BMI2-NEXT: retl
;
;
; X64-BMI2-LABEL: bzhi32_c2_load:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %esi, %eax, %ecx
; X64-BMI2-NEXT: bzhil %esi, (%rdi), %eax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $esi def $esi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %esi, %ecx, %ecx
; X64-BMI2-NEXT: movl %ecx, (%rdx)
; X64-BMI2-NEXT: retq
%val = load i32, ptr %w
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %edx
-; X86-BMI2-NEXT: bzhil %edx, (%eax), %eax
-; X86-BMI2-NEXT: # kill: def $dl killed $dl killed $edx def $edx
-; X86-BMI2-NEXT: negb %dl
; X86-BMI2-NEXT: movl $-1, %esi
-; X86-BMI2-NEXT: shrxl %edx, %esi, %edx
-; X86-BMI2-NEXT: movl %edx, (%ecx)
+; X86-BMI2-NEXT: bzhil %edx, %esi, %esi
+; X86-BMI2-NEXT: bzhil %edx, (%eax), %eax
+; X86-BMI2-NEXT: movl %esi, (%ecx)
; X86-BMI2-NEXT: popl %esi
; X86-BMI2-NEXT: retl
;
;
; X64-BMI2-LABEL: bzhi32_c3_load_indexzext:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %esi, %eax, %ecx
; X64-BMI2-NEXT: bzhil %esi, (%rdi), %eax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $esi def $esi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %esi, %ecx, %ecx
; X64-BMI2-NEXT: movl %ecx, (%rdx)
; X64-BMI2-NEXT: retq
%val = load i32, ptr %w
;
; X86-BMI2-LABEL: bzhi32_c4_commutative:
; X86-BMI2: # %bb.0:
-; X86-BMI2-NEXT: pushl %esi
-; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %edx
-; X86-BMI2-NEXT: bzhil %edx, {{[0-9]+}}(%esp), %eax
-; X86-BMI2-NEXT: # kill: def $dl killed $dl killed $edx def $edx
-; X86-BMI2-NEXT: negb %dl
-; X86-BMI2-NEXT: movl $-1, %esi
-; X86-BMI2-NEXT: shrxl %edx, %esi, %edx
-; X86-BMI2-NEXT: movl %edx, (%ecx)
-; X86-BMI2-NEXT: popl %esi
+; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-BMI2-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
+; X86-BMI2-NEXT: movl $-1, %edx
+; X86-BMI2-NEXT: bzhil %ecx, %edx, %edx
+; X86-BMI2-NEXT: movl %edx, (%eax)
+; X86-BMI2-NEXT: bzhil %ecx, {{[0-9]+}}(%esp), %eax
; X86-BMI2-NEXT: retl
;
; X64-NOBMI-LABEL: bzhi32_c4_commutative:
;
; X64-BMI2-LABEL: bzhi32_c4_commutative:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movl $-1, %eax
+; X64-BMI2-NEXT: bzhil %esi, %eax, %eax
+; X64-BMI2-NEXT: movl %eax, (%rdx)
; X64-BMI2-NEXT: bzhil %esi, %edi, %eax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $esi def $esi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movl $-1, %ecx
-; X64-BMI2-NEXT: shrxl %esi, %ecx, %ecx
-; X64-BMI2-NEXT: movl %ecx, (%rdx)
; X64-BMI2-NEXT: retq
%numhighbits = sub i32 32, %numlowbits
%mask = lshr i32 -1, %numhighbits
;
; X64-BMI2-LABEL: bzhi64_c0:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rsi, %rax, %rax
+; X64-BMI2-NEXT: movq %rax, (%rdx)
; X64-BMI2-NEXT: bzhiq %rsi, %rdi, %rax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $rsi def $rsi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rsi, %rcx, %rcx
-; X64-BMI2-NEXT: movq %rcx, (%rdx)
; X64-BMI2-NEXT: retq
%numhighbits = sub i64 64, %numlowbits
%mask = lshr i64 -1, %numhighbits
; X64-BMI2-LABEL: bzhi64_c1_indexzext:
; X64-BMI2: # %bb.0:
; X64-BMI2-NEXT: # kill: def $esi killed $esi def $rsi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rsi, %rax, %rax
+; X64-BMI2-NEXT: movq %rax, (%rdx)
; X64-BMI2-NEXT: bzhiq %rsi, %rdi, %rax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $rsi def $rsi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rsi, %rcx, %rcx
-; X64-BMI2-NEXT: movq %rcx, (%rdx)
; X64-BMI2-NEXT: retq
%numhighbits = sub i8 64, %numlowbits
%sh_prom = zext i8 %numhighbits to i64
;
; X64-BMI2-LABEL: bzhi64_c2_load:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rsi, %rax, %rcx
; X64-BMI2-NEXT: bzhiq %rsi, (%rdi), %rax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $rsi def $rsi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rsi, %rcx, %rcx
; X64-BMI2-NEXT: movq %rcx, (%rdx)
; X64-BMI2-NEXT: retq
%val = load i64, ptr %w
; X64-BMI2-LABEL: bzhi64_c3_load_indexzext:
; X64-BMI2: # %bb.0:
; X64-BMI2-NEXT: # kill: def $esi killed $esi def $rsi
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rsi, %rax, %rcx
; X64-BMI2-NEXT: bzhiq %rsi, (%rdi), %rax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $rsi def $rsi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rsi, %rcx, %rcx
; X64-BMI2-NEXT: movq %rcx, (%rdx)
; X64-BMI2-NEXT: retq
%val = load i64, ptr %w
;
; X64-BMI2-LABEL: bzhi64_c4_commutative:
; X64-BMI2: # %bb.0:
+; X64-BMI2-NEXT: movq $-1, %rax
+; X64-BMI2-NEXT: bzhiq %rsi, %rax, %rax
+; X64-BMI2-NEXT: movq %rax, (%rdx)
; X64-BMI2-NEXT: bzhiq %rsi, %rdi, %rax
-; X64-BMI2-NEXT: # kill: def $sil killed $sil killed $rsi def $rsi
-; X64-BMI2-NEXT: negb %sil
-; X64-BMI2-NEXT: movq $-1, %rcx
-; X64-BMI2-NEXT: shrxq %rsi, %rcx, %rcx
-; X64-BMI2-NEXT: movq %rcx, (%rdx)
; X64-BMI2-NEXT: retq
%numhighbits = sub i64 64, %numlowbits
%mask = lshr i64 -1, %numhighbits