[llvm-dev] Understanding LLVM Optimization (Rpass=inline) (original) (raw)
Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Tue Sep 4 10:32:59 PDT 2018
- Previous message: [llvm-dev] Understanding LLVM Optimization (Rpass=inline)
- Next message: [llvm-dev] Is it possible to execute Objective-C code via LLVM JIT?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 9/3/2018 11:20 AM, praveen via llvm-dev wrote:
Dear LLVM community :-) I'm a novice in compiler principles and optimization, I'm currently working with some example code to see what && how LLVM optimization is doing to generate good machine code. While working I find some functions are being inlined by llvm and some are not, but I don't know the internals of optimization so I can't able to figure the reasons and rationale behind them. For example: struct value{ int set(){} // Function does nothing!
Pay attention to the compiler warnings... in particular, this triggers "warning: control reaches end of non-void function", which substantially changes the generated code.
Sometimes the compiler can eliminate a call to a function without actually "inlining" it; if a call has no side effects, and the result is unused, it will be erased because it's dead. LLVM currently doesn't emit a remark when this happens.
Could you please share some pointers (videos or blogs) which explains the design of llvm optimizations :-). And also what is mean by /cost and threshold in inlining functions?//like (cost=always and cost=never). // /
The "cost" is roughly how expensive it would be to inline the function in question, in terms of codesize. The units don't really mean anything in particular, but a simple instruction is roughly 5 units. Always/never are overrides to say the function in question should always/never be inlined; for example, if a function is marked with attribute((always_inline)) or __attribute((noinline)).
//
Next, Clang documentation (here <https://clang.llvm.org/docs/UsersManual.html#cmdoption-wambiguous-member-template>) mentions that -/Wambiguous-member-template/ warning is defaulted to on. But when I actually compile the same code as in documentation it doesn't throw up any warnings. Is the documentation is out-dated for clang 8.0.0 ?
I think the warning only triggers with -std=c++03, because the rules changed in C++11. Maybe the documentation should be clarified.
-Eli
-- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180904/8baced5a/attachment.html>
- Previous message: [llvm-dev] Understanding LLVM Optimization (Rpass=inline)
- Next message: [llvm-dev] Is it possible to execute Objective-C code via LLVM JIT?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]