mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
Enable -schedmodel, but prefer itineraries until we have more benchmark data.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165188 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
395c1502a7
commit
72fd0a9448
@ -21,7 +21,7 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
static cl::opt<bool> EnableSchedModel("schedmodel", cl::Hidden, cl::init(false),
|
||||
static cl::opt<bool> EnableSchedModel("schedmodel", cl::Hidden, cl::init(true),
|
||||
cl::desc("Use TargetSchedModel for latency lookup"));
|
||||
|
||||
static cl::opt<bool> EnableSchedItins("scheditins", cl::Hidden, cl::init(true),
|
||||
@ -123,7 +123,30 @@ unsigned TargetSchedModel::computeOperandLatency(
|
||||
if (DefLatency >= 0)
|
||||
return DefLatency;
|
||||
|
||||
if (!FindMin && EnableSchedModel && hasInstrSchedModel()) {
|
||||
if (EnableSchedItins && hasInstrItineraries()) {
|
||||
int OperLatency = 0;
|
||||
if (UseMI) {
|
||||
OperLatency =
|
||||
TII->getOperandLatency(&InstrItins, DefMI, DefOperIdx, UseMI, UseOperIdx);
|
||||
}
|
||||
else {
|
||||
unsigned DefClass = DefMI->getDesc().getSchedClass();
|
||||
OperLatency = InstrItins.getOperandCycle(DefClass, DefOperIdx);
|
||||
}
|
||||
if (OperLatency >= 0)
|
||||
return OperLatency;
|
||||
|
||||
// No operand latency was found.
|
||||
unsigned InstrLatency = TII->getInstrLatency(&InstrItins, DefMI);
|
||||
|
||||
// Expected latency is the max of the stage latency and itinerary props.
|
||||
if (!FindMin)
|
||||
InstrLatency = std::max(InstrLatency,
|
||||
TII->defaultDefLatency(&SchedModel, DefMI));
|
||||
return InstrLatency;
|
||||
}
|
||||
assert(!FindMin && EnableSchedModel && hasInstrSchedModel() &&
|
||||
"Expected a SchedModel for this cpu");
|
||||
const MCSchedClassDesc *SCDesc = resolveSchedClass(DefMI);
|
||||
unsigned DefIdx = findDefIdx(DefMI, DefOperIdx);
|
||||
if (DefIdx < SCDesc->NumWriteLatencyEntries) {
|
||||
@ -156,27 +179,3 @@ unsigned TargetSchedModel::computeOperandLatency(
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
assert(EnableSchedItins && hasInstrItineraries() &&
|
||||
"operand latency requires itinerary");
|
||||
|
||||
int OperLatency = 0;
|
||||
if (UseMI) {
|
||||
OperLatency =
|
||||
TII->getOperandLatency(&InstrItins, DefMI, DefOperIdx, UseMI, UseOperIdx);
|
||||
}
|
||||
else {
|
||||
unsigned DefClass = DefMI->getDesc().getSchedClass();
|
||||
OperLatency = InstrItins.getOperandCycle(DefClass, DefOperIdx);
|
||||
}
|
||||
if (OperLatency >= 0)
|
||||
return OperLatency;
|
||||
|
||||
// No operand latency was found.
|
||||
unsigned InstrLatency = TII->getInstrLatency(&InstrItins, DefMI);
|
||||
|
||||
// Expected latency is the max of the stage latency and itinerary props.
|
||||
if (!FindMin)
|
||||
InstrLatency = std::max(InstrLatency,
|
||||
TII->defaultDefLatency(&SchedModel, DefMI));
|
||||
return InstrLatency;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user