[LLVMdev] Line number and merged calls

nicolas geoffray
2010-02-13T16:19:36Z

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>