'``invariant.group``' Metadata
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-The ``invariant.group`` metadata may be attached to ``load``/``store`` instructions.
+The experimental ``invariant.group`` metadata may be attached to
+``load``/``store`` instructions.
The existence of the ``invariant.group`` metadata on the instruction tells
the optimizer that every ``load`` and ``store`` to the same pointer operand
within the same invariant group can be assumed to load or store the same
; if %x mustalias %y then we can replace the above instruction with
%v = load i8, i8* %y
+Note that this is an experimental feature, which means that its semantics might
+change in the future.
'``type``' Metadata
^^^^^^^^^^^^^^^^^^^
The '``llvm.invariant.group.barrier``' intrinsic can be used when an invariant
established by invariant.group metadata no longer holds, to obtain a new pointer
-value that does not carry the invariant information.
+value that does not carry the invariant information. It is an experimental
+intrinsic, which means that its semantics might change in the future.
Arguments:
// which is valid.
// The argument also can't be marked with 'returned' attribute, because
// it would remove barrier.
+// Note that it is still experimental, which means that its semantics
+// might change in the future.
def int_invariant_group_barrier : Intrinsic<[llvm_anyptr_ty],
[LLVMMatchType<0>],
[IntrReadMem, IntrArgMemOnly]>;