From ef77421142fbd07ab0b584cb5eb3b902666a745f Mon Sep 17 00:00:00 2001 From: Ruobing Han Date: Wed, 7 Sep 2022 20:17:34 -0400 Subject: [PATCH] add back O3 optimization in kernelTranslator --- .../KernelTranslation/src/x86/init.cpp | 4 ++ .../KernelTranslation/src/x86/performance.cpp | 39 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/compilation/KernelTranslation/src/x86/init.cpp b/compilation/KernelTranslation/src/x86/init.cpp index 773ba9e..4b80064 100644 --- a/compilation/KernelTranslation/src/x86/init.cpp +++ b/compilation/KernelTranslation/src/x86/init.cpp @@ -104,6 +104,10 @@ bool inline_func_with_tid(llvm::Module *M) { InlineFunctionInfo IFI; InlineFunction(*c, IFI); } + for (auto f : need_remove) { + f->dropAllReferences(); + f->eraseFromParent(); + } return changed; } diff --git a/compilation/KernelTranslation/src/x86/performance.cpp b/compilation/KernelTranslation/src/x86/performance.cpp index 8d22abd..e583ae1 100644 --- a/compilation/KernelTranslation/src/x86/performance.cpp +++ b/compilation/KernelTranslation/src/x86/performance.cpp @@ -47,5 +47,42 @@ void performance_optimization(llvm::Module *M) { } } } - return; + llvm::legacy::PassManager Passes; + + // add target machine info + llvm::Triple triple("x86_64-unknown-linux-gnu"); + + std::string Error; + const Target *TheTarget = TargetRegistry::lookupTarget("", triple, Error); + if (!TheTarget) { + printf("Error: %s\n", Error.c_str()); + assert(0); + } + llvm::TargetOptions Options; + Options.FloatABIType = FloatABI::Hard; + + TargetMachine *TM = TheTarget->createTargetMachine( + triple.getTriple(), llvm::sys::getHostCPUName().str(), StringRef("+m,+f"), + Options, Reloc::PIC_, CodeModel::Small, CodeGenOpt::Aggressive); + assert(TM && "No Machine Information\n"); + + Passes.add(createTargetTransformInfoWrapperPass(TM->getTargetIRAnalysis())); + + TargetLibraryInfoImpl TLII(triple); + TLII.disableAllFunctions(); + Passes.add(new TargetLibraryInfoWrapperPass(TLII)); + + // Add O3 optimization + llvm::PassManagerBuilder Builder; + Builder.OptLevel = 3; + Builder.SizeLevel = 0; + + Builder.LoopVectorize = true; + Builder.SLPVectorize = true; + + Builder.VerifyInput = true; + Builder.VerifyOutput = true; + + Builder.populateModulePassManager(Passes); + Passes.run(*M); }