Hi, there.
I want to figure out how the unroll-loop pass is controlled by clang. which option or struct in the source code tell the unroll-loop pass to work or not to work?
include/clang/Basic/CodeGenOptions.def
Hi, there.
I want to figure out how the unroll-loop pass is controlled by clang. which option or struct in the source code tell the unroll-loop pass to work or not to work?
include/clang/Basic/CodeGenOptions.def
For the legacy pass manager (the default), the code can be found in
lib/Transforms/IPO/PassManagerBuilder.cpp, function
PassManagerBuilder::populateModulePassManager
Michael
Hi,
Thanks, I think the option in PassManagerBuilder.cpp controls the loop-unroll pass in llvm. Is there a loop-unroll pass or loop-unroll function in clang that will unroll loops in frontend and the generated llvm IR by clang is the unrolled version? and if there is one, how does clang control it? Thanks in advance. Best regards, Jerry
There is no such "pre-unrolling" in clang. That would be redundant.
clang's -funroll-loops -fno-unroll-loops is translated to the value of
PassManagerBuilder::DisableUnrollLoops
Loop hints such as `#pragma unroll` is translated to metadata:
https://llvm.org/docs/LangRef.html#llvm-loop-unroll
Michael
Hi,
besides unroll, I wonder how clang controls inliner. The inliner computes the Cost and Threshold and makes decision whether to inline.
I modified the OptimizeSize into 100 in CodeGenOptions.def: