Index: llvm/docs/BitCodeFormat.rst =================================================================== --- llvm/docs/BitCodeFormat.rst +++ llvm/docs/BitCodeFormat.rst @@ -1058,7 +1058,16 @@ * code 56: ``nocf_check`` * code 57: ``optforfuzzing`` * code 58: ``shadowcallstack`` +* code 59: ``speculative_load_hardening`` +* code 60: ``immarg`` +* code 61: ``willreturn`` +* code 62: ``nofree`` +* code 63: ``nosync`` * code 64: ``sanitize_memtag`` +* code 65: ``preallocated`` +* code 66: ``no_merge`` +* code 67: ``null_pointer_is_valid`` +* code 68: ``noundef`` .. note:: The ``allocsize`` attribute has a special encoding for its arguments. Its two Index: llvm/docs/LangRef.rst =================================================================== --- llvm/docs/LangRef.rst +++ llvm/docs/LangRef.rst @@ -1252,6 +1252,12 @@ only valid on intrinsic declarations and cannot be applied to a call site or arbitrary function. +``noundef`` + This attribute applies to parameters and return values. If the value contains + any uninitialized or poison bits, the behavior is undefined. This constraint does + not apply to inferrable uninitialized bits, such as the 24 bits of + padding in `{ i8, i32 }`. + .. _gc: Garbage Collector Strategy Names @@ -3656,6 +3662,11 @@ - The condition operand of a :ref:`br ` instruction. - The callee operand of a :ref:`call ` or :ref:`invoke ` instruction. +- The parameter operand of a :ref:`call ` or :ref:`invoke ` + instruction, when the function or invoking call site has a ``noundef`` + attribute in the corresponding position. +- The operand of a :ref:`ret ` instruction if the function or invoking + call site has a `noundef` attribute in the return value position. Here are some examples: