[LLVMdev] [PATCH] Spill Comments

Chris Lattner clattner at apple.com
Mon Sep 14 10:32:25 PDT 2009

On Sep 11, 2009, at 3:31 PM, David Greene wrote:

> Attached is a patch to print asm comments for spill information.
> We've discussed the mechanisms before but I wanted to run the
> patch by everyone before I start to commit pieces.

Some thoughts:

The general approach to enhancing CreateStackObject and adding  
MachineInstr::AsmPrinterFlags seems fine to me!

The testcase should use filecheck to avoid running llc 4 times.  Also,  
it seems better to design a situation where you just have 16 live  
variables instead of taking some random function for  gcc (you're  
implicitly depending on how ra is handling this code instead of  
forcing a situation where any x86-64 codegen would have to spill).

The constness change to TargetRegisterInfo::getFrameRegister looks  
great, please commit it separately.

+  /// hasLoadFromStackSlot - If the specified machine instruction is a
+  /// direct load from a stack slot, return true along with the
+  /// FrameIndex of the loaded stack slot.  If not, return false.
+  /// Unlike isLoadFromStackSlot, this returns true for any
+  /// instructions that loads from the stack.

This comment is contradictory.  It returns true if it is a "direct  
load" but "returns true for any instructions that loads".  likewise  
with the comment on hasStoreToStackSlot.  Would it make sense for the  
default impl of hasLoadFromStackSlot to be isLoadFromStackSlot?

It might be worthwhile to say that this is a "best effort" method.  It  
is not guaranteed to return true for all instructions of the form, it  
is just a hint.

A couple of the methods you're adding to MachineFrameInfo.h are large,  
they should be moved to the .cpp file, allowing you to avoid <limits>  
in the header.

+  /// SpillObjects - A set of frame indices represnting spill slots.

typo represnting.

Why does SpillObjects need to be a DenseSet?  It seems that it is  
created in order.  I think it can just be a vector which is looked up  
with a binary search.

Instead of making CreateStackObject take a "bool isSpill", how about  
adding a new "CreateSpillStackObject"? That seems much nicer in the  
code than having: CreateStackObject(16, 16, /*isSpill*/false);   
everywhere.  The number of places that create spill slots is pretty  
small compared to the number of "/*isSpill*/false".

What is the lib/Target/X86/X86RegisterInfo.cpp change doing?  It needs  
a comment.

+bool X86InstrInfo::isFrameOperand(const MachineInstr *MI, unsigned  
int Op,
+    return true;
+  } else {
+    // Check for post-frame index elimination

Please eliminate the 'else' to avoid nesting.  Also, please terminate  
your comment with a period.  There are several comments in the patch  
that need to be terminated.

In AsmPrinter::EmitComments please make "Newline" be a bool  
"NeedsNewline" instead of a char with only two states (uninitialized  
and '\n').  Please initialize it.

Overall, the approach looks very nice.  Please commit this (with the  
changes above) as a series of patches:

1. Constify the TargetRegisterInfo::getFrameRegister argument.
2. Change CreateStackObject so MFI can maintain the information it  
3. Add the MachineInstr AsmPrinter flags stuff.
4. Land the Asmprinter changes themselves.

Thanks David,


More information about the llvm-dev mailing list