[llvm] r237376 - TargetSchedule: factor out common code; NFC

Matthias Braun matze at braunis.de
Thu May 14 11:38:44 PDT 2015


> On May 14, 2015, at 11:26 AM, Eli Bendersky <eliben at google.com> wrote:
> 
> 
> 
> On Thu, May 14, 2015 at 11:01 AM, Matthias Braun <matze at braunis.de <mailto:matze at braunis.de>> wrote:
> Author: matze
> Date: Thu May 14 13:01:13 2015
> New Revision: 237376
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=237376&view=rev <http://llvm.org/viewvc/llvm-project?rev=237376&view=rev>
> Log:
> TargetSchedule: factor out common code; NFC
> 
> Modified:
>     llvm/trunk/include/llvm/CodeGen/TargetSchedule.h
>     llvm/trunk/lib/CodeGen/TargetSchedule.cpp
> 
> Modified: llvm/trunk/include/llvm/CodeGen/TargetSchedule.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/TargetSchedule.h?rev=237376&r1=237375&r2=237376&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/TargetSchedule.h?rev=237376&r1=237375&r2=237376&view=diff>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/TargetSchedule.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/TargetSchedule.h Thu May 14 13:01:13 2015
> @@ -40,6 +40,9 @@ class TargetSchedModel {
>    SmallVector<unsigned, 16> ResourceFactors;
>    unsigned MicroOpFactor; // Multiply to normalize microops to resource units.
>    unsigned ResourceLCM;   // Resource units per cycle. Latency normalization factor.
> +
> +  unsigned computeInstrLatency(const MCSchedClassDesc &SCDesc) const;
> +
>  public:
>    TargetSchedModel(): SchedModel(MCSchedModel::GetDefaultSchedModel()), STI(nullptr), TII(nullptr) {}
> 
> 
> Modified: llvm/trunk/lib/CodeGen/TargetSchedule.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetSchedule.cpp?rev=237376&r1=237375&r2=237376&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetSchedule.cpp?rev=237376&r1=237375&r2=237376&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/TargetSchedule.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetSchedule.cpp Thu May 14 13:01:13 2015
> @@ -224,6 +224,19 @@ unsigned TargetSchedModel::computeOperan
>    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");
> 
> @@ -231,16 +244,8 @@ unsigned TargetSchedModel::computeInstrL
>    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");
> 
> Hi Mathias,
> 
> This leaves this assert in a weird state, since Latency is not modified from its initialized value of 0. So the assert will always fire. In this case, it should be modified accordingly and Latency removed. 
> 
> Unless there's another issue here that I'm missing....
No I think this is effectively an assert(0), even before my refactoring. I've turned it into an llvm_unreachable.

- Matthias
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150514/4813b184/attachment.html>


More information about the llvm-commits mailing list