Lines Matching +full:ri +full:- +full:override

1 //===- DwarfEHPrepare - Prepare exception handling for code generation ----===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
45 #define DEBUG_TYPE "dwarf-eh-prepare"
69 Value *GetExceptionObject(ResumeInst *RI);
93 Value *DwarfEHPrepare::GetExceptionObject(ResumeInst *RI) { in GetExceptionObject() argument
94 Value *V = RI->getOperand(0); in GetExceptionObject()
102 if (SelIVI->getNumIndices() == 1 && *SelIVI->idx_begin() == 1) { in GetExceptionObject()
103 ExcIVI = dyn_cast<InsertValueInst>(SelIVI->getOperand(0)); in GetExceptionObject()
104 if (ExcIVI && isa<UndefValue>(ExcIVI->getOperand(0)) && in GetExceptionObject()
105 ExcIVI->getNumIndices() == 1 && *ExcIVI->idx_begin() == 0) { in GetExceptionObject()
106 ExnObj = ExcIVI->getOperand(1); in GetExceptionObject()
107 SelLoad = dyn_cast<LoadInst>(SelIVI->getOperand(1)); in GetExceptionObject()
114 ExnObj = ExtractValueInst::Create(RI->getOperand(0), 0, "exn.obj", in GetExceptionObject()
115 RI->getIterator()); in GetExceptionObject()
117 RI->eraseFromParent(); in GetExceptionObject()
120 if (SelIVI->use_empty()) in GetExceptionObject()
121 SelIVI->eraseFromParent(); in GetExceptionObject()
122 if (ExcIVI->use_empty()) in GetExceptionObject()
123 ExcIVI->eraseFromParent(); in GetExceptionObject()
124 if (SelLoad && SelLoad->use_empty()) in GetExceptionObject()
125 SelLoad->eraseFromParent(); in GetExceptionObject()
138 for (auto *RI : Resumes) { in pruneUnreachableResumes() local
140 if (isPotentiallyReachable(LP, RI, nullptr, &DTU->getDomTree())) { in pruneUnreachableResumes()
157 ResumeInst *RI = Resumes[I]; in pruneUnreachableResumes() local
159 Resumes[ResumesLeft++] = RI; in pruneUnreachableResumes()
161 BasicBlock *BB = RI->getParent(); in pruneUnreachableResumes()
162 new UnreachableInst(Ctx, RI->getIterator()); in pruneUnreachableResumes()
163 RI->eraseFromParent(); in pruneUnreachableResumes()
179 if (auto *RI = dyn_cast<ResumeInst>(BB.getTerminator())) in InsertUnwindResumeCalls() local
180 Resumes.push_back(RI); in InsertUnwindResumeCalls()
182 if (LP->isCleanup()) in InsertUnwindResumeCalls()
191 // Check the personality, don't do anything if it's scope-based. in InsertUnwindResumeCalls()
205 if (LP->isCleanup()) in InsertUnwindResumeCalls()
208 NumCleanupLandingPadsUnreachable += CleanupLPads.size() - NumRemainingLPs; in InsertUnwindResumeCalls()
209 NumCleanupLandingPadsRemaining -= CleanupLPads.size() - NumRemainingLPs; in InsertUnwindResumeCalls()
216 // RewindFunction - _Unwind_Resume or the target equivalent. in InsertUnwindResumeCalls()
237 RewindFunction = F.getParent()->getOrInsertFunction(RewindName, FTy); in InsertUnwindResumeCalls()
243 ResumeInst *RI = Resumes.front(); in InsertUnwindResumeCalls() local
244 BasicBlock *UnwindBB = RI->getParent(); in InsertUnwindResumeCalls()
245 Value *ExnObj = GetExceptionObject(RI); in InsertUnwindResumeCalls()
253 // The verifier requires that all calls of debug-info-bearing functions in InsertUnwindResumeCalls()
254 // from debug-info-bearing functions have a debug location (for inlining in InsertUnwindResumeCalls()
257 if (RewindFn && RewindFn->getSubprogram()) in InsertUnwindResumeCalls()
259 CI->setDebugLoc(DILocation::get(SP->getContext(), 0, 0, SP)); in InsertUnwindResumeCalls()
260 CI->setCallingConv(RewindFunctionCallingConv); in InsertUnwindResumeCalls()
263 CI->setDoesNotReturn(); in InsertUnwindResumeCalls()
279 for (ResumeInst *RI : Resumes) { in InsertUnwindResumeCalls()
280 BasicBlock *Parent = RI->getParent(); in InsertUnwindResumeCalls()
284 Value *ExnObj = GetExceptionObject(RI); in InsertUnwindResumeCalls()
285 PN->addIncoming(ExnObj, Parent); in InsertUnwindResumeCalls()
296 // The verifier requires that all calls of debug-info-bearing functions in InsertUnwindResumeCalls()
297 // from debug-info-bearing functions have a debug location (for inlining in InsertUnwindResumeCalls()
300 if (RewindFn && RewindFn->getSubprogram()) in InsertUnwindResumeCalls()
302 CI->setDebugLoc(DILocation::get(SP->getContext(), 0, 0, SP)); in InsertUnwindResumeCalls()
303 CI->setCallingConv(RewindFunctionCallingConv); in InsertUnwindResumeCalls()
306 CI->setDoesNotReturn(); in InsertUnwindResumeCalls()
310 DTU->applyUpdates(Updates); in InsertUnwindResumeCalls()
344 bool runOnFunction(Function &F) override { in runOnFunction()
347 const TargetLowering &TLI = *TM.getSubtargetImpl(F)->getTargetLowering(); in runOnFunction()
351 DT = &DTWP->getDomTree(); in runOnFunction()
360 void getAnalysisUsage(AnalysisUsage &AU) const override { in getAnalysisUsage()
370 StringRef getPassName() const override { in getPassName()
379 const auto &TLI = *TM->getSubtargetImpl(F)->getTargetLowering(); in run()
382 auto OptLevel = TM->getOptLevel(); in run()
389 prepareDwarfEH(OptLevel, F, TLI, DT, TTI, TM->getTargetTriple()); in run()