Prazek added inline comments.

================
Comment at: lib/CodeGen/CGBlocks.cpp:1318
+        CGM.getModule().getMDKindID("invariant.load"),
+        llvm::MDNode::get(getLLVMContext(), None));
+
----------------
rjmccall wrote:
> yaxunl wrote:
> > rjmccall wrote:
> > > OpenCL blocks are still potentially function-local, right?  I don't think 
> > > you're allowed to put `invariant.load` on something that's visibly 
> > > initialized, even if it's visibly initialized to the same thing every 
> > > time.  The problem is that `invariant.load` could allow the load to be 
> > > hoisted above the initialization.
> > > 
> > > If you can solve that problem, you can make this non-OpenCL-specific.
> > It seems that invariant.load implies the pointer is invariant in the whole 
> > module, disregarding the store to it, which is not suitable for this case.
> > 
> > In this case what I need is that after the first store to the pointer, 
> > every load does not change.
> > 
> > It seems invariant.group can be used for this.
> Hmm.  I guess `invariant.group` does what you need because LLVM will probably 
> unify the GEPs to extract the function-pointer field if they appear in the 
> same function, and there are no launderings of that pointer.
> 
> CC'ing Piotr to get his opinion about whether this is a correct use of 
> `invariant.group`.  Piotr, we have a struct-typed alloca that we initialize 
> in a probably-dominating position.  A pointer to the struct can be passed off 
> to other contexts which we can't necessarily analyze, blocking normal 
> optimization; however, we know that this struct can (mostly) not be legally 
> modified after initialization.  We're marking one of the initializing stores 
> as well as the load of the corresponding field when it's used.  These two 
> places are completely separate and will perform their own GEPs, but because 
> we don't emit any `launder`s on the struct, LLVM will likely unify the GEPs 
> if they appear in the same function, allowing `invariant.group`-based 
> optimizations to apply.  Does this seem reasonable?
Yep, seems totally reasonable. Sorry for such a late response, I just have open 
reviews and saw that.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D53295/new/

https://reviews.llvm.org/D53295



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to