[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