[llvm-dev] opt, non-machine specific optimizations and passBuilder resulting in malformed block

alexp via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 26 04:59:40 PST 2019


Hi,

I operate on IR, which should later-on be lowered on different target
machines. Due to the generation of the IR via partly random processes, I
have lots of ineffective instruction in there.

Every now and then i'd like to cut back all the fuzz.
I can do this e.g. via opt -o3 -S input.ll -o output.ll
which however applies machine dependent optimizations.

What would be the 'simplify as much as possible without machine
dependent stuff' approach using opt?


Another option instead of the commandline opt would be to use the (new)
passbuilder. As a starter, I tried to apply the PerModuleDefaultPipeline.
My Idea was that I could later reduce this to only applying
buildModuleSimplificationPipeline etc.
However, the following results in a transformed .bc file, for which
llvm-dis reports 'malformed block'.

I can not figure out whats the problem here.
Also, the verifierPass does not report any problems (might be because I
add it too late)?

What am I missing here?

Thanks!
Alex


llvm::PassBuilder passBuilder;

LoopAnalysisManager LAM;
FunctionAnalysisManager FAM;
CGSCCAnalysisManager CGAM;
ModuleAnalysisManager MAM;

// Register all the basic analyses with the managers.
passBuilder.registerModuleAnalyses(MAM);
passBuilder.registerCGSCCAnalyses(CGAM);
passBuilder.registerFunctionAnalyses(FAM);
passBuilder.registerLoopAnalyses(LAM);
passBuilder.crossRegisterProxies(LAM, FAM, CGAM, MAM);


ModulePassManager
MPM=passBuilder.buildPerModuleDefaultPipeline(llvm::PassBuilder::OptimizationLevel::O1,
false); //debug logging=false
MPM.addPass(VerifierPass());

MPM.run(rM, MAM);
dses::write_BCFromP(&rM,"trafo.bc");


More information about the llvm-dev mailing list