Lines Matching +full:auto +full:- +full:flow +full:- +full:control

1 //===-- InstructionPrecedenceTracking.cpp -----------------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // (e.g. as having implicit control flow, or writing memory, or having another
18 //===----------------------------------------------------------------------===//
33 "ipt-expensive-asserts",
65 getFirstSpecialInstruction(Insn->getParent()); in isPreceededBySpecialInstruction()
66 return MaybeFirstSpecial && MaybeFirstSpecial->comesBefore(Insn); in isPreceededBySpecialInstruction()
71 for (const auto &I : *BB) { in fill()
85 auto It = FirstSpecialInsts.find(BB); in validate()
92 assert(It->second == &Insn && in validate()
97 assert(It->second == nullptr && in validate()
104 for (const auto &It : FirstSpecialInsts) in validateAll()
116 auto *BB = Inst->getParent(); in removeInstruction()
123 for (const auto *U : Inst->users()) { in removeUsersOf()
124 if (const auto *UI = dyn_cast<Instruction>(U)) in removeUsersOf()
139 // If a block's instruction doesn't always pass the control to its successor in isSpecialInstruction()
140 // instruction, mark the block as having implicit control flow. We use them in isSpecialInstruction()
141 // to avoid wrong assumptions of sort "if A is executed and B post-dominates in isSpecialInstruction()
143 // control flow instruction (e.g. a guard) between them. in isSpecialInstruction()
152 return Insn->mayWriteToMemory(); in isSpecialInstruction()