[TargetLowering] SimplifyDemandedVectorElts - pass demanded elts through ADD/SUB ops

llvm-svn: 326044
This commit is contained in:
Simon Pilgrim 2018-02-24 20:59:14 +00:00
parent c0dbdb86c3
commit 295e8b4e12
2 changed files with 15 additions and 1 deletions

View File

@ -1536,6 +1536,19 @@ bool TargetLowering::SimplifyDemandedVectorElts(
}
break;
}
case ISD::ADD:
case ISD::SUB: {
APInt SrcUndef, SrcZero;
if (SimplifyDemandedVectorElts(Op.getOperand(1), DemandedElts, SrcUndef,
SrcZero, TLO, Depth + 1))
return true;
if (SimplifyDemandedVectorElts(Op.getOperand(0), DemandedElts, KnownUndef,
KnownZero, TLO, Depth + 1))
return true;
KnownZero &= SrcZero;
KnownUndef &= SrcUndef;
break;
}
case ISD::TRUNCATE:
if (SimplifyDemandedVectorElts(Op.getOperand(0), DemandedElts, KnownUndef,
KnownZero, TLO, Depth + 1))

View File

@ -8,7 +8,8 @@ define void @convert_v2i64_to_v2i32(<2 x i32>* %dst.addr, <2 x i64> %src) nounwi
; X86-LABEL: convert_v2i64_to_v2i32:
; X86: # %bb.0: # %entry
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-NEXT: paddd {{\.LCPI.*}}, %xmm0
; X86-NEXT: pcmpeqd %xmm1, %xmm1
; X86-NEXT: psubd %xmm1, %xmm0
; X86-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
; X86-NEXT: movq %xmm0, (%eax)
; X86-NEXT: retl