diff options
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/ARM/ARMBaseInstrInfo.cpp | 9 | ||||
-rw-r--r-- | lib/Target/ARM/ARMBaseInstrInfo.h | 8 | ||||
-rw-r--r-- | lib/Target/ARM/Thumb2InstrInfo.cpp | 11 | ||||
-rw-r--r-- | lib/Target/ARM/Thumb2InstrInfo.h | 4 |
4 files changed, 19 insertions, 13 deletions
diff --git a/lib/Target/ARM/ARMBaseInstrInfo.cpp b/lib/Target/ARM/ARMBaseInstrInfo.cpp index 9a904cd..6034b4a 100644 --- a/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -1201,7 +1201,8 @@ bool ARMBaseInstrInfo::isSchedulingBoundary(const MachineInstr *MI, bool ARMBaseInstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumInstrs, - float Probability) const { + float Probability, + float Confidence) const { if (!NumInstrs) return false; @@ -1218,7 +1219,7 @@ bool ARMBaseInstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, // Attempt to estimate the relative costs of predication versus branching. float UnpredCost = Probability * NumInstrs; UnpredCost += 1.0; // The branch itself - UnpredCost += 0.1 * Subtarget.getMispredictionPenalty(); + UnpredCost += (1.0 - Confidence) * Subtarget.getMispredictionPenalty(); float PredCost = NumInstrs; @@ -1229,7 +1230,7 @@ bool ARMBaseInstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, bool ARMBaseInstrInfo:: isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumT, MachineBasicBlock &FMBB, unsigned NumF, - float Probability) const { + float Probability, float Confidence) const { // Use old-style if-conversion heuristics if (OldARMIfCvt) { return NumT && NumF && NumT <= 2 && NumF <= 2; @@ -1241,7 +1242,7 @@ isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumT, // Attempt to estimate the relative costs of predication versus branching. float UnpredCost = Probability * NumT + (1.0 - Probability) * NumF; UnpredCost += 1.0; // The branch itself - UnpredCost += 0.1 * Subtarget.getMispredictionPenalty(); + UnpredCost += (1.0 - Confidence) * Subtarget.getMispredictionPenalty(); float PredCost = NumT + NumF; diff --git a/lib/Target/ARM/ARMBaseInstrInfo.h b/lib/Target/ARM/ARMBaseInstrInfo.h index f6800bb..fbe5fe8 100644 --- a/lib/Target/ARM/ARMBaseInstrInfo.h +++ b/lib/Target/ARM/ARMBaseInstrInfo.h @@ -312,15 +312,17 @@ public: const MachineFunction &MF) const; virtual bool isProfitableToIfCvt(MachineBasicBlock &MBB, - unsigned NumInstrs, float Prob) const; + unsigned NumInstrs, + float Prob, float Confidence) const; virtual bool isProfitableToIfCvt(MachineBasicBlock &TMBB,unsigned NumT, MachineBasicBlock &FMBB,unsigned NumF, - float Probability) const; + float Probability, float Confidence) const; virtual bool isProfitableToDupForIfCvt(MachineBasicBlock &MBB, unsigned NumInstrs, - float Probability) const { + float Probability, + float Confidence) const { return NumInstrs && NumInstrs == 1; } diff --git a/lib/Target/ARM/Thumb2InstrInfo.cpp b/lib/Target/ARM/Thumb2InstrInfo.cpp index a79b4ae..0a0f314 100644 --- a/lib/Target/ARM/Thumb2InstrInfo.cpp +++ b/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -44,19 +44,22 @@ unsigned Thumb2InstrInfo::getUnindexedOpcode(unsigned Opc) const { bool Thumb2InstrInfo::isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumInstrs, - float Prediction) const { + float Prediction, + float Confidence) const { if (!OldT2IfCvt) - return ARMBaseInstrInfo::isProfitableToIfCvt(MBB, NumInstrs, Prediction); + return ARMBaseInstrInfo::isProfitableToIfCvt(MBB, NumInstrs, + Prediction, Confidence); return NumInstrs && NumInstrs <= 3; } bool Thumb2InstrInfo:: isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumT, MachineBasicBlock &FMBB, unsigned NumF, - float Prediction) const { + float Prediction, float Confidence) const { if (!OldT2IfCvt) return ARMBaseInstrInfo::isProfitableToIfCvt(TMBB, NumT, - FMBB, NumF, Prediction); + FMBB, NumF, + Prediction, Confidence); // FIXME: Catch optimization such as: // r0 = movne diff --git a/lib/Target/ARM/Thumb2InstrInfo.h b/lib/Target/ARM/Thumb2InstrInfo.h index f9b1f32..b348ad0 100644 --- a/lib/Target/ARM/Thumb2InstrInfo.h +++ b/lib/Target/ARM/Thumb2InstrInfo.h @@ -39,10 +39,10 @@ public: MachineBasicBlock::iterator MBBI) const; bool isProfitableToIfCvt(MachineBasicBlock &MBB, unsigned NumInstrs, - float Prediction) const; + float Prediction, float Confidence) const; bool isProfitableToIfCvt(MachineBasicBlock &TMBB, unsigned NumTInstrs, MachineBasicBlock &FMBB, unsigned NumFInstrs, - float Prediction) const; + float Prediction, float Confidence) const; void copyPhysReg(MachineBasicBlock &MBB, MachineBasicBlock::iterator I, DebugLoc DL, |