From c0950ae99090d13515328eb2f6714fe0e86c28b0 Mon Sep 17 00:00:00 2001 From: Clement Courbet Date: Thu, 8 Nov 2018 11:45:14 +0000 Subject: [llvm-exegesis] Add a snippet generator to generate snippets to compute ROB sizes. llvm-svn: 346394 --- llvm/tools/llvm-exegesis/lib/Assembler.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'llvm/tools/llvm-exegesis/lib/Assembler.cpp') diff --git a/llvm/tools/llvm-exegesis/lib/Assembler.cpp b/llvm/tools/llvm-exegesis/lib/Assembler.cpp index 2e3712ce7dc..b0758d4f8e3 100644 --- a/llvm/tools/llvm-exegesis/lib/Assembler.cpp +++ b/llvm/tools/llvm-exegesis/lib/Assembler.cpp @@ -32,10 +32,19 @@ static constexpr const char FunctionID[] = "foo"; static std::vector generateSnippetSetupCode(const ExegesisTarget &ET, const llvm::MCSubtargetInfo *const MSI, + const unsigned ScratchReg, + llvm::ArrayRef ScratchRegisterCopies, llvm::ArrayRef RegisterInitialValues, bool &IsSnippetSetupComplete) { IsSnippetSetupComplete = true; std::vector Result; + // Copy registers. + for (const unsigned Reg : ScratchRegisterCopies) { + assert(ScratchReg > 0 && "scratch reg copies but no scratch reg"); + const auto CopyRegisterCode = ET.copyReg(*MSI, Reg, ScratchReg); + Result.insert(Result.end(), CopyRegisterCode.begin(), CopyRegisterCode.end()); + } + // Load values in registers. for (const RegisterValue &RV : RegisterInitialValues) { // Load a constant in the register. const auto SetRegisterCode = ET.setRegTo(*MSI, RV.Register, RV.Value); @@ -155,6 +164,7 @@ llvm::BitVector getFunctionReservedRegs(const llvm::TargetMachine &TM) { void assembleToStream(const ExegesisTarget &ET, std::unique_ptr TM, llvm::ArrayRef LiveIns, + llvm::ArrayRef ScratchRegisterCopies, llvm::ArrayRef RegisterInitialValues, llvm::ArrayRef Instructions, llvm::raw_pwrite_stream &AsmStream) { @@ -178,7 +188,7 @@ void assembleToStream(const ExegesisTarget &ET, bool IsSnippetSetupComplete; std::vector Code = - generateSnippetSetupCode(ET, TM->getMCSubtargetInfo(), + generateSnippetSetupCode(ET, TM->getMCSubtargetInfo(), ET.getScratchMemoryRegister(TM->getTargetTriple()), ScratchRegisterCopies, RegisterInitialValues, IsSnippetSetupComplete); Code.insert(Code.end(), Instructions.begin(), Instructions.end()); @@ -199,7 +209,7 @@ void assembleToStream(const ExegesisTarget &ET, llvm::MCContext &MCContext = MMI->getContext(); llvm::legacy::PassManager PM; - llvm::TargetLibraryInfoImpl TLII(llvm::Triple(Module->getTargetTriple())); + llvm::TargetLibraryInfoImpl TLII(Triple(Module->getTargetTriple())); PM.add(new llvm::TargetLibraryInfoWrapperPass(TLII)); llvm::TargetPassConfig *TPC = TM->createPassConfig(PM); -- cgit v1.2.3