diff options
| author | Geoff Berry <gberry@codeaurora.org> | 2016-02-29 19:53:22 +0000 |
|---|---|---|
| committer | Geoff Berry <gberry@codeaurora.org> | 2016-02-29 19:53:22 +0000 |
| commit | f5ba61d18cfae11f40ea6fd494c30b76c8494d4d (patch) | |
| tree | a5231b5c11e2c49ba92ea4307ae6d630a512e44a /llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | |
| parent | fb2add2be1e00cd003c6c08d41285ca92fba5274 (diff) | |
| download | bcm5719-llvm-f5ba61d18cfae11f40ea6fd494c30b76c8494d4d.tar.gz bcm5719-llvm-f5ba61d18cfae11f40ea6fd494c30b76c8494d4d.zip | |
[AArch64] Fix isLegalAddImmediate() to return true for valid negative values.
Reviewers: t.p.northover, jmolloy
Subscribers: mcrosier, aemerson, llvm-commits, rengolin
Differential Revision: http://reviews.llvm.org/D17463
llvm-svn: 262248
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64ISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64ISelLowering.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp index a18b7a61cc1..a6a9694a21d 100644 --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -7280,6 +7280,8 @@ EVT AArch64TargetLowering::getOptimalMemOpType(uint64_t Size, unsigned DstAlign, // 12-bit optionally shifted immediates are legal for adds. bool AArch64TargetLowering::isLegalAddImmediate(int64_t Immed) const { + // Same encoding for add/sub, just flip the sign. + Immed = std::abs(Immed); if ((Immed >> 12) == 0 || ((Immed & 0xfff) == 0 && Immed >> 24 == 0)) return true; return false; @@ -7288,8 +7290,6 @@ bool AArch64TargetLowering::isLegalAddImmediate(int64_t Immed) const { // Integer comparisons are implemented with ADDS/SUBS, so the range of valid // immediates is the same as for an add or a sub. bool AArch64TargetLowering::isLegalICmpImmediate(int64_t Immed) const { - if (Immed < 0) - Immed *= -1; return isLegalAddImmediate(Immed); } |

