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(AssumptionStr); 40 } 41 KnownAssumptionString(StringRef AssumptionStr) 42 : AssumptionStr(AssumptionStr) { 43 KnownAssumptionStrings.insert(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