On Jan 5, 2008, at 12:53 AM, Evan Cheng wrote: > > 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.
Alternatively, the caller should pass a vector operands that require checking in addition to the MI in question. Evan > > 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@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits