diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-04-04 12:51:34 +0000 | 
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-04-04 12:51:34 +0000 | 
| commit | ba0a6cabb80827f5f3a6e4749414f31e2c3e9754 (patch) | |
| tree | c2e0e8e93cfaf9f3eb4da5016d338867a53211ae /llvm/lib/Target/ARM | |
| parent | 74875e6719f86d7454c6dded3287e937eeb4a1ee (diff) | |
| download | bcm5719-llvm-ba0a6cabb80827f5f3a6e4749414f31e2c3e9754.tar.gz bcm5719-llvm-ba0a6cabb80827f5f3a6e4749414f31e2c3e9754.zip  | |
Always compute all the bits in ComputeMaskedBits.
This allows us to keep passing reduced masks to SimplifyDemandedBits, but
know about all the bits if SimplifyDemandedBits fails. This allows instcombine
to simplify cases like the one in the included testcase.
llvm-svn: 154011
Diffstat (limited to 'llvm/lib/Target/ARM')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.h | 1 | 
2 files changed, 4 insertions, 8 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index d5c38d5e1bf..fab3e24551b 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -8288,8 +8288,7 @@ ARMTargetLowering::PerformCMOVCombine(SDNode *N, SelectionDAG &DAG) const {    if (Res.getNode()) {      APInt KnownZero, KnownOne; -    APInt Mask = APInt::getAllOnesValue(VT.getScalarType().getSizeInBits()); -    DAG.ComputeMaskedBits(SDValue(N,0), Mask, KnownZero, KnownOne); +    DAG.ComputeMaskedBits(SDValue(N,0), KnownZero, KnownOne);      // Capture demanded bits information that would be otherwise lost.      if (KnownZero == 0xfffffffe)        Res = DAG.getNode(ISD::AssertZext, dl, MVT::i32, Res, @@ -8805,22 +8804,20 @@ bool ARMTargetLowering::getPostIndexedAddressParts(SDNode *N, SDNode *Op,  }  void ARMTargetLowering::computeMaskedBitsForTargetNode(const SDValue Op, -                                                       const APInt &Mask,                                                         APInt &KnownZero,                                                         APInt &KnownOne,                                                         const SelectionDAG &DAG,                                                         unsigned Depth) const { -  KnownZero = KnownOne = APInt(Mask.getBitWidth(), 0); +  KnownZero = KnownOne = APInt(KnownOne.getBitWidth(), 0);    switch (Op.getOpcode()) {    default: break;    case ARMISD::CMOV: {      // Bits are known zero/one if known on the LHS and RHS. -    DAG.ComputeMaskedBits(Op.getOperand(0), Mask, KnownZero, KnownOne, Depth+1); +    DAG.ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1);      if (KnownZero == 0 && KnownOne == 0) return;      APInt KnownZeroRHS, KnownOneRHS; -    DAG.ComputeMaskedBits(Op.getOperand(1), Mask, -                          KnownZeroRHS, KnownOneRHS, Depth+1); +    DAG.ComputeMaskedBits(Op.getOperand(1), KnownZeroRHS, KnownOneRHS, Depth+1);      KnownZero &= KnownZeroRHS;      KnownOne  &= KnownOneRHS;      return; diff --git a/llvm/lib/Target/ARM/ARMISelLowering.h b/llvm/lib/Target/ARM/ARMISelLowering.h index a71b74e7af9..80c5716bb00 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.h +++ b/llvm/lib/Target/ARM/ARMISelLowering.h @@ -315,7 +315,6 @@ namespace llvm {                                              SelectionDAG &DAG) const;      virtual void computeMaskedBitsForTargetNode(const SDValue Op, -                                                const APInt &Mask,                                                  APInt &KnownZero,                                                  APInt &KnownOne,                                                  const SelectionDAG &DAG,  | 

