[llvm-dev] invariant.load metadata semantics

Sanjoy Das via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 25 13:11:27 PDT 2016


Hi Hal,

Hal Finkel via llvm-dev wrote:
 > I agree.
 >
 > Regarding the proposed text, I find the "since it became
 > dereferenceable" phrase ambiguous. Further, I think we can say something
 > stronger: Storing into a location previously loaded using a load tagged
 > with !invariant.load is undefined behavior.

That prevents doing the optimization Geoff suggested:

   int k = *ptr;
   clobber();
   int k2 = *ptr; // invariant

==>

   int k = *ptr;
   clobber();
   int k2 = k;

since clobber(), given what you said, could have legitimately changed
the contents of ptr.

-- Sanjoy


More information about the llvm-dev mailing list