[llvm] Add 'initialized' attribute langref (PR #84803)

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 13 14:02:12 PDT 2024


================
@@ -1621,6 +1621,31 @@ Currently, only the following parameter attributes are defined:
     ``readonly`` or a ``memory`` attribute that does not contain
     ``argmem: write``.
 
+``initialized((Lo1,Hi1),...)``
+    This attribute indicates that the function initializes the ranges of the
+    pointer parameter's memory, [%p+LoN, %p+HiN): there are no reads, and no
+    special accesses (such as volatile access or untrackable capture) before
+    the initialization write in the function.
+
+    This attribute implies that the function initializes and does not read
+    before initialization through this pointer argument, even though it may
+    read the memory before initialization that the pointer points to, such
+    as through other arguments.
+
+    Note that this attribute does not apply to the unwind edge: the
+    initializing function does not read the pointer before writing to it
+    regardless of unwinding or not, but the memory may not actually be
+    written to when unwinding happens.
+
+    The ``writable`` or ``dereferenceable`` attribute does not imply the
+    ``initialized`` attribute, and ``initialized`` does not imply ``writeonly``
+    since ``initialized`` allows reading from the pointer after writing.
+
+    This attribute is a list of const ranges in ascending order with no
+    overlapping or adjoining list elements. LoN/HiN are 64-bit ints, and
----------------
aeubanks wrote:

I haven't heard "adjoining" used in this context, I think "consecutive" is more commonly used.

https://github.com/llvm/llvm-project/pull/84803


More information about the llvm-commits mailing list