Dear all,<div><br></div><div>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:</div>
<div><br></div><div>BB1:</div><div>  do virtual call on obj1 !dbg (line 1)</div><div>  branch BB3</div><div><br></div><div>BB2:</div><div>  do virtual call on obj2 !dbg (line 2)</div><div>  branch BB3</div><div><br></div>
<div>BB3:</div><div>  do something</div><div><br></div><div>The LLVM JIT generates something that looks similar to this code:</div><div><br></div><div>BB1:</div><div>   place arguments in registers and stack</div><div>   place function to call in register R1</div>
<div>   branch BB3</div><div><br></div><div>BB2:</div><div><div>  place arguments in registers and stack</div><div>  place function to call in register R1</div><div>  branch BB3</div><div><br></div><div>BB3:</div><div>  call R1 !dbg (line 1)      <------ what about line 2?</div>
<div>  do something</div><div><br></div><div>That's with standard codegen. "Fast" codegen does not perform this optimization.</div><div><br></div><div>Is this a bug with respect to accurate line number information with optimizations? If not, is there a way to disable this optimization?</div>
<div><br></div><div>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?</div><div><br></div>
<div>Thanks!</div><div>Nicolas</div></div>