[llvm-commits] [llvm] r45620 - /llvm/trunk/lib/Target/X86/X86InstrInfo.cpp

Evan Cheng evan.cheng at apple.com
Sat Jan 5 00:53:50 PST 2008


On Jan 5, 2008, at 12:28 AM, Chris Lattner wrote:

>
> On Jan 4, 2008, at 11:21 PM, Bill Wendling wrote:
>
>> On Jan 4, 2008, at 11:02 PM, Chris Lattner wrote:
>>> You aren't looking for loads *from the global*, you're looking for
>>> loads from the *stub for the global*, which are always invariant.
>>> You
>>> just need to know whether the load is from a global or from its  
>>> stub.
>>>
>> Okay. I just don't know how to check that it's a load from a *stub*
>> for the global. :-)
>
> I am not 100% sure, but I think that X86Subtarget::GVRequiresExtraLoad
> is the place to start looking.

Right. If it's a load from GV and GVRequiresExtraLoad() returns true  
then it's a load from a stub.

Here is something to consider for further enhancement. There are  
potentially other GV loads which can be side effect free though. As  
the comment says, if the value in the GV isn't redefined (in the  
loop), then it can be moved. Should there be some kind of callback  
function provided by caller of isReallySideEffectFree() that checks  
if a register or a GV operand is considered side effect free? In the  
case of LICM, if a register or GV operand is considered a loop  
invariant, then the instruction is really side effect free. In the  
case of remat, if an operand is "available", then it's side effect  
free, etc. etc.

BTW, what do we do about volatile loads? I don't think the property  
is transferred to target instructions. Or perhaps volatile property  
should be on the location (GV) instead of the instruction?

Evan


>
> -Chris
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list