@@ -4508,7 +4508,7 @@ define i64 @bzhi64_constant_mask8_load(ptr %val) nounwind {
4508
4508
ret i64 %masked
4509
4509
}
4510
4510
4511
- ; TODO: Ensure constant hoisting doesn't prevent BEXTR/BZHI instructions in both paths.
4511
+ ; Ensure constant hoisting doesn't prevent BEXTR/BZHI instructions in both paths.
4512
4512
define void @PR111323 (ptr nocapture noundef writeonly %use , i64 noundef %x , i64 noundef %y ) nounwind {
4513
4513
; X86-LABEL: PR111323:
4514
4514
; X86: # %bb.0: # %entry
@@ -4555,9 +4555,9 @@ define void @PR111323(ptr nocapture noundef writeonly %use, i64 noundef %x, i64
4555
4555
; X64-BMI1NOTBM-NEXT: testq %rdx, %rdx
4556
4556
; X64-BMI1NOTBM-NEXT: je .LBB68_2
4557
4557
; X64-BMI1NOTBM-NEXT: # %bb.1: # %if.end
4558
- ; X64-BMI1NOTBM-NEXT: movabsq $281474976710655 , %rax # imm = 0xFFFFFFFFFFFF
4559
- ; X64-BMI1NOTBM-NEXT: andq %rax, %rdx
4560
- ; X64-BMI1NOTBM-NEXT: movq %rdx , 8(%rdi)
4558
+ ; X64-BMI1NOTBM-NEXT: movl $12288 , %eax # imm = 0x3000
4559
+ ; X64-BMI1NOTBM-NEXT: bextrq %rax, %rdx, %rax
4560
+ ; X64-BMI1NOTBM-NEXT: movq %rax , 8(%rdi)
4561
4561
; X64-BMI1NOTBM-NEXT: .LBB68_2: # %return
4562
4562
; X64-BMI1NOTBM-NEXT: retq
4563
4563
;
@@ -4568,9 +4568,8 @@ define void @PR111323(ptr nocapture noundef writeonly %use, i64 noundef %x, i64
4568
4568
; X64-BMI1TBM-NEXT: testq %rdx, %rdx
4569
4569
; X64-BMI1TBM-NEXT: je .LBB68_2
4570
4570
; X64-BMI1TBM-NEXT: # %bb.1: # %if.end
4571
- ; X64-BMI1TBM-NEXT: movabsq $281474976710655, %rax # imm = 0xFFFFFFFFFFFF
4572
- ; X64-BMI1TBM-NEXT: andq %rax, %rdx
4573
- ; X64-BMI1TBM-NEXT: movq %rdx, 8(%rdi)
4571
+ ; X64-BMI1TBM-NEXT: bextrq $12288, %rdx, %rax # imm = 0x3000
4572
+ ; X64-BMI1TBM-NEXT: movq %rax, 8(%rdi)
4574
4573
; X64-BMI1TBM-NEXT: .LBB68_2: # %return
4575
4574
; X64-BMI1TBM-NEXT: retq
4576
4575
;
@@ -4581,23 +4580,21 @@ define void @PR111323(ptr nocapture noundef writeonly %use, i64 noundef %x, i64
4581
4580
; X64-BMI2TBM-NEXT: testq %rdx, %rdx
4582
4581
; X64-BMI2TBM-NEXT: je .LBB68_2
4583
4582
; X64-BMI2TBM-NEXT: # %bb.1: # %if.end
4584
- ; X64-BMI2TBM-NEXT: movabsq $281474976710655, %rax # imm = 0xFFFFFFFFFFFF
4585
- ; X64-BMI2TBM-NEXT: andq %rax, %rdx
4586
- ; X64-BMI2TBM-NEXT: movq %rdx, 8(%rdi)
4583
+ ; X64-BMI2TBM-NEXT: bextrq $12288, %rdx, %rax # imm = 0x3000
4584
+ ; X64-BMI2TBM-NEXT: movq %rax, 8(%rdi)
4587
4585
; X64-BMI2TBM-NEXT: .LBB68_2: # %return
4588
4586
; X64-BMI2TBM-NEXT: retq
4589
4587
;
4590
4588
; X64-BMI2NOTBM-LABEL: PR111323:
4591
4589
; X64-BMI2NOTBM: # %bb.0: # %entry
4592
4590
; X64-BMI2NOTBM-NEXT: movb $48, %al
4593
- ; X64-BMI2NOTBM-NEXT: bzhiq %rax, %rsi, %rax
4594
- ; X64-BMI2NOTBM-NEXT: movq %rax , (%rdi)
4591
+ ; X64-BMI2NOTBM-NEXT: bzhiq %rax, %rsi, %rcx
4592
+ ; X64-BMI2NOTBM-NEXT: movq %rcx , (%rdi)
4595
4593
; X64-BMI2NOTBM-NEXT: testq %rdx, %rdx
4596
4594
; X64-BMI2NOTBM-NEXT: je .LBB68_2
4597
4595
; X64-BMI2NOTBM-NEXT: # %bb.1: # %if.end
4598
- ; X64-BMI2NOTBM-NEXT: movabsq $281474976710655, %rax # imm = 0xFFFFFFFFFFFF
4599
- ; X64-BMI2NOTBM-NEXT: andq %rax, %rdx
4600
- ; X64-BMI2NOTBM-NEXT: movq %rdx, 8(%rdi)
4596
+ ; X64-BMI2NOTBM-NEXT: bzhiq %rax, %rdx, %rax
4597
+ ; X64-BMI2NOTBM-NEXT: movq %rax, 8(%rdi)
4601
4598
; X64-BMI2NOTBM-NEXT: .LBB68_2: # %return
4602
4599
; X64-BMI2NOTBM-NEXT: retq
4603
4600
entry:
0 commit comments