Lines Matching refs:CI
106 bool EliminateRecursiveTailCall(CallInst *CI, ReturnInst *Ret,
120 bool CanMoveAboveCall(Instruction *I, CallInst *CI);
121 Value *CanTransformAccumulatorRecursion(Instruction *I, CallInst *CI);
301 CallInst *CI = dyn_cast<CallInst>(&I); in markTails() local
302 if (!CI || CI->isTailCall()) in markTails()
305 if (CI->doesNotAccessMemory()) { in markTails()
314 for (auto &Arg : CI->arg_operands()) { in markTails()
325 F.getContext(), "tailcallelim", F, CI->getDebugLoc(), in markTails()
327 CI->setTailCall(); in markTails()
333 if (Escaped == UNESCAPED && !Tracker.AllocaUsers.count(CI)) { in markTails()
334 DeferredTails.push_back(CI); in markTails()
367 for (CallInst *CI : DeferredTails) { in markTails()
368 if (Visited[CI->getParent()] != ESCAPED) { in markTails()
372 CI->getDebugLoc(), in markTails()
374 CI->setTailCall(); in markTails()
442 bool TailCallElim::CanMoveAboveCall(Instruction *I, CallInst *CI) { in CanMoveAboveCall() argument
450 if (CI->mayHaveSideEffects()) { in CanMoveAboveCall()
455 if (CI->mayWriteToMemory() || in CanMoveAboveCall()
468 if (I->getOperand(i) == CI) in CanMoveAboveCall()
478 static bool isDynamicConstant(Value *V, CallInst *CI, ReturnInst *RI) { in isDynamicConstant() argument
486 Function *F = CI->getParent()->getParent(); in isDynamicConstant()
493 if (CI->getArgOperand(ArgNo) == Arg) in isDynamicConstant()
512 static Value *getCommonReturnValue(ReturnInst *IgnoreRI, CallInst *CI) { in getCommonReturnValue() argument
513 Function *F = CI->getParent()->getParent(); in getCommonReturnValue()
525 if (!isDynamicConstant(RetOp, CI, RI)) in getCommonReturnValue()
539 CallInst *CI) { in CanTransformAccumulatorRecursion() argument
545 if ((I->getOperand(0) == CI && I->getOperand(1) == CI) || in CanTransformAccumulatorRecursion()
546 (I->getOperand(0) != CI && I->getOperand(1) != CI)) in CanTransformAccumulatorRecursion()
556 return getCommonReturnValue(cast<ReturnInst>(I->user_back()), CI); in CanTransformAccumulatorRecursion()
576 CallInst *CI = nullptr; in FindTRECandidate() local
579 CI = dyn_cast<CallInst>(BBI); in FindTRECandidate()
580 if (CI && CI->getCalledFunction() == F) in FindTRECandidate()
590 if (CI->isTailCall() && CannotTailCallElimCallsMarkedTail) in FindTRECandidate()
598 FirstNonDbg(BB->front()) == CI && in FindTRECandidate()
600 CI->getCalledFunction() && in FindTRECandidate()
601 !TTI->isLoweredToCall(CI->getCalledFunction())) { in FindTRECandidate()
604 CallSite::arg_iterator I = CallSite(CI).arg_begin(), in FindTRECandidate()
605 E = CallSite(CI).arg_end(); in FindTRECandidate()
614 return CI; in FindTRECandidate()
617 bool TailCallElim::EliminateRecursiveTailCall(CallInst *CI, ReturnInst *Ret, in EliminateRecursiveTailCall() argument
639 BasicBlock::iterator BBI = CI; in EliminateRecursiveTailCall()
641 if (CanMoveAboveCall(BBI, CI)) continue; in EliminateRecursiveTailCall()
648 CanTransformAccumulatorRecursion(BBI, CI))) { in EliminateRecursiveTailCall()
661 if (Ret->getNumOperands() == 1 && Ret->getReturnValue() != CI && in EliminateRecursiveTailCall()
664 !getCommonReturnValue(nullptr, CI)) { in EliminateRecursiveTailCall()
668 if (!isDynamicConstant(Ret->getReturnValue(), CI, Ret)) in EliminateRecursiveTailCall()
672 AccumulatorRecursionEliminationInitVal = getCommonReturnValue(Ret, CI); in EliminateRecursiveTailCall()
680 emitOptimizationRemark(F->getContext(), "tailcallelim", *F, CI->getDebugLoc(), in EliminateRecursiveTailCall()
694 TailCallsAreMarkedTail = CI->isTailCall(); in EliminateRecursiveTailCall()
724 if (TailCallsAreMarkedTail && !CI->isTailCall()) in EliminateRecursiveTailCall()
730 for (unsigned i = 0, e = CI->getNumArgOperands(); i != e; ++i) in EliminateRecursiveTailCall()
731 ArgumentPHIs[i]->addIncoming(CI->getArgOperand(i), BB); in EliminateRecursiveTailCall()
769 AccRecInstr->setOperand(AccRecInstr->getOperand(0) != CI, AccPN); in EliminateRecursiveTailCall()
788 NewBI->setDebugLoc(CI->getDebugLoc()); in EliminateRecursiveTailCall()
791 BB->getInstList().erase(CI); // Remove call. in EliminateRecursiveTailCall()
819 if (CallInst *CI = FindTRECandidate(BI, CannotTailCallElimCallsMarkedTail)){ in FoldReturnAndProcessPred() local
831 EliminateRecursiveTailCall(CI, RI, OldEntry, TailCallsAreMarkedTail, in FoldReturnAndProcessPred()
847 CallInst *CI = FindTRECandidate(Ret, CannotTailCallElimCallsMarkedTail); in ProcessReturningBlock() local
848 if (!CI) in ProcessReturningBlock()
851 return EliminateRecursiveTailCall(CI, Ret, OldEntry, TailCallsAreMarkedTail, in ProcessReturningBlock()