Lines Matching refs:Inst

58     bool AllUsesDominatedByBlock(Instruction *Inst, BasicBlock *BB) const;
59 bool IsAcceptableTarget(Instruction *Inst, BasicBlock *SuccToSinkTo) const;
74 bool Sinking::AllUsesDominatedByBlock(Instruction *Inst,
80 for (Value::use_iterator I = Inst->use_begin(),
81 E = Inst->use_end(); I != E; ++I) {
136 Instruction *Inst = I; // The instruction to sink.
144 if (isa<DbgInfoIntrinsic>(Inst))
147 if (SinkInstruction(Inst, Stores))
156 static bool isSafeToMove(Instruction *Inst, AliasAnalysis *AA,
159 if (Inst->mayWriteToMemory()) {
160 Stores.insert(Inst);
164 if (LoadInst *L = dyn_cast<LoadInst>(Inst)) {
172 if (isa<TerminatorInst>(Inst) || isa<PHINode>(Inst))
180 bool Sinking::IsAcceptableTarget(Instruction *Inst,
182 assert(Inst && "Instruction to be sunk is null");
187 if (Inst->getParent() == SuccToSinkTo)
194 if (SuccToSinkTo->getUniquePredecessor() != Inst->getParent()) {
197 if (!isSafeToSpeculativelyExecute(Inst))
202 if (!DT->dominates(Inst->getParent(), SuccToSinkTo))
207 Loop *cur = LI->getLoopFor(Inst->getParent());
214 return AllUsesDominatedByBlock(Inst, SuccToSinkTo);
219 bool Sinking::SinkInstruction(Instruction *Inst,
222 if (!isSafeToMove(Inst, AA, Stores))
240 DomTreeNode *DTN = DT->getNode(Inst->getParent());
244 if ((*I)->getIDom()->getBlock() == Inst->getParent() &&
245 IsAcceptableTarget(Inst, Candidate))
251 for (succ_iterator I = succ_begin(Inst->getParent()),
252 E = succ_end(Inst->getParent()); I != E && SuccToSinkTo == 0; ++I) {
253 if (IsAcceptableTarget(Inst, *I))
261 DEBUG(dbgs() << "Sink" << *Inst << " (";
262 WriteAsOperand(dbgs(), Inst->getParent(), false);
268 Inst->moveBefore(SuccToSinkTo->getFirstInsertionPt());