diff options
author | Dan Gohman <gohman@apple.com> | 2008-02-20 16:57:27 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-02-20 16:57:27 +0000 |
commit | 91dc17ba4991e971c7e89e07642b10817aa28055 (patch) | |
tree | 72cd34b4eec2d154b9d3404c6e18a164c56c15e9 /lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | |
parent | b5660dc8223bd5eb3d21d9855692617fcdec5663 (diff) |
Convert Legalize to use the APInt form of ComputeMaskedBits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47383 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 9355e4871f..429855db16 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -5027,6 +5027,7 @@ bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDOperand Op,SDOperand Amt, MVT::ValueType NVT = TLI.getTypeToTransformTo(Op.getValueType()); SDOperand ShAmt = LegalizeOp(Amt); MVT::ValueType ShTy = ShAmt.getValueType(); + unsigned ShBits = MVT::getSizeInBits(ShTy); unsigned VTBits = MVT::getSizeInBits(Op.getValueType()); unsigned NVTBits = MVT::getSizeInBits(NVT); @@ -5096,15 +5097,16 @@ bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDOperand Op,SDOperand Amt, // Okay, the shift amount isn't constant. However, if we can tell that it is // >= 32 or < 32, we can still simplify it, without knowing the actual value. - uint64_t Mask = NVTBits, KnownZero, KnownOne; + APInt Mask = APInt::getHighBitsSet(ShBits, ShBits - Log2_32(NVTBits)); + APInt KnownZero, KnownOne; DAG.ComputeMaskedBits(Amt, Mask, KnownZero, KnownOne); // If we know that the high bit of the shift amount is one, then we can do // this as a couple of simple shifts. - if (KnownOne & Mask) { + if (KnownOne.intersects(Mask)) { // Mask out the high bit, which we know is set. Amt = DAG.getNode(ISD::AND, Amt.getValueType(), Amt, - DAG.getConstant(NVTBits-1, Amt.getValueType())); + DAG.getConstant(~Mask, Amt.getValueType())); // Expand the incoming operand to be shifted, so that we have its parts SDOperand InL, InH; @@ -5128,7 +5130,7 @@ bool SelectionDAGLegalize::ExpandShift(unsigned Opc, SDOperand Op,SDOperand Amt, // If we know that the high bit of the shift amount is zero, then we can do // this as a couple of simple shifts. - if (KnownZero & Mask) { + if (KnownZero.intersects(Mask)) { // Compute 32-amt. SDOperand Amt2 = DAG.getNode(ISD::SUB, Amt.getValueType(), DAG.getConstant(NVTBits, Amt.getValueType()), |