Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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
 
22
namespace llvm {
23
 
24
class Function;
25
class CallBase;
26
 
27
/// The key we use for assumption attributes.
28
constexpr 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.
32
extern StringSet<> KnownAssumptionStrings;
33
 
34
/// Helper that allows to insert a new assumption string in the known assumption
35
/// set by creating a (static) object.
36
struct KnownAssumptionString {
37
  KnownAssumptionString(const char *AssumptionStr)
38
      : AssumptionStr(AssumptionStr) {
39
    KnownAssumptionStrings.insert(AssumptionStr);
40
  }
41
  KnownAssumptionString(StringRef AssumptionStr)
42
      : AssumptionStr(AssumptionStr) {
43
    KnownAssumptionStrings.insert(AssumptionStr);
44
  }
45
  operator StringRef() const { return AssumptionStr; }
46
 
47
private:
48
  StringRef AssumptionStr;
49
};
50
 
51
/// Return true if \p F has the assumption \p AssumptionStr attached.
52
bool 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.
57
bool hasAssumption(const CallBase &CB,
58
                   const KnownAssumptionString &AssumptionStr);
59
 
60
/// Return the set of all assumptions for the function \p F.
61
DenseSet<StringRef> getAssumptions(const Function &F);
62
 
63
/// Return the set of all assumptions for the call \p CB.
64
DenseSet<StringRef> getAssumptions(const CallBase &CB);
65
 
66
/// Appends the set of assumptions \p Assumptions to \F.
67
bool addAssumptions(Function &F, const DenseSet<StringRef> &Assumptions);
68
 
69
/// Appends the set of assumptions \p Assumptions to \CB.
70
bool addAssumptions(CallBase &CB, const DenseSet<StringRef> &Assumptions);
71
 
72
} // namespace llvm
73
 
74
#endif