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 | 41502e1af77443c31138cee309bd89898f23e33a (patch) | |
tree | 484ae90c1c8ad00ce7a73907965529aed4c4d03f /lib/Target | |
parent | 8493edfb4b61e5c63669fc19a55b640e1ad7aee1 (diff) | |
download | llvm-41502e1af77443c31138cee309bd89898f23e33a.tar.gz llvm-41502e1af77443c31138cee309bd89898f23e33a.tar.bz2 llvm-41502e1af77443c31138cee309bd89898f23e33a.tar.xz |
[ARMTargetLowering] ARMISD::{SUB,ADD}{C,E} second result is a boolean implying that upper bits are always 0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184231 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/ARM/ARMISelLowering.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index 015b023dca..a63cb27b1e 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/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); |