diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-04-06 17:45:04 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-04-06 17:45:04 +0000 |
commit | 967b86a0a24e6c7c1a2b51818584edbb4f92aa45 (patch) | |
tree | 3c711184bf7dfabe71c4967e0d9d13a060263c7b /llvm/lib/Target/ARM/ARMISelLowering.cpp | |
parent | 29399a24c62fd8408bf5ea172d946f0742b173ea (diff) | |
download | bcm5719-llvm-967b86a0a24e6c7c1a2b51818584edbb4f92aa45.tar.gz bcm5719-llvm-967b86a0a24e6c7c1a2b51818584edbb4f92aa45.zip |
Allow negative immediates in ARM and Thumb2 compares.
ARM and Thumb2 mode can use cmn instructions to compare against negative
immediates. Thumb1 mode can't.
llvm-svn: 154183
Diffstat (limited to 'llvm/lib/Target/ARM/ARMISelLowering.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMISelLowering.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index fab3e24551b..c20ee674ce8 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -8614,10 +8614,12 @@ bool ARMTargetLowering::isLegalAddressingMode(const AddrMode &AM, /// a register against the immediate without having to materialize the /// immediate into a register. bool ARMTargetLowering::isLegalICmpImmediate(int64_t Imm) const { + // Thumb2 and ARM modes can use cmn for negative immediates. if (!Subtarget->isThumb()) - return ARM_AM::getSOImmVal(Imm) != -1; + return ARM_AM::getSOImmVal(std::abs(Imm)) != -1; if (Subtarget->isThumb2()) - return ARM_AM::getT2SOImmVal(Imm) != -1; + return ARM_AM::getT2SOImmVal(std::abs(Imm)) != -1; + // Thumb1 doesn't have cmn, and only 8-bit immediates. return Imm >= 0 && Imm <= 255; } |