[llvm] 3d61836 - [LangRef] mention that the lifetime intrinsics' description in LangRef isn't everything

Juneyoung Lee via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 8 18:34:00 PST 2021


Author: Juneyoung Lee
Date: 2021-03-09T11:33:36+09:00
New Revision: 3d6183661d3a2d1e39468a51ebf4cef5bd0a2ed8

URL: https://github.com/llvm/llvm-project/commit/3d6183661d3a2d1e39468a51ebf4cef5bd0a2ed8
DIFF: https://github.com/llvm/llvm-project/commit/3d6183661d3a2d1e39468a51ebf4cef5bd0a2ed8.diff

LOG: [LangRef] mention that the lifetime intrinsics' description in LangRef isn't everything

This is a minor patch that addresses concerns about lifetime in D94002.

We need to mention that what's written in LangRef isn't everything about lifetime.start/end
and its semantics depends on the stack coloring algorithm's pattern matching of a stack pointer.

If the stack coloring algorithm cannot conclude that a pointer is a stack-allocated object, the pointer is conservatively
considered as a non-stack one because stack coloring won't take this lifetime into account while assigning addresses.

A reference from alloca to lifetime.start/end is added as well.

Differential Revision: https://reviews.llvm.org/D98112

Added: 
    

Modified: 
    llvm/docs/LangRef.rst

Removed: 
    


################################################################################
diff  --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 273652f1dbda..c15101c49bf1 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -9369,6 +9369,12 @@ the memory is reclaimed. Allocating zero bytes is legal, but the returned
 pointer may not be unique. The order in which memory is allocated (ie.,
 which way the stack grows) is not specified.
 
+If the returned pointer is used by :ref:`llvm.lifetime.start <int_lifestart>`,
+the returned object is initially dead.
+See :ref:`llvm.lifetime.start <int_lifestart>` and
+:ref:`llvm.lifetime.end <int_lifeend>` for the precise semantics of
+lifetime-manipulating intrinsics.
+
 Example:
 """"""""
 
@@ -18099,6 +18105,10 @@ Semantics:
 
 If ``ptr`` is a stack-allocated object and it points to the first byte of
 the object, the object is initially marked as dead.
+``ptr`` is conservatively considered as a non-stack-allocated object if
+the stack coloring algorithm that is used in the optimization pipeline cannot
+conclude that ``ptr`` is a stack-allocated object.
+
 After '``llvm.lifetime.start``', the stack object that ``ptr`` points is marked
 as alive and has an uninitialized value.
 The stack object is marked as dead when either
@@ -18145,6 +18155,10 @@ Semantics:
 
 If ``ptr`` is a stack-allocated object and it points to the first byte of the
 object, the object is dead.
+``ptr`` is conservatively considered as a non-stack-allocated object if
+the stack coloring algorithm that is used in the optimization pipeline cannot
+conclude that ``ptr`` is a stack-allocated object.
+
 Calling ``llvm.lifetime.end`` on an already dead alloca is no-op.
 
 If ``ptr`` is a non-stack-allocated object or it does not point to the first


        


More information about the llvm-commits mailing list