mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 12:19:53 +00:00
Initialize/Register LTO passes to enable flags like -print-after=<lto-pass>
There already have two "dead" functions, initialize{IPO|IPA}, defined for similar purpose. I decide not to call these two functions for two reasons: o. they don't cover all LTO passes (which will soon be separated into IPO and post-IPO passes) o. We have not yet figured out the right passes and the ordering for IPO and post-IPO stages, meaning this change is only for the time being. Since LTO passes are registered, we are now able to print IR before and after particular point. For OSX users: -------------- "...-Wl,-mllvm -Wl,-print-after=<pass-name>" will print IR after the specified pass. For Other UNIX with GNU gold linker: ------------------------------------ "-Wl,-plugin-opt=-print-after=<pass-name>" should work. (NOTE: no need for "-Wl,-mllvm") Strip "-Wl," if flags are fed directly to linker instead of clang/clang++. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186853 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f01742d03f
commit
8945f753ed
@ -24,6 +24,7 @@
|
|||||||
#include "llvm/IR/DerivedTypes.h"
|
#include "llvm/IR/DerivedTypes.h"
|
||||||
#include "llvm/IR/LLVMContext.h"
|
#include "llvm/IR/LLVMContext.h"
|
||||||
#include "llvm/IR/Module.h"
|
#include "llvm/IR/Module.h"
|
||||||
|
#include "llvm/InitializePasses.h"
|
||||||
#include "llvm/Linker.h"
|
#include "llvm/Linker.h"
|
||||||
#include "llvm/MC/MCAsmInfo.h"
|
#include "llvm/MC/MCAsmInfo.h"
|
||||||
#include "llvm/MC/MCContext.h"
|
#include "llvm/MC/MCContext.h"
|
||||||
@ -77,6 +78,7 @@ LTOCodeGenerator::LTOCodeGenerator()
|
|||||||
InitializeAllTargets();
|
InitializeAllTargets();
|
||||||
InitializeAllTargetMCs();
|
InitializeAllTargetMCs();
|
||||||
InitializeAllAsmPrinters();
|
InitializeAllAsmPrinters();
|
||||||
|
initializeLTOPasses();
|
||||||
}
|
}
|
||||||
|
|
||||||
LTOCodeGenerator::~LTOCodeGenerator() {
|
LTOCodeGenerator::~LTOCodeGenerator() {
|
||||||
@ -89,6 +91,36 @@ LTOCodeGenerator::~LTOCodeGenerator() {
|
|||||||
free(*I);
|
free(*I);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize LTO passes. Please keep this funciton in sync with
|
||||||
|
// PassManagerBuilder::populateLTOPassManager(), and make sure all LTO
|
||||||
|
// passes are initialized.
|
||||||
|
//
|
||||||
|
void LTOCodeGenerator::initializeLTOPasses() {
|
||||||
|
PassRegistry &R = *PassRegistry::getPassRegistry();
|
||||||
|
|
||||||
|
initializeInternalizePassPass(R);
|
||||||
|
initializeIPSCCPPass(R);
|
||||||
|
initializeGlobalOptPass(R);
|
||||||
|
initializeConstantMergePass(R);
|
||||||
|
initializeDAHPass(R);
|
||||||
|
initializeInstCombinerPass(R);
|
||||||
|
initializeSimpleInlinerPass(R);
|
||||||
|
initializePruneEHPass(R);
|
||||||
|
initializeGlobalDCEPass(R);
|
||||||
|
initializeArgPromotionPass(R);
|
||||||
|
initializeJumpThreadingPass(R);
|
||||||
|
initializeSROAPass(R);
|
||||||
|
initializeSROA_DTPass(R);
|
||||||
|
initializeSROA_SSAUpPass(R);
|
||||||
|
initializeFunctionAttrsPass(R);
|
||||||
|
initializeGlobalsModRefPass(R);
|
||||||
|
initializeLICMPass(R);
|
||||||
|
initializeGVNPass(R);
|
||||||
|
initializeMemCpyOptPass(R);
|
||||||
|
initializeDCEPass(R);
|
||||||
|
initializeCFGSimplifyPassPass(R);
|
||||||
|
}
|
||||||
|
|
||||||
bool LTOCodeGenerator::addModule(LTOModule* mod, std::string& errMsg) {
|
bool LTOCodeGenerator::addModule(LTOModule* mod, std::string& errMsg) {
|
||||||
bool ret = _linker.linkInModule(mod->getLLVVMModule(), &errMsg);
|
bool ret = _linker.linkInModule(mod->getLLVVMModule(), &errMsg);
|
||||||
|
|
||||||
|
@ -56,6 +56,8 @@ struct LTOCodeGenerator {
|
|||||||
void setCodeGenDebugOptions(const char *opts);
|
void setCodeGenDebugOptions(const char *opts);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void initializeLTOPasses();
|
||||||
|
|
||||||
bool generateObjectFile(llvm::raw_ostream &out, std::string &errMsg);
|
bool generateObjectFile(llvm::raw_ostream &out, std::string &errMsg);
|
||||||
void applyScopeRestrictions();
|
void applyScopeRestrictions();
|
||||||
void applyRestriction(llvm::GlobalValue &GV,
|
void applyRestriction(llvm::GlobalValue &GV,
|
||||||
|
Loading…
Reference in New Issue
Block a user