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/StringRef.h" 19 #include "llvm/ADT/StringSet.h" 20 21 namespace llvm { 22 23 class Function; 24 25 /// The key we use for assumption attributes. 26 constexpr StringRef AssumptionAttrKey = "llvm.assume"; 27 28 /// A set of known assumption strings that are accepted without warning and 29 /// which can be recommended as typo correction. 30 extern StringSet<> KnownAssumptionStrings; 31 32 /// Helper that allows to insert a new assumption string in the known assumption 33 /// set by creating a (static) object. 34 struct KnownAssumptionString { KnownAssumptionStringKnownAssumptionString35 KnownAssumptionString(StringRef AssumptionStr) 36 : AssumptionStr(AssumptionStr) { 37 KnownAssumptionStrings.insert(AssumptionStr); 38 } StringRefKnownAssumptionString39 operator StringRef() const { return AssumptionStr; } 40 41 private: 42 StringRef AssumptionStr; 43 }; 44 45 /// Return true if \p F has the assumption \p AssumptionStr attached. 46 bool hasAssumption(Function &F, const KnownAssumptionString &AssumptionStr); 47 48 } // namespace llvm 49 50 #endif 51