diff options
Diffstat (limited to 'lib/CodeGen/TargetSchedule.cpp')
| -rw-r--r-- | lib/CodeGen/TargetSchedule.cpp | 42 | 
1 files changed, 18 insertions, 24 deletions
diff --git a/lib/CodeGen/TargetSchedule.cpp b/lib/CodeGen/TargetSchedule.cpp index ef2dab1287fa5..299380d9268b8 100644 --- a/lib/CodeGen/TargetSchedule.cpp +++ b/lib/CodeGen/TargetSchedule.cpp @@ -224,26 +224,29 @@ unsigned TargetSchedModel::computeOperandLatency(    return DefMI->isTransient() ? 0 : TII->defaultDefLatency(SchedModel, DefMI);  } +unsigned +TargetSchedModel::computeInstrLatency(const MCSchedClassDesc &SCDesc) const { +  unsigned Latency = 0; +  for (unsigned DefIdx = 0, DefEnd = SCDesc.NumWriteLatencyEntries; +       DefIdx != DefEnd; ++DefIdx) { +    // Lookup the definition's write latency in SubtargetInfo. +    const MCWriteLatencyEntry *WLEntry = +      STI->getWriteLatencyEntry(&SCDesc, DefIdx); +    Latency = std::max(Latency, capLatency(WLEntry->Cycles)); +  } +  return Latency; +} +  unsigned TargetSchedModel::computeInstrLatency(unsigned Opcode) const {    assert(hasInstrSchedModel() && "Only call this function with a SchedModel");    unsigned SCIdx = TII->get(Opcode).getSchedClass();    const MCSchedClassDesc *SCDesc = SchedModel.getSchedClassDesc(SCIdx); -  unsigned Latency = 0; -  if (SCDesc->isValid() && !SCDesc->isVariant()) { -    for (unsigned DefIdx = 0, DefEnd = SCDesc->NumWriteLatencyEntries; -         DefIdx != DefEnd; ++DefIdx) { -      // Lookup the definition's write latency in SubtargetInfo. -      const MCWriteLatencyEntry *WLEntry = -          STI->getWriteLatencyEntry(SCDesc, DefIdx); -      Latency = std::max(Latency, capLatency(WLEntry->Cycles)); -    } -    return Latency; -  } +  if (SCDesc->isValid() && !SCDesc->isVariant()) +    return computeInstrLatency(*SCDesc); -  assert(Latency && "No MI sched latency"); -  return 0; +  llvm_unreachable("No MI sched latency");  }  unsigned @@ -257,17 +260,8 @@ TargetSchedModel::computeInstrLatency(const MachineInstr *MI,    if (hasInstrSchedModel()) {      const MCSchedClassDesc *SCDesc = resolveSchedClass(MI); -    if (SCDesc->isValid()) { -      unsigned Latency = 0; -      for (unsigned DefIdx = 0, DefEnd = SCDesc->NumWriteLatencyEntries; -           DefIdx != DefEnd; ++DefIdx) { -        // Lookup the definition's write latency in SubtargetInfo. -        const MCWriteLatencyEntry *WLEntry = -          STI->getWriteLatencyEntry(SCDesc, DefIdx); -        Latency = std::max(Latency, capLatency(WLEntry->Cycles)); -      } -      return Latency; -    } +    if (SCDesc->isValid()) +      return computeInstrLatency(*SCDesc);    }    return TII->defaultDefLatency(SchedModel, MI);  }  | 
