Hi, I am planning to use LLVM for a compiler validation project that checks if the optimized version of the code is the correct translation of the unoptimized code. And I have a couple of questions. I need two pieces of information from the compiler: 1) Some kind of mapping between the structure of the unoptimized and optimized code. It seems, that can be obtained via the llvm.dbg.stoppoint intrinsic functions. 2) Mapping between the variables of the source code (or unoptimized LLVM code) and the variables/registers in the optimized code. My understanding is that such mapping could be a part of the debug information, but has not been implemented yet. It seems that LLVM symbol table is not designed to keep such information either. Any suggestions on how to obtain this mapping? As a side note, does anyone have examples of tail call elimination performed with debugging information enabled? It seems that it should be possible according to the Source Level Debugging with LLVM: "you get accurate stack traces despite tail call elimination and inlining),". However, in my examples, %llvm.dbg.stoppoint and %llvm.dbg.region.end get inserted between the tail call and the return statement, which stop tailcallelim unless I remove them manually. Thank you for your help, Anna.
On Fri, 29 Jul 2005, Anna Zaks wrote:> I am planning to use LLVM for a compiler validation > project that checks if the optimized version of the > code is the correct translation of the unoptimized > code. And I have a couple of questions.ok> I need two pieces of information from the compiler: > > 1) Some kind of mapping between the structure of the > unoptimized and optimized code. It seems, that can be > obtained via the llvm.dbg.stoppoint intrinsic > functions.This is very hard.> 2) Mapping between the variables of the source code > (or unoptimized LLVM code) and the > variables/registers in the optimized code. My > understanding is that such mapping could be a part of > the debug information, but has not been implemented > yet. It seems that LLVM symbol table is not designed > to keep such information either. > Any suggestions on how to obtain this mapping?Not really. You could implement debug info, that's really the only way to get what you want.> As a side note, does anyone have examples of tail call > elimination performed with debugging information > enabled? It seems that it should be possible according > to the Source Level Debugging with LLVM: > "you get accurate stack traces despite tail call > elimination and inlining),". However, in my examples, > %llvm.dbg.stoppoint and %llvm.dbg.region.end get > inserted between the tail call and the return > statement, which stop tailcallelim unless I remove > them manually.I haven't tried it with tail call elim, though inlining certainly works. -Chris -- http://nondot.org/sabre/ http://llvm.org/
Possibly Parallel Threads
- [LLVMdev] A few more questions about DIFactory and source-level debugging.
- [LLVMdev] llvm-gcc: missing dbg.declare/dbg.stoppoint at optimization level > O0
- [LLVMdev] llvm-gcc: missing dbg.declare/dbg.stoppoint at optimization level > O0
- [LLVMdev] Some questions on the output formats of AliasSetTracker
- [LLVMdev] llvm-gcc: missing dbg.declare/dbg.stoppoint at optimization level > O0