diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-07-26 11:10:20 +0000 | 
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2019-07-26 11:10:20 +0000 | 
| commit | d93e8ece7b6223fde22b7c1aa1de493b44bbd20d (patch) | |
| tree | ce290ddc6f8030eb8d166c0598a1fb8382b85ac6 /llvm/lib | |
| parent | 7440065bd818aa1570c4f6d192a08f0f7dd08335 (diff) | |
| download | bcm5719-llvm-d93e8ece7b6223fde22b7c1aa1de493b44bbd20d.tar.gz bcm5719-llvm-d93e8ece7b6223fde22b7c1aa1de493b44bbd20d.zip | |
[X86][SSE] Replace PMULDQ GetDemandedBits combine with SimplifyMultipleUseDemandedBits handler.
This removes a GetDemandedBits user and allows us to benefit from the DemandedElts propagated through SimplifyDemandedBits.
llvm-svn: 367100
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 21 | 
1 files changed, 12 insertions, 9 deletions
| diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 30866518a48..001862bc2f9 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -34381,6 +34381,18 @@ bool X86TargetLowering::SimplifyDemandedBitsForTargetNode(      if (SimplifyDemandedBits(RHS, DemandedMask, OriginalDemandedElts, KnownOp,                               TLO, Depth + 1))        return true; + +    // Aggressively peek through ops to get at the demanded low bits. +    SDValue DemandedLHS = SimplifyMultipleUseDemandedBits( +        LHS, DemandedMask, OriginalDemandedElts, TLO.DAG, Depth + 1); +    SDValue DemandedRHS = SimplifyMultipleUseDemandedBits( +        RHS, DemandedMask, OriginalDemandedElts, TLO.DAG, Depth + 1); +    if (DemandedLHS || DemandedRHS) { +      DemandedLHS = DemandedLHS ? DemandedLHS : LHS; +      DemandedRHS = DemandedRHS ? DemandedRHS : RHS; +      return TLO.CombineTo( +          Op, TLO.DAG.getNode(Opc, SDLoc(Op), VT, DemandedLHS, DemandedRHS)); +    }      break;    }    case X86ISD::VSHLI: { @@ -44220,15 +44232,6 @@ static SDValue combinePMULDQ(SDNode *N, SelectionDAG &DAG,    if (ISD::isBuildVectorAllZeros(RHS.getNode()))      return RHS; -  // Aggressively peek through ops to get at the demanded low bits. -  APInt DemandedMask = APInt::getLowBitsSet(64, 32); -  SDValue DemandedLHS = DAG.GetDemandedBits(LHS, DemandedMask); -  SDValue DemandedRHS = DAG.GetDemandedBits(RHS, DemandedMask); -  if (DemandedLHS || DemandedRHS) -    return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0), -                       DemandedLHS ? DemandedLHS : LHS, -                       DemandedRHS ? DemandedRHS : RHS); -    // PMULDQ/PMULUDQ only uses lower 32 bits from each vector element.    const TargetLowering &TLI = DAG.getTargetLoweringInfo();    if (TLI.SimplifyDemandedBits(SDValue(N, 0), APInt::getAllOnesValue(64), DCI)) | 

