[#llvm-PreservedAnalyses] = xref:llvm.adoc[llvm]::PreservedAnalyses :relfileprefix: ../ :mrdocs: A set of analyses that are preserved following a run of a transformation pass. == Synopsis Declared in `<llvm/IR/Analysis.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- class PreservedAnalyses; ---- == Description Transformation passes build and return these objects to communicate which analyses are still valid after the transformation. For most passes this is fairly simple: if they don't change anything all analyses are preserved, otherwise only a short list of analyses that have been explicitly updated are preserved. This class also lets transformation passes mark abstract _sets_ of analyses as preserved. A transformation that (say) does not alter the CFG can indicate such by marking a particular AnalysisSetKey as preserved, and then analyses can query whether that AnalysisSetKey is preserved. Finally, this class can represent an "abandoned" analysis, which is not preserved even if it would be covered by some abstract set of analyses. Given a `PreservedAnalyses` object, an analysis will typically want to figure out whether it is preserved. In the example below, MyAnalysisType is preserved if it's not abandoned, and (a) it's explicitly marked as preserved, (b), the set AllAnalysesOn<MyIRUnit> is preserved, or (c) both AnalysisSetA and AnalysisSetB are preserved. ` auto PAC = PA.getChecker<MyAnalysisType>(); if (PAC.preserved() || PAC.preservedSet<AllAnalysesOn<MyIRUnit>>() || (PAC.preservedSet<AnalysisSetA>() && PAC.preservedSet<AnalysisSetB>())) { // The analysis has been successfully preserved ... } ` == Types [cols="1,4"] |=== | Name| Description | xref:llvm/PreservedAnalyses/PreservedAnalysisChecker.adoc[`PreservedAnalysisChecker`] | A checker object that makes it easy to query for whether an analysis or some set covering it is preserved. |=== == Member Functions [cols="1,4"] |=== | Name| Description | xref:llvm/PreservedAnalyses/abandon-06.adoc[`abandon`] | `abandon` overloads | xref:llvm/PreservedAnalyses/allAnalysesInSetPreserved-099.adoc[`allAnalysesInSetPreserved`] | Directly test whether a set of analyses is preserved. | xref:llvm/PreservedAnalyses/areAllPreserved.adoc[`areAllPreserved`] | Test whether all analyses are preserved (and none are abandoned). | xref:llvm/PreservedAnalyses/getChecker-0c.adoc[`getChecker`] | `getChecker` overloads | xref:llvm/PreservedAnalyses/intersect-02.adoc[`intersect`] | `intersect` overloads | xref:llvm/PreservedAnalyses/preserve-04.adoc[`preserve`] | `preserve` overloads | xref:llvm/PreservedAnalyses/preserveSet-05.adoc[`preserveSet`] | `preserveSet` overloads |=== == Static Member Functions [cols="1,4"] |=== | Name| Description | xref:llvm/PreservedAnalyses/all.adoc[`all`] | Construct a special preserved set that preserves all passes. | xref:llvm/PreservedAnalyses/allInSet.adoc[`allInSet`] | Construct a preserved analyses object with a single preserved set. | xref:llvm/PreservedAnalyses/none.adoc[`none`] | Convenience factory function for the empty preserved set. |=== == Non-Member Functions [cols="1,4"] |=== | Name| Description | xref:llvm/getLoopPassPreservedAnalyses.adoc[`getLoopPassPreservedAnalyses`] | Returns the minimum set of Analyses that all loop passes must preserve. | xref:llvm/getMachineFunctionPassPreservedAnalyses.adoc[`getMachineFunctionPassPreservedAnalyses`] | Returns the minimum set of Analyses that all machine function passes must preserve. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#