yaxunl added inline comments.
================ Comment at: lib/CodeGen/CGBlocks.cpp:1318 + CGM.getModule().getMDKindID("invariant.load"), + llvm::MDNode::get(getLLVMContext(), None)); + ---------------- 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. https://reviews.llvm.org/D53295 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits