diff options
author | Owen Anderson <resistor@mac.com> | 2010-10-01 20:28:06 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-10-01 20:28:06 +0000 |
commit | aa9f0a57d03b1eef5a58c48b05f6657d2a5a0d0a (patch) | |
tree | 87966bd3faa5816c8f15a550fc50ad7424e5d3dc /lib/Target/ARM | |
parent | 7267e14327b269bd15dd9cc8083f68bef577b585 (diff) |
Provide an option to restore old-style if-conversion heuristics for Thumb2.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115339 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM')
-rw-r--r-- | lib/Target/ARM/Thumb2InstrInfo.cpp | 29 | ||||
-rw-r--r-- | lib/Target/ARM/Thumb2InstrInfo.h | 6 |
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/Target/ARM/Thumb2InstrInfo.cpp b/lib/Target/ARM/Thumb2InstrInfo.cpp index 49f5e4a950..a79b4ae4b3 100644 --- a/lib/Target/ARM/Thumb2InstrInfo.cpp +++ b/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -28,6 +28,11 @@ using namespace llvm; +static cl::opt<bool> +OldT2IfCvt("old-thumb2-ifcvt", cl::Hidden, + cl::desc("Use old-style Thumb2 if-conversion heuristics"), + cl::init(false)); + Thumb2InstrInfo::Thumb2InstrInfo(const ARMSubtarget &STI) : ARMBaseInstrInfo(STI), RI(*this, STI) { } @@ -37,6 +42,30 @@ unsigned Thumb2InstrInfo::getUnindexedOpcode(unsigned Opc) const { return 0; } +bool Thumb2InstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, + unsigned NumInstrs, + float Prediction) const { + if (!OldT2IfCvt) + return ARMBaseInstrInfo::isProfitableToIfCvt(MBB, NumInstrs, Prediction); + return NumInstrs && NumInstrs <= 3; +} + +bool Thumb2InstrInfo:: +isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumT, + MachineBasicBlock &FMBB, unsigned NumF, + float Prediction) const { + if (!OldT2IfCvt) + return ARMBaseInstrInfo::isProfitableToIfCvt(TMBB, NumT, + FMBB, NumF, Prediction); + + // FIXME: Catch optimization such as: + // r0 = movne + // r0 = moveq + return NumT && NumF && + NumT <= 3 && NumF <= 3; +} + + void Thumb2InstrInfo::ReplaceTailWithBranchTo(MachineBasicBlock::iterator Tail, MachineBasicBlock *NewDest) const { diff --git a/lib/Target/ARM/Thumb2InstrInfo.h b/lib/Target/ARM/Thumb2InstrInfo.h index 9ed7eea7e2..f9b1f32e62 100644 --- a/lib/Target/ARM/Thumb2InstrInfo.h +++ b/lib/Target/ARM/Thumb2InstrInfo.h @@ -38,6 +38,12 @@ public: bool isLegalToSplitMBBAt(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI) const; + bool isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumInstrs, + float Prediction) const; + bool isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumTInstrs, + MachineBasicBlock &FMBB, unsigned NumFInstrs, + float Prediction) const; + void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, DebugLoc DL, unsigned DestReg, unsigned SrcReg, |