[LLVMdev] Loads/Stores and MachineMemOperand

Justin Holewinski justin.holewinski at gmail.com
Tue Dec 11 11:00:12 PST 2012


I want to get some clarification on the exact semantics of the
MachineMemOperand attached to memory-touching instructions.  From what I
understand, a MemSDNode has an associated MachineMemOperand and a
MachineInstr can have zero or more attached MachineMemOperands.

But what is the guarantee/constraint placed on optimization/codegen passes
for maintaining the contents of a MachineMemOperand?  In particular, a
MachineMemOperand has a Value associated with it for the original LLVM IR
pointer, but is there any guarantee that this will be valid for *all*
memory-touching instructions after isel and post-isel optimization?  I
found the following code in StackColoring that seems to indicate that one
should not rely on the Value* in a MachineMemOperand to get at pointer
information like address space during instruction printing since it may be
NULL.


518         if (!V || !isa<AllocaInst>(V)) {
519           // Clear mem operand since we don't know for sure that it
doesn't

520           // alias a merged alloca.


521           MMO->setValue(0);
522           continue;
523         }


Is this just a deficiency in the optimizer, or is there no guarantee that
MachineMemOperand will retain a valid Value* instance through-out its
lifetime?

-- 

Thanks,

Justin Holewinski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121211/63c5c4dc/attachment.html>


More information about the llvm-dev mailing list