diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-06-25 22:42:03 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-06-25 22:42:03 +0000 |
commit | 13151432edace19ee867a93b5c14573df4f75d24 (patch) | |
tree | 364b32c5bd3eec9c8e8143aa3c6840a7e3c1f395 /lib/Target/ARM/Thumb2InstrInfo.cpp | |
parent | 5e7b607f725e5c07aacd1d0cfe5fefb6b3900ae2 (diff) | |
download | llvm-13151432edace19ee867a93b5c14573df4f75d24.tar.gz llvm-13151432edace19ee867a93b5c14573df4f75d24.tar.bz2 llvm-13151432edace19ee867a93b5c14573df4f75d24.tar.xz |
Change if-conversion block size limit checks to add some flexibility.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106901 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/Thumb2InstrInfo.cpp')
-rw-r--r-- | lib/Target/ARM/Thumb2InstrInfo.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/Target/ARM/Thumb2InstrInfo.cpp b/lib/Target/ARM/Thumb2InstrInfo.cpp index 42fe5092f7..d7c86c6b94 100644 --- a/lib/Target/ARM/Thumb2InstrInfo.cpp +++ b/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -24,9 +24,18 @@ #include "llvm/CodeGen/MachineMemOperand.h" #include "llvm/CodeGen/PseudoSourceValue.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Support/CommandLine.h" using namespace llvm; +static cl::opt<unsigned> +IfCvtLimit("thumb2-ifcvt-limit (default 3)", + cl::Hidden, cl::init(3)); + +static cl::opt<unsigned> +IfCvtDiamondLimit("thumb2-ifcvt-diamond-limit (default 3)", + cl::Hidden, cl::init(3)); + Thumb2InstrInfo::Thumb2InstrInfo(const ARMSubtarget &STI) : ARMBaseInstrInfo(STI), RI(*this, STI) { } @@ -94,6 +103,20 @@ Thumb2InstrInfo::isLegalToSplitMBBAt(MachineBasicBlock &MBB, return llvm::getITInstrPredicate(MBBI, PredReg) == ARMCC::AL; } +bool Thumb2InstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, + unsigned NumInstrs) const { + return NumInstrs && NumInstrs <= IfCvtLimit; +} + +bool Thumb2InstrInfo:: +isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumT, + MachineBasicBlock &FMBB, unsigned NumF) const { + // FIXME: Catch optimization such as: + // r0 = movne + // r0 = moveq + return NumT && NumF && + NumT <= (IfCvtDiamondLimit) && NumF <= (IfCvtDiamondLimit); +} bool Thumb2InstrInfo::copyRegToReg(MachineBasicBlock &MBB, |