diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp index 9d33c53dd4f..c2f98458cc2 100644 --- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp @@ -1836,6 +1836,17 @@ bool TargetLowering::SimplifyDemandedBits(                               Depth + 1))        return true; +    // Attempt to avoid multi-use ops if we don't need anything from them. +    if (!DemandedSrcBits.isAllOnesValue() || +        !DemandedSrcElts.isAllOnesValue()) { +      if (SDValue DemandedSrc = SimplifyMultipleUseDemandedBits( +              Src, DemandedSrcBits, DemandedSrcElts, TLO.DAG, Depth + 1)) { +        SDValue NewOp = +            TLO.DAG.getNode(Op.getOpcode(), dl, VT, DemandedSrc, Idx); +        return TLO.CombineTo(Op, NewOp); +      } +    } +      Known = Known2;      if (BitWidth > EltBitWidth)        Known = Known.zext(BitWidth, false /* => any extend */);  | 

