Skip to content

Commit 8b47913

Browse files
committed
[X86] SimplifyMultipleUseDemandedBitsForTargetNode - add X86ISD::BLENDV handling
If we know the condition mask sign bit of the demanded elements then we can directly return the LHS/RHS selection
1 parent 1cddbf8 commit 8b47913

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -42023,6 +42023,19 @@ SDValue X86TargetLowering::SimplifyMultipleUseDemandedBitsForTargetNode(
4202342023
ISD::isBuildVectorAllZeros(Op.getOperand(0).getNode()))
4202442024
return Op.getOperand(1);
4202542025
break;
42026+
case X86ISD::BLENDV: {
42027+
// BLENDV: Cond (MSB) ? LHS : RHS
42028+
SDValue Cond = Op.getOperand(0);
42029+
SDValue LHS = Op.getOperand(1);
42030+
SDValue RHS = Op.getOperand(2);
42031+
42032+
KnownBits CondKnown = DAG.computeKnownBits(Cond, DemandedElts, Depth + 1);
42033+
if (CondKnown.isNegative())
42034+
return LHS;
42035+
if (CondKnown.isNonNegative())
42036+
return RHS;
42037+
break;
42038+
}
4202642039
case X86ISD::ANDNP: {
4202742040
// ANDNP = (~LHS & RHS);
4202842041
SDValue LHS = Op.getOperand(0);

llvm/test/CodeGen/X86/vec_int_to_fp.ll

+6-10
Original file line numberDiff line numberDiff line change
@@ -2169,17 +2169,13 @@ define <4 x float> @uitofp_4i64_to_4f32_undef(<2 x i64> %a) {
21692169
; AVX1-NEXT: vpextrq $1, %xmm1, %rax
21702170
; AVX1-NEXT: vcvtsi2ss %rax, %xmm3, %xmm2
21712171
; AVX1-NEXT: vmovq %xmm1, %rax
2172-
; AVX1-NEXT: vcvtsi2ss %rax, %xmm3, %xmm3
2173-
; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[2,3]
2174-
; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
2175-
; AVX1-NEXT: vmovq %xmm1, %rax
2176-
; AVX1-NEXT: vcvtsi2ss %rax, %xmm4, %xmm3
2177-
; AVX1-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0],xmm2[3]
2178-
; AVX1-NEXT: vpextrq $1, %xmm1, %rax
2179-
; AVX1-NEXT: vcvtsi2ss %rax, %xmm4, %xmm1
2180-
; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm2[0,1,2],xmm1[0]
2172+
; AVX1-NEXT: vcvtsi2ss %rax, %xmm3, %xmm1
2173+
; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[2,3]
2174+
; AVX1-NEXT: vxorps %xmm2, %xmm2, %xmm2
2175+
; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0],xmm1[3]
2176+
; AVX1-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],xmm2[0]
21812177
; AVX1-NEXT: vaddps %xmm1, %xmm1, %xmm2
2182-
; AVX1-NEXT: vxorps %xmm3, %xmm3, %xmm3
2178+
; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
21832179
; AVX1-NEXT: vpackssdw %xmm3, %xmm0, %xmm0
21842180
; AVX1-NEXT: vblendvps %xmm0, %xmm2, %xmm1, %xmm0
21852181
; AVX1-NEXT: vzeroupper

0 commit comments

Comments
 (0)