Internal API Changes

Hi,
I saw your update regarding "The DIBuilder interface used by front ends to encode debugging information in the LLVM IR now expects clients to use DIBuilder::finalize() at the end of translation unit to complete debugging information encoding"
Does it mean that in the new version you defer emission of some debug info until the translation is finished and this is a reason to use DIBuilder::finilize?

Hi,
I saw your update regarding "The DIBuilder interface used by front ends to encode debugging information in the LLVM IR now expects clients to use DIBuilder::finalize() at the end of translation unit to complete debugging information encoding"
Does it mean that in the new version you defer emission of some debug info until the translation is finished and this is a reason to use DIBuilder::finilize?

Before this change, each type, subprogram and global variable information used to refer compile unit directly. Now, the compile unit keeps track of all these info directly. The compile unit MDNode is updated in the ::finalize() with list of types, subprograms etc…

So, I just sync’d to LLVM tip and added the call to DIBuilder::finalize(). But even with that change I am getting an error when I try to run llc:

Assertion failed: (TheCU && “Unable to find compile unit!”), function endFunction, file /Users/talin/Projects/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp, line 1306.

And looking at the .bc dissassembly, I see there are indeed compile unit MDNodes, although at this level I can’t tell if they are hooked up correctly.

Hi Talin,

So, I just sync'd to LLVM tip and added the call to DIBuilder::finalize(). But
even with that change I am getting an error when I try to run llc:

Assertion failed: (TheCU && "Unable to find compile unit!"), function
endFunction, file
/Users/talin/Projects/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp, line 1306.

And looking at the .bc dissassembly, I see there are indeed compile unit
MDNodes, although at this level I can't tell if they are hooked up correctly.

you might want to take a look at this llvm-gcc commit:

r137753 | dpatel | 2011-08-16 23:03:26 +0200 (Tue, 16 Aug 2011) | 3 lines

DIBuilder is moving forward to reduce in memory use by MDNodes. However, DIFactory does not emit debug info in updated form.
Use LLVMDebugVersion10 directly here so that debug info nodes produced by DIFactory do not claim to adhere newer structure.

Ciao, Duncan.

Hi Talin,

So, I just sync’d to LLVM tip and added the call to DIBuilder::finalize(). But
even with that change I am getting an error when I try to run llc:

Assertion failed: (TheCU && “Unable to find compile unit!”), function
endFunction, file
/Users/talin/Projects/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp, line 1306.

And looking at the .bc dissassembly, I see there are indeed compile unit
MDNodes, although at this level I can’t tell if they are hooked up correctly.

you might want to take a look at this llvm-gcc commit:

r137753 | dpatel | 2011-08-16 23:03:26 +0200 (Tue, 16 Aug 2011) | 3 lines

DIBuilder is moving forward to reduce in memory use by MDNodes. However,
DIFactory does not emit debug info in updated form.
Use LLVMDebugVersion10 directly here so that debug info nodes produced by
DIFactory do not claim to adhere newer structure.

I’m not sure I understand. I’m using DIBuilder, not DIFactory, since I thought DIFactory was deprecated.

Hi Talin, I mentioned it because the error message you are getting is
identical (IIRC) to the error message being produced by llvm-gcc before
this patch went in.

Ciao, Duncan.

Yup. Now, the debug info nodes do not refer to compile unit.

Well, for now I’ve disabled generating debug info in my frontend so that I can get work done, but I’d like to know what the problem is. I am calling finalize().