summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-mca
diff options
context:
space:
mode:
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-03-23 11:50:43 +0000
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>2018-03-23 11:50:43 +0000
commitb5088da452d82a11e9f0f518df100e440d7266d6 (patch)
treeea5d784471b5fc11a841a9fada01880cc2f3130d /llvm/tools/llvm-mca
parent29538c6ddbdc74889d2f76bb4f710782e39989b3 (diff)
downloadbcm5719-llvm-b5088da452d82a11e9f0f518df100e440d7266d6.tar.gz
bcm5719-llvm-b5088da452d82a11e9f0f518df100e440d7266d6.zip
[llvm-mca] Pass the InstrBuilder to the constructor of Backend.
This is done in preparation for the fix for PR36784. No functional change. llvm-svn: 328306
Diffstat (limited to 'llvm/tools/llvm-mca')
-rw-r--r--llvm/tools/llvm-mca/Backend.cpp2
-rw-r--r--llvm/tools/llvm-mca/Backend.h10
-rw-r--r--llvm/tools/llvm-mca/llvm-mca.cpp6
3 files changed, 10 insertions, 8 deletions
diff --git a/llvm/tools/llvm-mca/Backend.cpp b/llvm/tools/llvm-mca/Backend.cpp
index 94edf873ed4..d0afa45461c 100644
--- a/llvm/tools/llvm-mca/Backend.cpp
+++ b/llvm/tools/llvm-mca/Backend.cpp
@@ -34,7 +34,7 @@ void Backend::runCycle(unsigned Cycle) {
while (SM.hasNext()) {
InstRef IR = SM.peekNext();
std::unique_ptr<Instruction> NewIS =
- IB->createInstruction(IR.first, *IR.second);
+ IB.createInstruction(IR.first, *IR.second);
const InstrDesc &Desc = NewIS->getDesc();
if (!DU->isAvailable(Desc.NumMicroOps) ||
!DU->canDispatch(IR.first, *NewIS))
diff --git a/llvm/tools/llvm-mca/Backend.h b/llvm/tools/llvm-mca/Backend.h
index 027850ecba5..902327ac625 100644
--- a/llvm/tools/llvm-mca/Backend.h
+++ b/llvm/tools/llvm-mca/Backend.h
@@ -47,7 +47,7 @@ class HWStallEvent;
class Backend {
const llvm::MCSubtargetInfo &STI;
- std::unique_ptr<InstrBuilder> IB;
+ InstrBuilder &IB;
std::unique_ptr<Scheduler> HWS;
std::unique_ptr<DispatchUnit> DU;
SourceMgr &SM;
@@ -59,12 +59,12 @@ class Backend {
void runCycle(unsigned Cycle);
public:
- Backend(const llvm::MCSubtargetInfo &Subtarget, const llvm::MCInstrInfo &MCII,
- const llvm::MCRegisterInfo &MRI, SourceMgr &Source,
+ Backend(const llvm::MCSubtargetInfo &Subtarget,
+ const llvm::MCRegisterInfo &MRI, InstrBuilder &B, SourceMgr &Source,
unsigned DispatchWidth = 0, unsigned RegisterFileSize = 0,
unsigned MaxRetirePerCycle = 0, unsigned LoadQueueSize = 0,
unsigned StoreQueueSize = 0, bool AssumeNoAlias = false)
- : STI(Subtarget),
+ : STI(Subtarget), IB(B),
HWS(llvm::make_unique<Scheduler>(this, Subtarget.getSchedModel(),
LoadQueueSize, StoreQueueSize,
AssumeNoAlias)),
@@ -72,7 +72,6 @@ public:
this, MRI, Subtarget.getSchedModel().MicroOpBufferSize,
RegisterFileSize, MaxRetirePerCycle, DispatchWidth, HWS.get())),
SM(Source), Cycles(0) {
- IB = llvm::make_unique<InstrBuilder>(Subtarget, MCII);
HWS->setDispatchUnit(DU.get());
}
@@ -98,7 +97,6 @@ public:
void notifyReleasedBuffers(llvm::ArrayRef<unsigned> Buffers);
void notifyCycleEnd(unsigned Cycle);
};
-
} // namespace mca
#endif
diff --git a/llvm/tools/llvm-mca/llvm-mca.cpp b/llvm/tools/llvm-mca/llvm-mca.cpp
index 0ae9c8849bb..5c085af9685 100644
--- a/llvm/tools/llvm-mca/llvm-mca.cpp
+++ b/llvm/tools/llvm-mca/llvm-mca.cpp
@@ -321,8 +321,12 @@ int main(int argc, char **argv) {
if (DispatchWidth)
Width = DispatchWidth;
+ // Create an instruction builder.
+ std::unique_ptr<mca::InstrBuilder> IB =
+ llvm::make_unique<mca::InstrBuilder>(*STI, *MCII);
+
std::unique_ptr<mca::Backend> B = llvm::make_unique<mca::Backend>(
- *STI, *MCII, *MRI, *S, Width, RegisterFileSize, MaxRetirePerCycle,
+ *STI, *MRI, *IB, *S, Width, RegisterFileSize, MaxRetirePerCycle,
LoadQueueSize, StoreQueueSize, AssumeNoAlias);
std::unique_ptr<mca::BackendPrinter> Printer =
OpenPOWER on IntegriCloud