Lines Matching +full:x +full:- +full:versions

13 ``MemoryDependenceAnalysis`` for most (if not all) use-cases. This is because,
15 result in quadratic-time algorithms in LLVM. Additionally, ``MemorySSA`` doesn't
22 form for memory, complete with def-use and use-def chains, which
23 enables users to quickly find may-def and may-uses of memory operations.
24 It can also be thought of as a way to cheaply give versions to the complete
25 state of memory, and associate memory operations with those versions.
31 found here <http://www.airs.com/dnovillo/Papers/mem-ssa.pdf>`_. Though, it's
32 relatively out-of-date; the paper references multiple memory partitions, but GCC
46 - ``MemoryDef``
47 - ``MemoryPhi``
48 - ``MemoryUse``
60 .. code-block:: llvm
79 Note also that in SSA, Phi nodes merge must-reach definitions (that is,
80 definitions that *must* be new versions of variables). In MemorySSA, PHI nodes
81 merge may-reach definitions (that is, until disambiguated, the versions that
95 -passes='print<memoryssa>' -disable-output`` on an ``.ll`` file) is below. When
102 ``MemoryAccess``\ es may access the same memory. For example, ``x = MemoryDef(y)``
103 means that ``x`` potentially modifies memory that ``y`` modifies/constrains
107 by either ``b`` or ``c`` (or both). And finally, ``MemoryUse(x)`` means
108 that this use accesses memory that ``x`` has modified / constrained
109 (as an example, think that if ``x = MemoryDef(...)``
110 and ``MemoryUse(x)`` are in the same loop, the use can't
113 Another useful way of looking at it is in terms of memory versions.
119 .. code-block:: llvm
165 - ``6 = MemoryPhi({entry,1},{if.end,4})`` notes that, when entering
168 - ``2 = MemoryDef(6)`` notes that ``store i8 0, ptr %p1`` is a definition,
173 - ``3 = MemoryDef(6)`` notes that ``store i8 0, ptr %p2`` is a definition; its
175 - ``5 = MemoryPhi({if.then,2},{if.else,3})`` notes that the clobber before
177 - ``MemoryUse(5)`` notes that ``load i8, ptr %p1`` is a use of memory, and that
179 - ``4 = MemoryDef(5)`` notes that ``store i8 2, ptr %p2`` is a definition; its
181 - ``MemoryUse(1)`` notes that ``load i8, ptr %p3`` is just a user of memory,
184 the memory version 1, and is unaffected by the new memory versions generated since
204 ----------
211 .. code-block:: llvm
238 - ``MemoryAccess *getClobberingMemoryAccess(MemoryAccess *MA);`` return the
242 - ``MemoryAccess *getClobberingMemoryAccess(MemoryAccess *MA, const MemoryLocation &Loc);``
260 ------------------------
264 Traditionally ``MemorySSA`` optimized ``MemoryUse``\ s at build-time, up to a
273 reduce compile-time if the walking is not necessary in a pass. Most users call
275 one-time optimization of ``MemoryUse``\ s, if this was not done before.
295 .. code-block:: c++
298 for (auto &U : Def->uses()) {
301 if (DefUser->isOptimized() && DefUser->getOptimized() == Def) {
312 .. code-block:: c++
315 for (auto &U : Def->uses()) {
334 -------------------------
338 motion of ``Instructions``. The update API is being made on an as-needed basis.
342 time-consuming update, if the new access triggers many ``MemoryPhi`` insertions and
353 .. code-block:: llvm
394 Non-Goals
395 ---------
399 It isn't meant to be the single source of truth for all potential memory-related
403 .. code-block:: llvm
424 ----------------
437 TBAA may say no-alias, and something else may say must-alias), it is
449 individual variables, all aliasing operations that may-def multiple struct
450 fields, will may-def more than one of them. This is pretty common (calls,
484 This exception is set under a flag ("-dse-optimize-memoryssa") and can be disabled to
489 -------------------------------------
491 - `2016 LLVM Developers' Meeting: G. Burgess - MemorySSA in Five Minutes <https://www.youtube.com/w…
492 - `2020 LLVM Developers' Meeting: S. Baziotis & S. Moll - Finding Your Way Around the LLVM Dependen…