diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 19 | 
1 files changed, 9 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 8426e3925a1..fc1c97b8e9a 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -15420,23 +15420,22 @@ SDValue DAGCombiner::visitSTORE(SDNode *N) {        Value.getValueType().isInteger() &&        (!isa<ConstantSDNode>(Value) ||         !cast<ConstantSDNode>(Value)->isOpaque())) { +    APInt TruncDemandedBits = +        APInt::getLowBitsSet(Value.getScalarValueSizeInBits(), +                             ST->getMemoryVT().getScalarSizeInBits()); +      // See if we can simplify the input to this truncstore with knowledge that      // only the low bits are being used.  For example:      // "truncstore (or (shl x, 8), y), i8"  -> "truncstore y, i8" -    SDValue Shorter = DAG.GetDemandedBits( -        Value, APInt::getLowBitsSet(Value.getScalarValueSizeInBits(), -                                    ST->getMemoryVT().getScalarSizeInBits())); +    SDValue Shorter = DAG.GetDemandedBits(Value, TruncDemandedBits);      AddToWorklist(Value.getNode()); -    if (Shorter.getNode()) -      return DAG.getTruncStore(Chain, SDLoc(N), Shorter, -                               Ptr, ST->getMemoryVT(), ST->getMemOperand()); +    if (Shorter) +      return DAG.getTruncStore(Chain, SDLoc(N), Shorter, Ptr, ST->getMemoryVT(), +                               ST->getMemOperand());      // Otherwise, see if we can simplify the operation with      // SimplifyDemandedBits, which only works if the value has a single use. -    if (SimplifyDemandedBits( -            Value, -            APInt::getLowBitsSet(Value.getScalarValueSizeInBits(), -                                 ST->getMemoryVT().getScalarSizeInBits()))) { +    if (SimplifyDemandedBits(Value, TruncDemandedBits)) {        // Re-visit the store if anything changed and the store hasn't been merged        // with another node (N is deleted) SimplifyDemandedBits will add Value's        // node back to the worklist if necessary, but we also need to re-visit  | 

