Index: docs/LangRef.rst =================================================================== --- docs/LangRef.rst +++ docs/LangRef.rst @@ -5109,7 +5109,8 @@ '``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 @@ -5159,6 +5160,8 @@ ; 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 semantics might +change in the future. '``type``' Metadata ^^^^^^^^^^^^^^^^^^^ @@ -12611,7 +12614,8 @@ 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 it's semantics might change in the future. Arguments: Index: include/llvm/IR/Intrinsics.td =================================================================== --- include/llvm/IR/Intrinsics.td +++ include/llvm/IR/Intrinsics.td @@ -637,6 +637,8 @@ // 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 semantics of it +// might change in the future. def int_invariant_group_barrier : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrInaccessibleMemOnly]>;