[LLVMdev] How can I output assembly comments from emitPrologue()?

Stephen McGruer
Sun, 20 Nov 2011 12:47:30 -0000

Dear all,

I am looking to output assembly comments in my emitPrologue() function,
just for my own readability. Searching for a way to do this found me this
thread - http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-October/043722.html,
which says that the best way to output comments from somewhere like
emitPrologue() is to:

   1. Create an MDString for the comment.
   2. Attach it to an LLVM instruction using setMetadata().
   3. Add a new member to MachineInstr to hold the metadata, and attach it
   when converting LLVM instructions.
   4. Update AsmPrinter to read off the metadata and output it as an
   assembly comment.

Is this the only (and correct) way to do this?




If so, I am having trouble attaching the MDString to an instruction. I am
using BuildMI to create my instruction, which only seems to have an
"addMetadata()" function rather than "setMetadata()", and
which takes an
MDNode instead of an MDString. I attempted to do this as follows:

void XXXFrameLowering::emitPrologue(MachineFunction &MF) const {
...
  Value* end_prologue_comment = MDString::get(getGlobalContext(), "end of
prologue");
  BuildMI(MBB, MBBI, dl, TII.get(Target::AnInstr),
Target::R1).addMetadata(cast<MDNode>(end_prologue_comment));
}

However, it seems an MDString cannot be case to an MDNode this way. How do
I go about turning that MDString into an MDNode, and once done how do I add
the new member to MachineInstr and attach the metadata to it?

Thanks,
Stephen
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20111120/7f1b6fda/attachment.html>