forked from OSchip/llvm-project
Fix ARMTargetLowering::isLegalAddImmediate to consider thumb encodings.
Based on Evan's suggestion without a commitable test. llvm-svn: 160441
This commit is contained in:
parent
bc325168c3
commit
a22cdb713b
|
@ -9046,12 +9046,19 @@ bool ARMTargetLowering::isLegalICmpImmediate(int64_t Imm) const {
|
|||
return Imm >= 0 && Imm <= 255;
|
||||
}
|
||||
|
||||
/// isLegalAddImmediate - Return true if the specified immediate is legal
|
||||
/// add immediate, that is the target has add instructions which can add
|
||||
/// a register with the immediate without having to materialize the
|
||||
/// isLegalAddImmediate - Return true if the specified immediate is a legal add
|
||||
/// *or sub* immediate, that is the target has add or sub instructions which can
|
||||
/// add a register with the immediate without having to materialize the
|
||||
/// immediate into a register.
|
||||
bool ARMTargetLowering::isLegalAddImmediate(int64_t Imm) const {
|
||||
return ARM_AM::getSOImmVal(Imm) != -1;
|
||||
// Same encoding for add/sub, just flip the sign.
|
||||
int64_t AbsImm = llvm::abs64(Imm);
|
||||
if (!Subtarget->isThumb())
|
||||
return ARM_AM::getSOImmVal(AbsImm) != -1;
|
||||
if (Subtarget->isThumb2())
|
||||
return ARM_AM::getT2SOImmVal(AbsImm) != -1;
|
||||
// Thumb1 only has 8-bit unsigned immediate.
|
||||
return AbsImm >= 0 && AbsImm <= 255;
|
||||
}
|
||||
|
||||
static bool getARMIndexedAddressParts(SDNode *Ptr, EVT VT,
|
||||
|
|
Loading…
Reference in New Issue