Index: llvm/docs/LangRef.rst =================================================================== --- llvm/docs/LangRef.rst +++ llvm/docs/LangRef.rst @@ -3596,6 +3596,10 @@ To ensure all uses of a given register observe the same value (even if '``undef``'), the :ref:`freeze instruction ` can be used. +A value is frozen if its uses see the same value. +An aggregate value or vector is frozen if its elements are frozen. +The padding of an aggregate isn't considered, since it isn't visible +without storing it into memory and loading it with a different type. .. code-block:: llvm @@ -3769,22 +3773,6 @@ end: -.. _welldefinedvalues: - -Well-Defined Values -------------------- - -Given a program execution, a value is *well defined* if the value does not -have an undef bit and is not poison in the execution. -An aggregate value or vector is well defined if its elements are well defined. -The padding of an aggregate isn't considered, since it isn't visible -without storing it into memory and loading it with a different type. - -A constant of a :ref:`single value `, non-vector type is well -defined if it is neither '``undef``' constant nor '``poison``' constant. -The result of :ref:`freeze instruction ` is well defined regardless -of its operand. - .. _blockaddress: Addresses of Basic Blocks @@ -9435,12 +9423,6 @@ padding may be accessed but are ignored, because it is impossible to observe padding from the loaded aggregate value. -If the pointer is not a well-defined value, all of its possible representations -should be dereferenceable. For example, loading a byte from a pointer to an -array of type ``[16 x i8]`` with offset ``undef & 31`` is undefined behavior. -Loading a byte at offset ``undef & 15`` nondeterministically reads one of the -bytes. - Examples: """"""""" @@ -9534,12 +9516,6 @@ If ```` is of aggregate type, padding is filled with :ref:`undef `. -If ```` is not a well-defined value, all of its possible -representations should be dereferenceable. For example, storing a byte to a -pointer to an array of type ``[16 x i8]`` with offset ``undef & 31`` is -undefined behavior. Storing a byte to an offset ``undef & 15`` -nondeterministically stores to one of offsets from 0 to 15. - Example: """""""" @@ -12705,9 +12681,6 @@ If "len" is 0, the pointers may be NULL, dangling, ``undef``, or ``poison`` pointers. However, they must still be appropriately aligned. -If "len" isn't a well-defined value, all of its possible representations should -make the behavior of this ``llvm.memcpy`` defined, otherwise the behavior is -undefined. .. _int_memcpy_inline: @@ -12825,9 +12798,6 @@ If "len" is 0, the pointers may be NULL, dangling, ``undef``, or ``poison`` pointers. However, they must still be appropriately aligned. -If "len" isn't a well-defined value, all of its possible representations should -make the behavior of this ``llvm.memmove`` defined, otherwise the behavior is -undefined. .. _int_memset: @@ -12883,9 +12853,6 @@ If "len" is 0, the pointer may be NULL, dangling, ``undef``, or ``poison`` pointer. However, it must still be appropriately aligned. -If "len" isn't a well-defined value, all of its possible representations should -make the behavior of this ``llvm.memset`` defined, otherwise the behavior is -undefined. '``llvm.sqrt.*``' Intrinsic ^^^^^^^^^^^^^^^^^^^^^^^^^^^