LLVM 22.0.0git
AssumeBundleBuilder.h
Go to the documentation of this file.
1//===- AssumeBundleBuilder.h - utils to build assume bundles ----*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file contain tools to preserve informations. They should be used before
10// performing a transformation that may move and delete instructions as those
11// transformation may destroy or worsen information that can be derived from the
12// IR.
13//
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_TRANSFORMS_UTILS_ASSUMEBUNDLEBUILDER_H
17#define LLVM_TRANSFORMS_UTILS_ASSUMEBUNDLEBUILDER_H
18
20#include "llvm/IR/PassManager.h"
23
24namespace llvm {
25class AssumeInst;
26class Function;
27class Instruction;
28class AssumptionCache;
29class DominatorTree;
30
32
33/// Build a call to llvm.assume to preserve informations that can be derived
34/// from the given instruction.
35/// If no information derived from \p I, this call returns null.
36/// The returned instruction is not inserted anywhere.
38
39/// Calls BuildAssumeFromInst and if the resulting llvm.assume is valid insert
40/// if before I. This is usually what need to be done to salvage the knowledge
41/// contained in the instruction I.
42/// The AssumptionCache must be provided if it is available or the cache may
43/// become silently be invalid.
44/// The DominatorTree can optionally be provided to enable cross-block
45/// reasoning.
46/// This returns if a change was made.
48 DominatorTree *DT = nullptr);
49
50/// Build and return a new assume created from the provided knowledge
51/// if the knowledge in the assume is fully redundant this will return nullptr
54 Instruction *CtxI, AssumptionCache *AC = nullptr,
55 DominatorTree *DT = nullptr);
56
57/// This pass attempts to minimize the number of assume without loosing any
58/// information.
62
63/// This pass will try to build an llvm.assume for every instruction in the
64/// function. Its main purpose is testing.
68
69/// canonicalize the RetainedKnowledge RK. it is assumed that RK is part of
70/// Assume. This will return an empty RetainedKnowledge if the knowledge is
71/// useless.
75 DominatorTree *DT);
76
77} // namespace llvm
78
79#endif
#define LLVM_ABI
Definition Compiler.h:213
This header defines various interfaces for pass management in LLVM.
#define F(x, y, z)
Definition MD5.cpp:55
#define I(x, y, z)
Definition MD5.cpp:58
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:41
This represents the llvm.assume intrinsic.
A cache of @llvm.assume calls within a function.
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree.
Definition Dominators.h:165
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI cl::opt< bool > EnableKnowledgeRetention
LLVM_ABI RetainedKnowledge simplifyRetainedKnowledge(AssumeInst *Assume, RetainedKnowledge RK, AssumptionCache *AC, DominatorTree *DT)
canonicalize the RetainedKnowledge RK.
LLVM_ABI AssumeInst * buildAssumeFromKnowledge(ArrayRef< RetainedKnowledge > Knowledge, Instruction *CtxI, AssumptionCache *AC=nullptr, DominatorTree *DT=nullptr)
Build and return a new assume created from the provided knowledge if the knowledge in the assume is f...
LLVM_ABI bool salvageKnowledge(Instruction *I, AssumptionCache *AC=nullptr, DominatorTree *DT=nullptr)
Calls BuildAssumeFromInst and if the resulting llvm.assume is valid insert if before I.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
LLVM_ABI AssumeInst * buildAssumeFromInst(Instruction *I)
Build a call to llvm.assume to preserve informations that can be derived from the given instruction.
This pass will try to build an llvm.assume for every instruction in the function.
LLVM_ABI PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
This pass attempts to minimize the number of assume without loosing any information.
LLVM_ABI PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM)
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition PassManager.h:70
Represent one information held inside an operand bundle of an llvm.assume.