Skip to content

Commit 9a222a1

Browse files
committed
[X86] Add test coverage for #111323
1 parent f1ec45a commit 9a222a1

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed

llvm/test/CodeGen/X86/extract-lowbits.ll

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4507,3 +4507,111 @@ define i64 @bzhi64_constant_mask8_load(ptr %val) nounwind {
45074507
%masked = and i64 %val1, 127
45084508
ret i64 %masked
45094509
}
4510+
4511+
; TODO: Ensure constant hoisting doesn't prevent BEXTR/BZHI instructions in both paths.
4512+
define void @PR111323(ptr nocapture noundef writeonly %use, i64 noundef %x, i64 noundef %y) nounwind {
4513+
; X86-LABEL: PR111323:
4514+
; X86: # %bb.0: # %entry
4515+
; X86-NEXT: pushl %edi
4516+
; X86-NEXT: pushl %esi
4517+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
4518+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
4519+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
4520+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
4521+
; X86-NEXT: movzwl {{[0-9]+}}(%esp), %edi
4522+
; X86-NEXT: movl %edi, 4(%ecx)
4523+
; X86-NEXT: movl %esi, (%ecx)
4524+
; X86-NEXT: movl %edx, %esi
4525+
; X86-NEXT: orl %eax, %esi
4526+
; X86-NEXT: je .LBB68_2
4527+
; X86-NEXT: # %bb.1: # %if.end
4528+
; X86-NEXT: andl $65535, %eax # imm = 0xFFFF
4529+
; X86-NEXT: andl $-1, %edx
4530+
; X86-NEXT: movl %edx, 8(%ecx)
4531+
; X86-NEXT: movl %eax, 12(%ecx)
4532+
; X86-NEXT: .LBB68_2: # %return
4533+
; X86-NEXT: popl %esi
4534+
; X86-NEXT: popl %edi
4535+
; X86-NEXT: retl
4536+
;
4537+
; X64-NOBMI-LABEL: PR111323:
4538+
; X64-NOBMI: # %bb.0: # %entry
4539+
; X64-NOBMI-NEXT: movabsq $281474976710655, %rax # imm = 0xFFFFFFFFFFFF
4540+
; X64-NOBMI-NEXT: andq %rax, %rsi
4541+
; X64-NOBMI-NEXT: movq %rsi, (%rdi)
4542+
; X64-NOBMI-NEXT: testq %rdx, %rdx
4543+
; X64-NOBMI-NEXT: je .LBB68_2
4544+
; X64-NOBMI-NEXT: # %bb.1: # %if.end
4545+
; X64-NOBMI-NEXT: andq %rax, %rdx
4546+
; X64-NOBMI-NEXT: movq %rdx, 8(%rdi)
4547+
; X64-NOBMI-NEXT: .LBB68_2: # %return
4548+
; X64-NOBMI-NEXT: retq
4549+
;
4550+
; X64-BMI1NOTBM-LABEL: PR111323:
4551+
; X64-BMI1NOTBM: # %bb.0: # %entry
4552+
; X64-BMI1NOTBM-NEXT: movl $12288, %eax # imm = 0x3000
4553+
; X64-BMI1NOTBM-NEXT: bextrq %rax, %rsi, %rax
4554+
; X64-BMI1NOTBM-NEXT: movq %rax, (%rdi)
4555+
; X64-BMI1NOTBM-NEXT: testq %rdx, %rdx
4556+
; X64-BMI1NOTBM-NEXT: je .LBB68_2
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)
4561+
; X64-BMI1NOTBM-NEXT: .LBB68_2: # %return
4562+
; X64-BMI1NOTBM-NEXT: retq
4563+
;
4564+
; X64-BMI1TBM-LABEL: PR111323:
4565+
; X64-BMI1TBM: # %bb.0: # %entry
4566+
; X64-BMI1TBM-NEXT: bextrq $12288, %rsi, %rax # imm = 0x3000
4567+
; X64-BMI1TBM-NEXT: movq %rax, (%rdi)
4568+
; X64-BMI1TBM-NEXT: testq %rdx, %rdx
4569+
; X64-BMI1TBM-NEXT: je .LBB68_2
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)
4574+
; X64-BMI1TBM-NEXT: .LBB68_2: # %return
4575+
; X64-BMI1TBM-NEXT: retq
4576+
;
4577+
; X64-BMI2TBM-LABEL: PR111323:
4578+
; X64-BMI2TBM: # %bb.0: # %entry
4579+
; X64-BMI2TBM-NEXT: bextrq $12288, %rsi, %rax # imm = 0x3000
4580+
; X64-BMI2TBM-NEXT: movq %rax, (%rdi)
4581+
; X64-BMI2TBM-NEXT: testq %rdx, %rdx
4582+
; X64-BMI2TBM-NEXT: je .LBB68_2
4583+
; 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)
4587+
; X64-BMI2TBM-NEXT: .LBB68_2: # %return
4588+
; X64-BMI2TBM-NEXT: retq
4589+
;
4590+
; X64-BMI2NOTBM-LABEL: PR111323:
4591+
; X64-BMI2NOTBM: # %bb.0: # %entry
4592+
; X64-BMI2NOTBM-NEXT: movb $48, %al
4593+
; X64-BMI2NOTBM-NEXT: bzhiq %rax, %rsi, %rax
4594+
; X64-BMI2NOTBM-NEXT: movq %rax, (%rdi)
4595+
; X64-BMI2NOTBM-NEXT: testq %rdx, %rdx
4596+
; X64-BMI2NOTBM-NEXT: je .LBB68_2
4597+
; 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)
4601+
; X64-BMI2NOTBM-NEXT: .LBB68_2: # %return
4602+
; X64-BMI2NOTBM-NEXT: retq
4603+
entry:
4604+
%and = and i64 %x, 281474976710655
4605+
store i64 %and, ptr %use, align 8
4606+
%cmp = icmp eq i64 %y, 0
4607+
br i1 %cmp, label %return, label %if.end
4608+
4609+
if.end:
4610+
%and1 = and i64 %y, 281474976710655
4611+
%arrayidx2 = getelementptr inbounds i8, ptr %use, i64 8
4612+
store i64 %and1, ptr %arrayidx2, align 8
4613+
br label %return
4614+
4615+
return:
4616+
ret void
4617+
}

0 commit comments

Comments
 (0)