Hi Philip,
Thanks for the response. Under llvm-5.0.2 and llvm-6.0.1 in Debug mode, the
crash hit at the same assertion:
/usr/local/include/llvm/IR/PassManager.h:689: typename PassT::Result&
llvm::AnalysisManager<IRUnitT, ExtraArgTs>::getResult(IRUnitT&,
ExtraArgTs
...) [with PassT
llvm::InnerAnalysisManagerProxy<llvm::AnalysisManager<llvm::Loop,
llvm::LoopStandardAnalysisResults&>, llvm::Function>; IRUnitT
llvm::Function; ExtraArgTs = {}; typename PassT::Result
llvm::InnerAnalysisManagerProxy<llvm::AnalysisManager<llvm::Loop,
llvm::LoopStandardAnalysisResults&>, llvm::Function>::Result]:
Assertion
`AnalysisPasses.count(PassT::ID()) && "This analysis pass was not
registered prior to being queried"' failed.
I'm new to llvm optimization and I still don't know which analysis
managers
should be created and populated in this case. Many thanks for any help.
Le mar. 21 août 2018 à 14:00, Philip Pfaffe <philip.pfaffe at gmail.com> a
écrit :
> Can you tell us more about the crash? I.e., do you have a stack dump? Does
> it hit an assertion (if your LLVM is built in Debug mode/has assertions
> enabled)?
>
> Generally, PassBuilder and passes likely assume a full stack of analysis
> managers. You should thus create and populate all of them, not just
> FunctionAM, and cross-register their proxies.
>
> Cheers,
> Philip
>
> On Mon, Aug 20, 2018 at 7:29 PM Ta Thanh Dinh via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> This question has been submitted to stackoverflow (
>>
https://stackoverflow.com/questions/51934964/function-optimization-pass)
>> but someone suggested me that it should be submitted to llvm-dev
mailing
>> list instead. I'm sorry for the duplication.
>>
>> I am trying to use PassBulider and FunctionPassManager to optimize a
>> function in a module, what I have done is:
>>
>>
>> mod = ...load module from LLVM IR bitcode file go_back.bc...
>>
>> auto lift_func = mod->getFunction("go_back");
>> if (not lift_func) {
>>     llvm::errs() << "Error: cannot get function\n";
>>     return 0;
>> }
>>
>> auto pass_builder = llvm::PassBuilder{};
>> auto fa_manager = llvm::FunctionAnalysisManager{};
>>
>> pass_builder.registerFunctionAnalyses(fa_manager);
>> auto fp_manager >>
pass_builder.buildFunctionSimplificationPipeline(llvm::PassBuilder::OptimizationLevel::O2);
>>
>> fp_manager.run(*lift_func, fa_manager);
>>
>> ...print mod...
>>
>>
>> but the program crashes always at fp_manager.run. Strange enough,
LLVM's
>> opt tool (which uses legacy optimization API) works without any
problem,
>> i.e if I run
>>
>> opt -O2 go_back.bc -o go_back_o2.bc
>>
>> then I get a new module where the (single) function go_back is
optimized.
>>
>> Many thanks for any response.
>>
>> NB. The disassembled LLVM bitcode is at
>> https://gist.github.com/tathanhdinh/23470452910da9f73b857b2e6a12f144 if
>> anyone wants to take a look.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20180821/a7e65336/attachment.html>
I've managed somehow to pass the fp_manager.run using:
auto loop_manager = llvm::LoopAnalysisManager{};
auto cgscc_manager = llvm::CGSCCAnalysisManager{};
auto mod_manager = llvm::ModuleAnalysisManager{};
pass_builder.registerModuleAnalyses(mod_manager);
pass_builder.registerCGSCCAnalyses(cgscc_manager);
pass_builder.registerFunctionAnalyses(fa_manager);
pass_builder.registerLoopAnalyses(loop_manager);
pass_builder.crossRegisterProxies(loop_manager, fa_manager, cgscc_manager,
mod_manager);
auto fp_manager
pass_builder.buildFunctionSimplificationPipeline(llvm::PassBuilder::OptimizationLevel::O2,
llvm::PassBuilder::ThinLTOPhase::None, true);
fp_manager.run(*lift_func, fa_manager);
...print module...
but the program still crashes when the object `fa_manager` (of class
FunctionAnalysisManager) is destroyed!!!
Le mar. 21 août 2018 à 14:32, Ta Thanh Dinh <tathanhdinh at gmail.com> a
écrit :
> Hi Philip,
>
> Thanks for the response. Under llvm-5.0.2 and llvm-6.0.1 in Debug mode,
> the crash hit at the same assertion:
>
> /usr/local/include/llvm/IR/PassManager.h:689: typename PassT::Result&
> llvm::AnalysisManager<IRUnitT, ExtraArgTs>::getResult(IRUnitT&,
ExtraArgTs
> ...) [with PassT >
llvm::InnerAnalysisManagerProxy<llvm::AnalysisManager<llvm::Loop,
> llvm::LoopStandardAnalysisResults&>, llvm::Function>; IRUnitT
> llvm::Function; ExtraArgTs = {}; typename PassT::Result >
llvm::InnerAnalysisManagerProxy<llvm::AnalysisManager<llvm::Loop,
> llvm::LoopStandardAnalysisResults&>, llvm::Function>::Result]:
Assertion
> `AnalysisPasses.count(PassT::ID()) && "This analysis pass was
not
> registered prior to being queried"' failed.
>
> I'm new to llvm optimization and I still don't know which analysis
> managers should be created and populated in this case. Many thanks for any
> help.
>
>
> Le mar. 21 août 2018 à 14:00, Philip Pfaffe <philip.pfaffe at
gmail.com> a
> écrit :
>
>> Can you tell us more about the crash? I.e., do you have a stack dump?
>> Does it hit an assertion (if your LLVM is built in Debug mode/has
>> assertions enabled)?
>>
>> Generally, PassBuilder and passes likely assume a full stack of
analysis
>> managers. You should thus create and populate all of them, not just
>> FunctionAM, and cross-register their proxies.
>>
>> Cheers,
>> Philip
>>
>> On Mon, Aug 20, 2018 at 7:29 PM Ta Thanh Dinh via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> This question has been submitted to stackoverflow (
>>>
https://stackoverflow.com/questions/51934964/function-optimization-pass)
>>> but someone suggested me that it should be submitted to llvm-dev
mailing
>>> list instead. I'm sorry for the duplication.
>>>
>>> I am trying to use PassBulider and FunctionPassManager to optimize
a
>>> function in a module, what I have done is:
>>>
>>>
>>> mod = ...load module from LLVM IR bitcode file go_back.bc...
>>>
>>> auto lift_func = mod->getFunction("go_back");
>>> if (not lift_func) {
>>>     llvm::errs() << "Error: cannot get function\n";
>>>     return 0;
>>> }
>>>
>>> auto pass_builder = llvm::PassBuilder{};
>>> auto fa_manager = llvm::FunctionAnalysisManager{};
>>>
>>> pass_builder.registerFunctionAnalyses(fa_manager);
>>> auto fp_manager >>>
pass_builder.buildFunctionSimplificationPipeline(llvm::PassBuilder::OptimizationLevel::O2);
>>>
>>> fp_manager.run(*lift_func, fa_manager);
>>>
>>> ...print mod...
>>>
>>>
>>> but the program crashes always at fp_manager.run. Strange enough,
LLVM's
>>> opt tool (which uses legacy optimization API) works without any
problem,
>>> i.e if I run
>>>
>>> opt -O2 go_back.bc -o go_back_o2.bc
>>>
>>> then I get a new module where the (single) function go_back is
optimized.
>>>
>>> Many thanks for any response.
>>>
>>> NB. The disassembled LLVM bitcode is at
>>>
https://gist.github.com/tathanhdinh/23470452910da9f73b857b2e6a12f144 if
>>> anyone wants to take a look.
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20180821/563cd2e2/attachment.html>
The managers need to be created in a specific order. I recommend checking out how the opt tool sets up its pipeline. Specifically the implementation of `llvm::runPassPipeline`. Cheers, Philip On Tue, Aug 21, 2018 at 7:38 PM Ta Thanh Dinh <tathanhdinh at gmail.com> wrote:> I've managed somehow to pass the fp_manager.run using: > > auto loop_manager = llvm::LoopAnalysisManager{}; > auto cgscc_manager = llvm::CGSCCAnalysisManager{}; > auto mod_manager = llvm::ModuleAnalysisManager{}; > > pass_builder.registerModuleAnalyses(mod_manager); > pass_builder.registerCGSCCAnalyses(cgscc_manager); > pass_builder.registerFunctionAnalyses(fa_manager); > pass_builder.registerLoopAnalyses(loop_manager); > pass_builder.crossRegisterProxies(loop_manager, fa_manager, cgscc_manager, > mod_manager); > > auto fp_manager > pass_builder.buildFunctionSimplificationPipeline(llvm::PassBuilder::OptimizationLevel::O2, > llvm::PassBuilder::ThinLTOPhase::None, true); > > fp_manager.run(*lift_func, fa_manager); > > ...print module... > > but the program still crashes when the object `fa_manager` (of class > FunctionAnalysisManager) is destroyed!!! > > Le mar. 21 août 2018 à 14:32, Ta Thanh Dinh <tathanhdinh at gmail.com> a > écrit : > >> Hi Philip, >> >> Thanks for the response. Under llvm-5.0.2 and llvm-6.0.1 in Debug mode, >> the crash hit at the same assertion: >> >> /usr/local/include/llvm/IR/PassManager.h:689: typename PassT::Result& >> llvm::AnalysisManager<IRUnitT, ExtraArgTs>::getResult(IRUnitT&, ExtraArgTs >> ...) [with PassT >> llvm::InnerAnalysisManagerProxy<llvm::AnalysisManager<llvm::Loop, >> llvm::LoopStandardAnalysisResults&>, llvm::Function>; IRUnitT >> llvm::Function; ExtraArgTs = {}; typename PassT::Result >> llvm::InnerAnalysisManagerProxy<llvm::AnalysisManager<llvm::Loop, >> llvm::LoopStandardAnalysisResults&>, llvm::Function>::Result]: Assertion >> `AnalysisPasses.count(PassT::ID()) && "This analysis pass was not >> registered prior to being queried"' failed. >> >> I'm new to llvm optimization and I still don't know which analysis >> managers should be created and populated in this case. Many thanks for any >> help. >> >> >> Le mar. 21 août 2018 à 14:00, Philip Pfaffe <philip.pfaffe at gmail.com> a >> écrit : >> >>> Can you tell us more about the crash? I.e., do you have a stack dump? >>> Does it hit an assertion (if your LLVM is built in Debug mode/has >>> assertions enabled)? >>> >>> Generally, PassBuilder and passes likely assume a full stack of analysis >>> managers. You should thus create and populate all of them, not just >>> FunctionAM, and cross-register their proxies. >>> >>> Cheers, >>> Philip >>> >>> On Mon, Aug 20, 2018 at 7:29 PM Ta Thanh Dinh via llvm-dev < >>> llvm-dev at lists.llvm.org> wrote: >>> >>>> This question has been submitted to stackoverflow ( >>>> https://stackoverflow.com/questions/51934964/function-optimization-pass) >>>> but someone suggested me that it should be submitted to llvm-dev mailing >>>> list instead. I'm sorry for the duplication. >>>> >>>> I am trying to use PassBulider and FunctionPassManager to optimize a >>>> function in a module, what I have done is: >>>> >>>> >>>> mod = ...load module from LLVM IR bitcode file go_back.bc... >>>> >>>> auto lift_func = mod->getFunction("go_back"); >>>> if (not lift_func) { >>>> llvm::errs() << "Error: cannot get function\n"; >>>> return 0; >>>> } >>>> >>>> auto pass_builder = llvm::PassBuilder{}; >>>> auto fa_manager = llvm::FunctionAnalysisManager{}; >>>> >>>> pass_builder.registerFunctionAnalyses(fa_manager); >>>> auto fp_manager >>>> pass_builder.buildFunctionSimplificationPipeline(llvm::PassBuilder::OptimizationLevel::O2); >>>> >>>> fp_manager.run(*lift_func, fa_manager); >>>> >>>> ...print mod... >>>> >>>> >>>> but the program crashes always at fp_manager.run. Strange enough, >>>> LLVM's opt tool (which uses legacy optimization API) works without any >>>> problem, i.e if I run >>>> >>>> opt -O2 go_back.bc -o go_back_o2.bc >>>> >>>> then I get a new module where the (single) function go_back is >>>> optimized. >>>> >>>> Many thanks for any response. >>>> >>>> NB. The disassembled LLVM bitcode is at >>>> https://gist.github.com/tathanhdinh/23470452910da9f73b857b2e6a12f144 >>>> if anyone wants to take a look. >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> llvm-dev at lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >>>> >>>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180826/c9f55066/attachment.html>