[LangRef] Clarify !invariant.load semantics.

Based on discussion on llvm-dev.

llvm-svn: 280262
This commit is contained in:
Geoff Berry 2016-08-31 17:39:21 +00:00
parent 090d701872
commit a8b176e84c

View File

@ -7072,12 +7072,10 @@ as the ``MOVNT`` instruction on x86.
The optional ``!invariant.load`` metadata must reference a single
metadata name ``<index>`` corresponding to a metadata node with no
entries. The existence of the ``!invariant.load`` metadata on the
instruction tells the optimizer and code generator that the address
operand to this load points to memory which can be assumed unchanged.
Being invariant does not imply that a location is dereferenceable,
but it does imply that once the location is known dereferenceable
its value is henceforth unchanging.
entries. If a load instruction tagged with the ``!invariant.load``
metadata is executed, the optimizer may assume the memory location
referenced by the load contains the same value at all points in the
program where the memory location is known to be dereferenceable.
The optional ``!invariant.group`` metadata must reference a single metadata name
``<index>`` corresponding to a metadata node. See ``invariant.group`` metadata.