Lines Matching full:assume
1 //===- AssumeBundleQueries.cpp - tool to query assume bundles ---*- C++ -*-===//
19 #define DEBUG_TYPE "assume-queries"
24 STATISTIC(NumAssumeQueries, "Number of Queries into an assume assume bundles");
27 "Number of Queries into an assume assume bundles that were satisfied");
29 DEBUG_COUNTER(AssumeQueryCounter, "assume-queries-counter",
36 static Value *getValueFromBundleOpInfo(AssumeInst &Assume,
40 return (Assume.op_begin() + BOI.Begin + Idx)->get();
43 bool llvm::hasAttributeInAssume(AssumeInst &Assume, Value *IsOn,
50 if (Assume.bundle_op_infos().empty())
53 for (auto &BOI : Assume.bundle_op_infos()) {
57 IsOn != getValueFromBundleOpInfo(Assume, BOI, ABA_WasOn)))
62 cast<ConstantInt>(getValueFromBundleOpInfo(Assume, BOI, ABA_Argument))
70 void llvm::fillMapFromAssume(AssumeInst &Assume, RetainedKnowledgeMap &Result) {
71 for (auto &Bundles : Assume.bundle_op_infos()) {
75 Key.first = getValueFromBundleOpInfo(Assume, Bundles, ABA_WasOn);
80 Result[Key][&Assume] = {0, 0};
84 getValueFromBundleOpInfo(Assume, Bundles, ABA_Argument));
89 if (Lookup == Result.end() || !Lookup->second.count(&Assume)) {
90 Result[Key][&Assume] = {Val, Val};
93 Lookup->second[&Assume].Min = std::min(Val, Lookup->second[&Assume].Min);
94 Lookup->second[&Assume].Max = std::max(Val, Lookup->second[&Assume].Max);
99 llvm::getKnowledgeFromBundle(AssumeInst &Assume,
107 Result.WasOn = getValueFromBundleOpInfo(Assume, BOI, ABA_WasOn);
110 getValueFromBundleOpInfo(Assume, BOI, ABA_Argument + Idx)))
122 RetainedKnowledge llvm::getKnowledgeFromOperandInAssume(AssumeInst &Assume,
124 CallBase::BundleOpInfo BOI = Assume.getBundleOpInfoForOperand(Idx);
125 return getKnowledgeFromBundle(Assume, BOI);
128 bool llvm::isAssumeWithEmptyBundle(const AssumeInst &Assume) {
129 return none_of(Assume.bundle_op_infos(),
137 m_Intrinsic<Intrinsic::assume>(m_Unless(m_Specific(U->get())))))
166 auto *II = cast_or_null<AssumeInst>(Elem.Assume);