forked from OSchip/llvm-project
MC: Remove the copy of MCSchedModel in MCSubtargetInfo
`MCSchedModel` is large. Make `MCSchedModel::GetDefaultSchedModel()` return by-reference instead of by-value, so we can store a pointer in `MCSubtargetInfo::CPUSchedModel` instead of a copy. Note: since `MCSchedModel` is POD, this doesn't create a static constructor. llvm-svn: 241947
This commit is contained in:
parent
8b984d19f2
commit
f862f87ff2
|
@ -224,25 +224,9 @@ struct MCSchedModel {
|
|||
return &SchedClassTable[SchedClassIdx];
|
||||
}
|
||||
|
||||
// /\brief Returns a default initialized model. Used for unknown processors.
|
||||
static MCSchedModel GetDefaultSchedModel() {
|
||||
MCSchedModel Ret = { DefaultIssueWidth,
|
||||
DefaultMicroOpBufferSize,
|
||||
DefaultLoopMicroOpBufferSize,
|
||||
DefaultLoadLatency,
|
||||
DefaultHighLatency,
|
||||
DefaultMispredictPenalty,
|
||||
false,
|
||||
true,
|
||||
0,
|
||||
nullptr,
|
||||
nullptr,
|
||||
0,
|
||||
0,
|
||||
nullptr
|
||||
};
|
||||
return Ret;
|
||||
}
|
||||
/// Returns the default initialized model.
|
||||
static const MCSchedModel &GetDefaultSchedModel() { return Default; }
|
||||
static const MCSchedModel Default;
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
|
|
@ -37,7 +37,7 @@ class MCSubtargetInfo {
|
|||
const MCWriteProcResEntry *WriteProcResTable;
|
||||
const MCWriteLatencyEntry *WriteLatencyTable;
|
||||
const MCReadAdvanceEntry *ReadAdvanceTable;
|
||||
MCSchedModel CPUSchedModel;
|
||||
const MCSchedModel *CPUSchedModel;
|
||||
|
||||
const InstrStage *Stages; // Instruction itinerary stages
|
||||
const unsigned *OperandCycles; // Itinerary operand cycles
|
||||
|
@ -99,11 +99,10 @@ public:
|
|||
|
||||
/// getSchedModelForCPU - Get the machine model of a CPU.
|
||||
///
|
||||
MCSchedModel getSchedModelForCPU(StringRef CPU) const;
|
||||
const MCSchedModel &getSchedModelForCPU(StringRef CPU) const;
|
||||
|
||||
/// getSchedModel - Get the machine model for this subtarget's CPU.
|
||||
///
|
||||
const MCSchedModel &getSchedModel() const { return CPUSchedModel; }
|
||||
/// Get the machine model for this subtarget's CPU.
|
||||
const MCSchedModel &getSchedModel() const { return *CPUSchedModel; }
|
||||
|
||||
/// Return an iterator at the first process resource consumed by the given
|
||||
/// scheduling class.
|
||||
|
|
|
@ -28,6 +28,7 @@ add_llvm_library(LLVMMC
|
|||
MCObjectStreamer.cpp
|
||||
MCObjectWriter.cpp
|
||||
MCRegisterInfo.cpp
|
||||
MCSchedule.cpp
|
||||
MCSection.cpp
|
||||
MCSectionCOFF.cpp
|
||||
MCSectionELF.cpp
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
//===- MCSchedule.cpp - Scheduling ------------------------------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines the default scheduling model.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/MC/MCSchedule.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
static_assert(std::is_pod<MCSchedModel>::value,
|
||||
"We shouldn't have a static constructor here");
|
||||
const MCSchedModel MCSchedModel::Default = {DefaultIssueWidth,
|
||||
DefaultMicroOpBufferSize,
|
||||
DefaultLoopMicroOpBufferSize,
|
||||
DefaultLoadLatency,
|
||||
DefaultHighLatency,
|
||||
DefaultMispredictPenalty,
|
||||
false,
|
||||
true,
|
||||
0,
|
||||
nullptr,
|
||||
nullptr,
|
||||
0,
|
||||
0,
|
||||
nullptr};
|
|
@ -29,9 +29,9 @@ MCSubtargetInfo::InitMCProcessorInfo(StringRef CPU, StringRef FS) {
|
|||
void
|
||||
MCSubtargetInfo::InitCPUSchedModel(StringRef CPU) {
|
||||
if (!CPU.empty())
|
||||
CPUSchedModel = getSchedModelForCPU(CPU);
|
||||
CPUSchedModel = &getSchedModelForCPU(CPU);
|
||||
else
|
||||
CPUSchedModel = MCSchedModel::GetDefaultSchedModel();
|
||||
CPUSchedModel = &MCSchedModel::GetDefaultSchedModel();
|
||||
}
|
||||
|
||||
void MCSubtargetInfo::InitMCSubtargetInfo(
|
||||
|
@ -82,8 +82,7 @@ FeatureBitset MCSubtargetInfo::ApplyFeatureFlag(StringRef FS) {
|
|||
return FeatureBits;
|
||||
}
|
||||
|
||||
MCSchedModel
|
||||
MCSubtargetInfo::getSchedModelForCPU(StringRef CPU) const {
|
||||
const MCSchedModel &MCSubtargetInfo::getSchedModelForCPU(StringRef CPU) const {
|
||||
assert(ProcSchedModels && "Processor machine model not available!");
|
||||
|
||||
unsigned NumProcs = ProcDesc.size();
|
||||
|
@ -116,6 +115,6 @@ MCSubtargetInfo::getInstrItineraryForCPU(StringRef CPU) const {
|
|||
|
||||
/// Initialize an InstrItineraryData instance.
|
||||
void MCSubtargetInfo::initInstrItins(InstrItineraryData &InstrItins) const {
|
||||
InstrItins =
|
||||
InstrItineraryData(CPUSchedModel, Stages, OperandCycles, ForwardingPaths);
|
||||
InstrItins = InstrItineraryData(getSchedModel(), Stages, OperandCycles,
|
||||
ForwardingPaths);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue