LLVM 22.0.0git
Assumptions.h
Go to the documentation of this file.
1//===--- Assumptions.h - Assumption handling and organization ---*- 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// String assumptions that are known to optimization passes should be placed in
10// the KnownAssumptionStrings set. This can be done in various ways, i.a.,
11// via a static KnownAssumptionString object.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_IR_ASSUMPTIONS_H
16#define LLVM_IR_ASSUMPTIONS_H
17
18#include "llvm/ADT/DenseSet.h"
19#include "llvm/ADT/StringRef.h"
20#include "llvm/ADT/StringSet.h"
22
23namespace llvm {
24
25class Function;
26class CallBase;
27
28/// The key we use for assumption attributes.
29constexpr StringRef AssumptionAttrKey = "llvm.assume";
30
31/// A set of known assumption strings that are accepted without warning and
32/// which can be recommended as typo correction.
34
35/// Helper that allows to insert a new assumption string in the known assumption
36/// set by creating a (static) object.
38 KnownAssumptionString(const char *AssumptionStr)
39 : AssumptionStr(AssumptionStr) {
40 getKnownAssumptionStrings().insert(AssumptionStr);
41 }
43 : AssumptionStr(AssumptionStr) {
44 getKnownAssumptionStrings().insert(AssumptionStr);
45 }
46 operator StringRef() const { return AssumptionStr; }
47
48private:
49 StringRef AssumptionStr;
50};
51
52/// Return true if \p F has the assumption \p AssumptionStr attached.
53LLVM_ABI bool hasAssumption(const Function &F,
54 const KnownAssumptionString &AssumptionStr);
55
56/// Return true if \p CB or the callee has the assumption \p AssumptionStr
57/// attached.
58LLVM_ABI bool hasAssumption(const CallBase &CB,
59 const KnownAssumptionString &AssumptionStr);
60
61/// Return the set of all assumptions for the function \p F.
62LLVM_ABI DenseSet<StringRef> getAssumptions(const Function &F);
63
64/// Return the set of all assumptions for the call \p CB.
65LLVM_ABI DenseSet<StringRef> getAssumptions(const CallBase &CB);
66
67/// Appends the set of assumptions \p Assumptions to \F.
68LLVM_ABI bool addAssumptions(Function &F,
69 const DenseSet<StringRef> &Assumptions);
70
71/// Appends the set of assumptions \p Assumptions to \CB.
72LLVM_ABI bool addAssumptions(CallBase &CB,
73 const DenseSet<StringRef> &Assumptions);
74
75} // namespace llvm
76
77#endif
#define LLVM_ABI
Definition: Compiler.h:213
This file defines the DenseSet and SmallDenseSet classes.
#define F(x, y, z)
Definition: MD5.cpp:55
StringSet - A set-like wrapper for the StringMap.
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
StringSet - A wrapper for StringMap that provides set-like functionality.
Definition: StringSet.h:25
std::pair< typename Base::iterator, bool > insert(StringRef key)
Definition: StringSet.h:39
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
LLVM_ABI bool addAssumptions(Function &F, const DenseSet< StringRef > &Assumptions)
Appends the set of assumptions Assumptions to \F.
Definition: Assumptions.cpp:95
LLVM_ABI StringSet & getKnownAssumptionStrings()
A set of known assumption strings that are accepted without warning and which can be recommended as t...
LLVM_ABI bool hasAssumption(const Function &F, const KnownAssumptionString &AssumptionStr)
Return true if F has the assumption AssumptionStr attached.
Definition: Assumptions.cpp:69
LLVM_ABI DenseSet< StringRef > getAssumptions(const Function &F)
Return the set of all assumptions for the function F.
Definition: Assumptions.cpp:85
constexpr StringRef AssumptionAttrKey
The key we use for assumption attributes.
Definition: Assumptions.h:29
Helper that allows to insert a new assumption string in the known assumption set by creating a (stati...
Definition: Assumptions.h:37
KnownAssumptionString(StringRef AssumptionStr)
Definition: Assumptions.h:42
KnownAssumptionString(const char *AssumptionStr)
Definition: Assumptions.h:38