[#llvm-MemorySSAUpdater] = xref:llvm.adoc[llvm]::MemorySSAUpdater :relfileprefix: ../ :mrdocs: Automatic updater that inserts, deletes, and moves MemorySSA accesses. == Synopsis Declared in `<llvm/Analysis/MemorySSAUpdater.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class MemorySSAUpdater; ---- == Description Handles arbitrary insertion, deletion, and moves. It performs phi insertion where necessary, and automatically updates the MemorySSA IR to be correct. While updating loads or removing instructions is often easy enough to not need this, updating stores should generally not be attempted outside this API. == Member Functions [cols="1,4"] |=== | Name| Description | xref:llvm/MemorySSAUpdater/2constructor.adoc[`MemorySSAUpdater`] [.small]#[constructor]# | Construct a MemorySSAUpdater for the given MemorySSA instance. | xref:llvm/MemorySSAUpdater/applyInsertUpdates-0b.adoc[`applyInsertUpdates`] | Apply CFG insert updates, analogous with the DT edge updates. | xref:llvm/MemorySSAUpdater/applyUpdates.adoc[`applyUpdates`] | Apply CFG updates, analogous with the DT edge updates. | xref:llvm/MemorySSAUpdater/changeToUnreachable.adoc[`changeToUnreachable`] | Instruction I will be changed to an unreachable. Remove all accesses in I's block that follow I (inclusive), and update the Phis in the blocks' successors. | xref:llvm/MemorySSAUpdater/createMemoryAccessAfter.adoc[`createMemoryAccessAfter`] | Create a MemoryAccess in MemorySSA after an existing MemoryAccess. | xref:llvm/MemorySSAUpdater/createMemoryAccessBefore.adoc[`createMemoryAccessBefore`] | Create a MemoryAccess in MemorySSA before an existing MemoryAccess. | xref:llvm/MemorySSAUpdater/createMemoryAccessInBB.adoc[`createMemoryAccessInBB`] | Create a MemoryAccess in MemorySSA at a specified point in a block. | xref:llvm/MemorySSAUpdater/getMemorySSA.adoc[`getMemorySSA`] | Get handle on MemorySSA. | xref:llvm/MemorySSAUpdater/insertDef.adoc[`insertDef`] | Insert a definition into the MemorySSA IR. | xref:llvm/MemorySSAUpdater/insertUse.adoc[`insertUse`] | Insert a use into the MemorySSA IR. | xref:llvm/MemorySSAUpdater/moveAfter.adoc[`moveAfter`] | Move a MemoryAccess after another MemoryAccess. | xref:llvm/MemorySSAUpdater/moveAllAfterMergeBlocks.adoc[`moveAllAfterMergeBlocks`] | Move MemoryAccesses after merging From into To. | xref:llvm/MemorySSAUpdater/moveAllAfterSpliceBlocks.adoc[`moveAllAfterSpliceBlocks`] | Move MemoryAccesses after splicing a block into From and To. | xref:llvm/MemorySSAUpdater/moveBefore.adoc[`moveBefore`] | Move a MemoryAccess before another MemoryAccess. | xref:llvm/MemorySSAUpdater/moveToPlace.adoc[`moveToPlace`] | Move a MemoryAccess to a specific place in a basic block. | xref:llvm/MemorySSAUpdater/removeBlocks.adoc[`removeBlocks`] | Remove all MemoryAccesses in blocks about to be deleted. | xref:llvm/MemorySSAUpdater/removeDuplicatePhiEdgesBetween.adoc[`removeDuplicatePhiEdgesBetween`] | Update the MemoryPhi in `To` to have a single incoming edge from `From`, following a CFG change that replaced multiple edges (switch) with a direct branch. | xref:llvm/MemorySSAUpdater/removeEdge.adoc[`removeEdge`] | Update the MemoryPhi in `To` following an edge deletion between `From` and `To`. If `To` becomes unreachable, a call to removeBlocks should be made. | xref:llvm/MemorySSAUpdater/removeMemoryAccess-04c.adoc[`removeMemoryAccess`] | `removeMemoryAccess` overloads | xref:llvm/MemorySSAUpdater/updateExitBlocksForClonedLoop-0d.adoc[`updateExitBlocksForClonedLoop`] | `updateExitBlocksForClonedLoop` overloads | xref:llvm/MemorySSAUpdater/updateForClonedBlockIntoPred.adoc[`updateForClonedBlockIntoPred`] | Update MemorySSA after a block was cloned into its predecessor. | xref:llvm/MemorySSAUpdater/updateForClonedLoop.adoc[`updateForClonedLoop`] | Update MemorySSA after a loop was cloned. | xref:llvm/MemorySSAUpdater/updatePhisWhenInsertingUniqueBackedgeBlock.adoc[`updatePhisWhenInsertingUniqueBackedgeBlock`] | Update MemorySSA when inserting a unique backedge block for a loop. | xref:llvm/MemorySSAUpdater/wireOldPredecessorsToNewImmediatePredecessor.adoc[`wireOldPredecessorsToNewImmediatePredecessor`] | Rewire MemorySSA after inserting New as an immediate predecessor of Old. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#