diff options
author | Michael Gottesman <mgottesman@apple.com> | 2013-06-18 20:49:45 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2013-06-18 20:49:45 +0000 |
commit | 696e44efd456747e385e8892180d5d2222a0474b (patch) | |
tree | c108805daf0004629af972df464b68830c8811b8 | |
parent | b2a70564a753d0992cda953e55a51fb1dcc2a9a4 (diff) | |
download | bcm5719-llvm-696e44efd456747e385e8892180d5d2222a0474b.tar.gz bcm5719-llvm-696e44efd456747e385e8892180d5d2222a0474b.zip |
[ARMTargetLowering] ARMISD::{SUB,ADD}{C,E} second result is a boolean implying that upper bits are always 0.
llvm-svn: 184231
-rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index 015b023dca1..a63cb27b1e5 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -10184,9 +10184,19 @@ void ARMTargetLowering::computeMaskedBitsForTargetNode(const SDValue Op, APInt &KnownOne, const SelectionDAG &DAG, unsigned Depth) const { - KnownZero = KnownOne = APInt(KnownOne.getBitWidth(), 0); + unsigned BitWidth = KnownOne.getBitWidth(); + KnownZero = KnownOne = APInt(BitWidth, 0); switch (Op.getOpcode()) { default: break; + case ARMISD::ADDC: + case ARMISD::ADDE: + case ARMISD::SUBC: + case ARMISD::SUBE: + // These nodes' second result is a boolean + if (Op.getResNo() == 0) + break; + KnownZero |= APInt::getHighBitsSet(BitWidth, BitWidth - 1); + break; case ARMISD::CMOV: { // Bits are known zero/one if known on the LHS and RHS. DAG.ComputeMaskedBits(Op.getOperand(0), KnownZero, KnownOne, Depth+1); |