[LLVMdev] Line number and merged calls
nicolas geoffray
nicolas.geoffray at gmail.com
Sat Feb 13 08:19:36 PST 2010
Dear all,
I'm having an issue with line number information in LLVM IR. Apparently
codegen is merging two calls (with different line numbers) into one. This is
not a GVN optimization: the calls are different, and are virtual calls. The
optimization does not generate wrong code., it just invalidates accurate
line number information. Briefly, the IR looks like this:
BB1:
do virtual call on obj1 !dbg (line 1)
branch BB3
BB2:
do virtual call on obj2 !dbg (line 2)
branch BB3
BB3:
do something
The LLVM JIT generates something that looks similar to this code:
BB1:
place arguments in registers and stack
place function to call in register R1
branch BB3
BB2:
place arguments in registers and stack
place function to call in register R1
branch BB3
BB3:
call R1 !dbg (line 1) <------ what about line 2?
do something
That's with standard codegen. "Fast" codegen does not perform this
optimization.
Is this a bug with respect to accurate line number information with
optimizations? If not, is there a way to disable this optimization?
I browsed the source code to find out where this optimization occurs during
code generation, but couldn't find anything. Can someone point me where this
optimization is performed?
Thanks!
Nicolas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100213/c2a85e04/attachment.html>
More information about the llvm-dev
mailing list