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"
21
22namespace llvm {
23
24class Function;
25class CallBase;
26
27/// The key we use for assumption attributes.
28constexpr StringRef AssumptionAttrKey = "llvm.assume";
29
30/// A set of known assumption strings that are accepted without warning and
31/// which can be recommended as typo correction.
32extern StringSet<> KnownAssumptionStrings;
33
34/// Helper that allows to insert a new assumption string in the known assumption
35/// set by creating a (static) object.
36struct KnownAssumptionString {
37 KnownAssumptionString(const char *AssumptionStr)
38 : AssumptionStr(AssumptionStr) {
39 KnownAssumptionStrings.insert(key: AssumptionStr);
40 }
41 KnownAssumptionString(StringRef AssumptionStr)
42 : AssumptionStr(AssumptionStr) {
43 KnownAssumptionStrings.insert(key: AssumptionStr);
44 }
45 operator StringRef() const { return AssumptionStr; }
46
47private:
48 StringRef AssumptionStr;
49};
50
51/// Return true if \p F has the assumption \p AssumptionStr attached.
52bool hasAssumption(const Function &F,
53 const KnownAssumptionString &AssumptionStr);
54
55/// Return true if \p CB or the callee has the assumption \p AssumptionStr
56/// attached.
57bool hasAssumption(const CallBase &CB,
58 const KnownAssumptionString &AssumptionStr);
59
60/// Return the set of all assumptions for the function \p F.
61DenseSet<StringRef> getAssumptions(const Function &F);
62
63/// Return the set of all assumptions for the call \p CB.
64DenseSet<StringRef> getAssumptions(const CallBase &CB);
65
66/// Appends the set of assumptions \p Assumptions to \F.
67bool addAssumptions(Function &F, const DenseSet<StringRef> &Assumptions);
68
69/// Appends the set of assumptions \p Assumptions to \CB.
70bool addAssumptions(CallBase &CB, const DenseSet<StringRef> &Assumptions);
71
72} // namespace llvm
73
74#endif
75

source code of llvm/include/llvm/IR/Assumptions.h