diff --git a/llvm/docs/MemorySSA.rst b/llvm/docs/MemorySSA.rst --- a/llvm/docs/MemorySSA.rst +++ b/llvm/docs/MemorySSA.rst @@ -124,7 +124,7 @@ %p2 = alloca i8 %p3 = alloca i8 ; 1 = MemoryDef(liveOnEntry) - store i8 0, i8* %p3 + store i8 0, ptr %p3 br label %while.cond while.cond: @@ -133,30 +133,30 @@ if.then: ; 2 = MemoryDef(6) - store i8 0, i8* %p1 + store i8 0, ptr %p1 br label %if.end if.else: ; 3 = MemoryDef(6) - store i8 1, i8* %p2 + store i8 1, ptr %p2 br label %if.end if.end: ; 5 = MemoryPhi({if.then,2},{if.else,3}) ; MemoryUse(5) - %1 = load i8, i8* %p1 + %1 = load i8, ptr %p1 ; 4 = MemoryDef(5) - store i8 2, i8* %p2 + store i8 2, ptr %p2 ; MemoryUse(1) - %2 = load i8, i8* %p3 + %2 = load i8, ptr %p3 br label %while.cond } The ``MemorySSA`` IR is shown in comments that precede the instructions they map to (if such an instruction exists). For example, ``1 = MemoryDef(liveOnEntry)`` is a ``MemoryAccess`` (specifically, a ``MemoryDef``), and it describes the LLVM -instruction ``store i8 0, i8* %p3``. Other places in ``MemorySSA`` refer to this -particular ``MemoryDef`` as ``1`` (much like how one can refer to ``load i8, i8* +instruction ``store i8 0, ptr %p3``. Other places in ``MemorySSA`` refer to this +particular ``MemoryDef`` as ``1`` (much like how one can refer to ``load i8, ptr %p1`` in LLVM with ``%1``). Again, ``MemoryPhi``\ s don't correspond to any LLVM Instruction, so the line directly below a ``MemoryPhi`` isn't special. @@ -165,20 +165,20 @@ - ``6 = MemoryPhi({entry,1},{if.end,4})`` notes that, when entering ``while.cond``, the reaching definition for it is either ``1`` or ``4``. This ``MemoryPhi`` is referred to in the textual IR by the number ``6``. -- ``2 = MemoryDef(6)`` notes that ``store i8 0, i8* %p1`` is a definition, +- ``2 = MemoryDef(6)`` notes that ``store i8 0, ptr %p1`` is a definition, and its reaching definition before it is ``6``, or the ``MemoryPhi`` after ``while.cond``. (See the `Use and Def optimization`_ and `Precision`_ sections below for why this ``MemoryDef`` isn't linked to a separate, disambiguated ``MemoryPhi``.) -- ``3 = MemoryDef(6)`` notes that ``store i8 0, i8* %p2`` is a definition; its +- ``3 = MemoryDef(6)`` notes that ``store i8 0, ptr %p2`` is a definition; its reaching definition is also ``6``. - ``5 = MemoryPhi({if.then,2},{if.else,3})`` notes that the clobber before this block could either be ``2`` or ``3``. -- ``MemoryUse(5)`` notes that ``load i8, i8* %p1`` is a use of memory, and that +- ``MemoryUse(5)`` notes that ``load i8, ptr %p1`` is a use of memory, and that it's clobbered by ``5``. -- ``4 = MemoryDef(5)`` notes that ``store i8 2, i8* %p2`` is a definition; its +- ``4 = MemoryDef(5)`` notes that ``store i8 2, ptr %p2`` is a definition; its reaching definition is ``5``. -- ``MemoryUse(1)`` notes that ``load i8, i8* %p3`` is just a user of memory, +- ``MemoryUse(1)`` notes that ``load i8, ptr %p3`` is just a user of memory, and the last thing that could clobber this use is above ``while.cond`` (e.g. the store to ``%p3``). In memory versioning parlance, it really only depends on the memory version 1, and is unaffected by the new memory versions generated since @@ -215,9 +215,9 @@ %b = alloca i8 ; 1 = MemoryDef(liveOnEntry) - store i8 0, i8* %a + store i8 0, ptr %a ; 2 = MemoryDef(1) - store i8 0, i8* %b + store i8 0, ptr %b } The store to ``%a`` is clearly not a clobber for the store to ``%b``. It would @@ -359,7 +359,7 @@ %p2 = alloca i8 %p3 = alloca i8 ; 1 = MemoryDef(liveOnEntry) - store i8 0, i8* %p3 + store i8 0, ptr %p3 br label %while.cond while.cond: @@ -374,11 +374,11 @@ if.end: ; MemoryUse(1) - %1 = load i8, i8* %p1 + %1 = load i8, ptr %p1 ; 2 = MemoryDef(3) - store i8 2, i8* %p2 + store i8 2, ptr %p2 ; MemoryUse(1) - %2 = load i8, i8* %p3 + %2 = load i8, ptr %p3 br label %while.cond } @@ -403,13 +403,13 @@ .. code-block:: llvm - define i8 @foo(i8* %a) { + define i8 @foo(ptr %a) { entry: br i1 undef, label %if.then, label %if.end if.then: ; 1 = MemoryDef(liveOnEntry) - %0 = load volatile i8, i8* %a + %0 = load volatile i8, ptr %a br label %if.end if.end: