LLVM Optimization Using C++ API -


i'm trying figure out how perform optimizations on llvm module (e.g., -o3 optimizations). i've tried following i'm not sure possible optimizations being applied (e.g., inlining).

//take string "llvm" (llvm ir) , return "output_llvm" (optimized llvm ir) static string optimize(string llvm) {     llvmcontext &ctx = getglobalcontext();     smdiagnostic err;     module *ir = parseir(memorybuffer::getmembuffer(llvm), err, ctx);     passmanager *pm = new passmanager();     passmanagerbuilder builder;     builder.optlevel = 3;     builder.populatemodulepassmanager(*pm);     pm->run(*ir);     delete pm;     string output_llvm;     raw_string_ostream buff(output_llvm);     ir->print(buff, null);     return output_llvm; } 

is there else can improve performance of output llvm ir?

edit: have tried add of optimizations addoptimizationpasses() function in opt.cpp, shown below:

passmanager *pm = new passmanager(); int optlevel = 3; int sizelevel = 0; passmanagerbuilder builder; builder.optlevel = optlevel; builder.sizelevel = sizelevel; builder.inliner = createfunctioninliningpass(optlevel, sizelevel); builder.disableunitatatime = false; builder.disableunrollloops = false; builder.loopvectorize = true; builder.slpvectorize = true; builder.populatemodulepassmanager(*pm); pm->run(*module); 

also, create functionpassmanager before create passmanager , add several passes so:

functionpassmanager *fpm = new functionpassmanager(module); // add several passes fpm->doinitialization(); (function &f : *ir)     fpm->run(f); fpm->dofinalization(); 

however, performance same running on command line -o1 whereas can better performance on command line using -o3. suggestions?

follow logic in function addoptimizationpasses in opt.cpp. source of truth.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -