Qiongsi Wu via llvm-dev
2018-Jul-10 22:38 UTC
[llvm-dev] Programmatically Toggle Specific LLVM Optimizations
Hi Michael! Thanks for your reply. I managed to add a small amount of code to PassManager to have this feature implemented. One can now turn off a pass by doing opt -disablepass=licm or clang -mllvm -disablepass=licm to turn off, for example, loop invariant code motion. I programmed the command line option to be really hidden. This maybe a useful thing to have in the trunk for people who want to fine tune the optimizations. Should I submit a patch? I am not sure if my code follows all the best practices of the community, but it is working from my own testing. Thanks again for your help! Qiongsi> On Jun 1, 2018, at 1:16 PM, Michael Kruse <llvmdev at meinersbur.de> wrote: > > Some passes have supported options to disable them, e.g. > -fno-vectorize and -fno-unroll-loops, but there is no general option. > Since it's not useful in general to disable arbitrary options, some > handywork is required. Using the legacy (=default) pass manager here. > > To get the passes that are run: > $ clang -O3 -mllvm -debug-pass=Arguments > > To optimize separately: > $ clang -Xclang -disable-llvm-passes -S -emit-llvm -o - | opt <your > list of passes> | llc > (not tested, so don't expect to work straight out of the box) > > This is not strictly the same as optimizing using clang (pass options > are missing), so there will be performance differences. You could > instead customize PassManagerBuilder::populateModulePassManager() and > PassManagerBuilder::populateFunctionPassManager(). > > Michael
Michael Kruse via llvm-dev
2018-Jul-10 22:49 UTC
[llvm-dev] Programmatically Toggle Specific LLVM Optimizations
Unless you intend to upstream you change (which I encourage you to), there is no need to follow any best practices. If you intend to submit the patch, the code reviews exist to ensure that the best practices are followed. You can avoid the most obvious change requests by considering https://llvm.org/docs/CodingStandards.html . Please note that there is a newer pass manager. You might get feedback to update the that pass manager as well/instead or that your use case is too 'niche' to be useful for others. However, you won't find out before submitting the patch. And the experience might be useful if you intend collaborate to LLVM more often. Michael 2018-07-10 17:38 GMT-05:00 Qiongsi Wu <qiongsi.wu at mail.utoronto.ca>:> Hi Michael! > > Thanks for your reply. I managed to add a small amount of code to PassManager to have this feature implemented. > > One can now turn off a pass by doing > > opt -disablepass=licm or clang -mllvm -disablepass=licm > > to turn off, for example, loop invariant code motion. > > I programmed the command line option to be really hidden. This maybe a useful thing to have in the trunk for people who want to fine tune the optimizations. > > Should I submit a patch? I am not sure if my code follows all the best practices of the community, but it is working from my own testing. > > Thanks again for your help! > > Qiongsi > >> On Jun 1, 2018, at 1:16 PM, Michael Kruse <llvmdev at meinersbur.de> wrote: >> >> Some passes have supported options to disable them, e.g. >> -fno-vectorize and -fno-unroll-loops, but there is no general option. >> Since it's not useful in general to disable arbitrary options, some >> handywork is required. Using the legacy (=default) pass manager here. >> >> To get the passes that are run: >> $ clang -O3 -mllvm -debug-pass=Arguments >> >> To optimize separately: >> $ clang -Xclang -disable-llvm-passes -S -emit-llvm -o - | opt <your >> list of passes> | llc >> (not tested, so don't expect to work straight out of the box) >> >> This is not strictly the same as optimizing using clang (pass options >> are missing), so there will be performance differences. You could >> instead customize PassManagerBuilder::populateModulePassManager() and >> PassManagerBuilder::populateFunctionPassManager(). >> >> Michael >
Qiongsi Wu via llvm-dev
2018-Jul-10 22:52 UTC
[llvm-dev] Programmatically Toggle Specific LLVM Optimizations
Thanks for the fast reply! I will submit a patch and find out! Sincerely, Qiongsi> On Jul 10, 2018, at 6:49 PM, Michael Kruse <llvmdev at meinersbur.de> wrote: > > Unless you intend to upstream you change (which I encourage you to), > there is no need to follow any best practices. If you intend to submit > the patch, the code reviews exist to ensure that the best practices > are followed. You can avoid the most obvious change requests by > considering https://llvm.org/docs/CodingStandards.html . > > Please note that there is a newer pass manager. You might get feedback > to update the that pass manager as well/instead or that your use case > is too 'niche' to be useful for others. However, you won't find out > before submitting the patch. And the experience might be useful if you > intend collaborate to LLVM more often. > > Michael > > > > 2018-07-10 17:38 GMT-05:00 Qiongsi Wu <qiongsi.wu at mail.utoronto.ca>: >> Hi Michael! >> >> Thanks for your reply. I managed to add a small amount of code to PassManager to have this feature implemented. >> >> One can now turn off a pass by doing >> >> opt -disablepass=licm or clang -mllvm -disablepass=licm >> >> to turn off, for example, loop invariant code motion. >> >> I programmed the command line option to be really hidden. This maybe a useful thing to have in the trunk for people who want to fine tune the optimizations. >> >> Should I submit a patch? I am not sure if my code follows all the best practices of the community, but it is working from my own testing. >> >> Thanks again for your help! >> >> Qiongsi >> >>> On Jun 1, 2018, at 1:16 PM, Michael Kruse <llvmdev at meinersbur.de> wrote: >>> >>> Some passes have supported options to disable them, e.g. >>> -fno-vectorize and -fno-unroll-loops, but there is no general option. >>> Since it's not useful in general to disable arbitrary options, some >>> handywork is required. Using the legacy (=default) pass manager here. >>> >>> To get the passes that are run: >>> $ clang -O3 -mllvm -debug-pass=Arguments >>> >>> To optimize separately: >>> $ clang -Xclang -disable-llvm-passes -S -emit-llvm -o - | opt <your >>> list of passes> | llc >>> (not tested, so don't expect to work straight out of the box) >>> >>> This is not strictly the same as optimizing using clang (pass options >>> are missing), so there will be performance differences. You could >>> instead customize PassManagerBuilder::populateModulePassManager() and >>> PassManagerBuilder::populateFunctionPassManager(). >>> >>> Michael >>