Lines Matching refs:CGF
254 const EHPersonality &EHPersonality::get(CodeGenFunction &CGF) { in get() argument
255 const auto *FD = CGF.CurCodeDecl; in get()
259 FD = FD ? FD : CGF.CurSEHParent.getDecl(); in get()
260 return get(CGF.CGM, dyn_cast_or_null<FunctionDecl>(FD)); in get()
376 static llvm::Constant *getCatchAllValue(CodeGenFunction &CGF) { in getCatchAllValue() argument
378 return llvm::ConstantPointerNull::get(CGF.Int8PtrTy); in getCatchAllValue()
387 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
388 CGF.EmitNounwindRuntimeCall(getFreeExceptionFn(CGF.CGM), exn); in Emit()
543 static void emitFilterDispatchBlock(CodeGenFunction &CGF, in emitFilterDispatchBlock() argument
552 CGF.EmitBlockAfterUses(dispatchBlock); in emitFilterDispatchBlock()
558 llvm::Value *selector = CGF.getSelectorFromSlot(); in emitFilterDispatchBlock()
559 llvm::BasicBlock *unexpectedBB = CGF.createBasicBlock("ehspec.unexpected"); in emitFilterDispatchBlock()
561 llvm::Value *zero = CGF.Builder.getInt32(0); in emitFilterDispatchBlock()
563 CGF.Builder.CreateICmpSLT(selector, zero, "ehspec.fails"); in emitFilterDispatchBlock()
564 CGF.Builder.CreateCondBr(failsFilter, unexpectedBB, in emitFilterDispatchBlock()
565 CGF.getEHResumeBlock(false)); in emitFilterDispatchBlock()
567 CGF.EmitBlock(unexpectedBB); in emitFilterDispatchBlock()
574 llvm::Value *exn = CGF.getExceptionFromSlot(); in emitFilterDispatchBlock()
575 CGF.EmitRuntimeCall(getUnexpectedFn(CGF.CGM), exn) in emitFilterDispatchBlock()
577 CGF.Builder.CreateUnreachable(); in emitFilterDispatchBlock()
966 static void emitCatchPadBlock(CodeGenFunction &CGF, EHCatchScope &CatchScope) { in emitCatchPadBlock() argument
970 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveIP(); in emitCatchPadBlock()
971 CGF.EmitBlockAfterUses(DispatchBlock); in emitCatchPadBlock()
973 llvm::Value *ParentPad = CGF.CurrentFuncletPad; in emitCatchPadBlock()
975 ParentPad = llvm::ConstantTokenNone::get(CGF.getLLVMContext()); in emitCatchPadBlock()
977 CGF.getEHDispatchBlock(CatchScope.getEnclosingEHScope()); in emitCatchPadBlock()
981 CGF.Builder.CreateCatchSwitch(ParentPad, UnwindBB, NumHandlers); in emitCatchPadBlock()
989 TypeInfo.RTTI = llvm::Constant::getNullValue(CGF.VoidPtrTy); in emitCatchPadBlock()
991 CGF.Builder.SetInsertPoint(Handler.Block); in emitCatchPadBlock()
993 if (EHPersonality::get(CGF).isMSVCXXPersonality()) { in emitCatchPadBlock()
994 CGF.Builder.CreateCatchPad( in emitCatchPadBlock()
995 CatchSwitch, {TypeInfo.RTTI, CGF.Builder.getInt32(TypeInfo.Flags), in emitCatchPadBlock()
996 llvm::Constant::getNullValue(CGF.VoidPtrTy)}); in emitCatchPadBlock()
998 CGF.Builder.CreateCatchPad(CatchSwitch, {TypeInfo.RTTI}); in emitCatchPadBlock()
1003 CGF.Builder.restoreIP(SavedIP); in emitCatchPadBlock()
1009 static void emitWasmCatchPadBlock(CodeGenFunction &CGF, in emitWasmCatchPadBlock() argument
1014 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveIP(); in emitWasmCatchPadBlock()
1015 CGF.EmitBlockAfterUses(DispatchBlock); in emitWasmCatchPadBlock()
1017 llvm::Value *ParentPad = CGF.CurrentFuncletPad; in emitWasmCatchPadBlock()
1019 ParentPad = llvm::ConstantTokenNone::get(CGF.getLLVMContext()); in emitWasmCatchPadBlock()
1021 CGF.getEHDispatchBlock(CatchScope.getEnclosingEHScope()); in emitWasmCatchPadBlock()
1025 CGF.Builder.CreateCatchSwitch(ParentPad, UnwindBB, NumHandlers); in emitWasmCatchPadBlock()
1029 llvm::BasicBlock *WasmCatchStartBlock = CGF.createBasicBlock("catch.start"); in emitWasmCatchPadBlock()
1031 CGF.EmitBlockAfterUses(WasmCatchStartBlock); in emitWasmCatchPadBlock()
1039 TypeInfo.RTTI = llvm::Constant::getNullValue(CGF.VoidPtrTy); in emitWasmCatchPadBlock()
1042 auto *CPI = CGF.Builder.CreateCatchPad(CatchSwitch, CatchTypes); in emitWasmCatchPadBlock()
1048 CGF.CGM.getIntrinsic(llvm::Intrinsic::wasm_get_exception); in emitWasmCatchPadBlock()
1050 CGF.CGM.getIntrinsic(llvm::Intrinsic::wasm_get_ehselector); in emitWasmCatchPadBlock()
1051 llvm::CallInst *Exn = CGF.Builder.CreateCall(GetExnFn, CPI); in emitWasmCatchPadBlock()
1052 CGF.Builder.CreateStore(Exn, CGF.getExceptionSlot()); in emitWasmCatchPadBlock()
1053 llvm::CallInst *Selector = CGF.Builder.CreateCall(GetSelectorFn, CPI); in emitWasmCatchPadBlock()
1056 CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_typeid_for, {CGF.VoidPtrTy}); in emitWasmCatchPadBlock()
1061 CGF.Builder.CreateBr(CatchScope.getHandler(0).Block); in emitWasmCatchPadBlock()
1062 CGF.Builder.restoreIP(SavedIP); in emitWasmCatchPadBlock()
1072 TypeInfo.RTTI = llvm::Constant::getNullValue(CGF.VoidPtrTy); in emitWasmCatchPadBlock()
1083 NextBlock = CGF.createBasicBlock("rethrow"); in emitWasmCatchPadBlock()
1095 NextBlock = CGF.createBasicBlock("catch.fallthrough"); in emitWasmCatchPadBlock()
1100 llvm::CallInst *TypeIndex = CGF.Builder.CreateCall(TypeIDFn, TypeInfo.RTTI); in emitWasmCatchPadBlock()
1104 CGF.Builder.CreateICmpEQ(Selector, TypeIndex, "matches"); in emitWasmCatchPadBlock()
1105 CGF.Builder.CreateCondBr(MatchesTypeIndex, Handler.Block, NextBlock); in emitWasmCatchPadBlock()
1108 CGF.EmitBlock(NextBlock); in emitWasmCatchPadBlock()
1113 CGF.Builder.restoreIP(SavedIP); in emitWasmCatchPadBlock()
1118 static void emitCatchDispatchBlock(CodeGenFunction &CGF, in emitCatchDispatchBlock() argument
1120 if (EHPersonality::get(CGF).isWasmPersonality()) in emitCatchDispatchBlock()
1121 return emitWasmCatchPadBlock(CGF, catchScope); in emitCatchDispatchBlock()
1122 if (EHPersonality::get(CGF).usesFuncletPads()) in emitCatchDispatchBlock()
1123 return emitCatchPadBlock(CGF, catchScope); in emitCatchDispatchBlock()
1136 CGBuilderTy::InsertPoint savedIP = CGF.Builder.saveIP(); in emitCatchDispatchBlock()
1137 CGF.EmitBlockAfterUses(dispatchBlock); in emitCatchDispatchBlock()
1141 CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_typeid_for, {CGF.VoidPtrTy}); in emitCatchDispatchBlock()
1143 LangAS globAS = CGF.CGM.GetGlobalVarAddressSpace(nullptr); in emitCatchDispatchBlock()
1146 llvm::Value *selector = CGF.getSelectorFromSlot(); in emitCatchDispatchBlock()
1160 CGF.getTargetHooks().performAddrSpaceCast(CGF, typeValue, globAS, in emitCatchDispatchBlock()
1170 nextBlock = CGF.getEHDispatchBlock(catchScope.getEnclosingEHScope()); in emitCatchDispatchBlock()
1181 nextBlock = CGF.createBasicBlock("catch.fallthrough"); in emitCatchDispatchBlock()
1187 CGF.Builder.CreateCall(llvm_eh_typeid_for, typeValue); in emitCatchDispatchBlock()
1191 CGF.Builder.CreateICmpEQ(selector, typeIndex, "matches"); in emitCatchDispatchBlock()
1192 CGF.Builder.CreateCondBr(matchesTypeIndex, handler.Block, nextBlock); in emitCatchDispatchBlock()
1196 CGF.Builder.restoreIP(savedIP); in emitCatchDispatchBlock()
1200 CGF.EmitBlock(nextBlock); in emitCatchDispatchBlock()
1351 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1352 llvm::BasicBlock *EndCatchBB = CGF.createBasicBlock("finally.endcatch"); in Emit()
1354 CGF.createBasicBlock("finally.cleanup.cont"); in Emit()
1357 CGF.Builder.CreateFlagLoad(ForEHVar, "finally.endcatch"); in Emit()
1358 CGF.Builder.CreateCondBr(ShouldEndCatch, EndCatchBB, CleanupContBB); in Emit()
1359 CGF.EmitBlock(EndCatchBB); in Emit()
1360 CGF.EmitRuntimeCallOrInvoke(EndCatchFn); // catch-all, so might throw in Emit()
1361 CGF.EmitBlock(CleanupContBB); in Emit()
1378 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1381 CGF.EHStack.pushCleanup<CallEndCatchForFinally>(NormalAndEHCleanup, in Emit()
1387 CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot(), in Emit()
1391 CGF.EmitStmt(Body); in Emit()
1395 if (CGF.HaveInsertPoint()) { in Emit()
1396 llvm::BasicBlock *RethrowBB = CGF.createBasicBlock("finally.rethrow"); in Emit()
1397 llvm::BasicBlock *ContBB = CGF.createBasicBlock("finally.cont"); in Emit()
1400 CGF.Builder.CreateFlagLoad(ForEHVar, "finally.shouldthrow"); in Emit()
1401 CGF.Builder.CreateCondBr(ShouldRethrow, RethrowBB, ContBB); in Emit()
1403 CGF.EmitBlock(RethrowBB); in Emit()
1405 CGF.EmitRuntimeCallOrInvoke(RethrowFn, in Emit()
1406 CGF.Builder.CreateAlignedLoad(CGF.Int8PtrTy, SavedExnVar, in Emit()
1407 CGF.getPointerAlign())); in Emit()
1409 CGF.EmitRuntimeCallOrInvoke(RethrowFn); in Emit()
1411 CGF.Builder.CreateUnreachable(); in Emit()
1413 CGF.EmitBlock(ContBB); in Emit()
1416 CGF.Builder.CreateStore(SavedCleanupDest, in Emit()
1417 CGF.getNormalCleanupDestSlot()); in Emit()
1424 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP(); in Emit()
1425 CGF.PopCleanupBlock(); in Emit()
1426 CGF.Builder.restoreIP(SavedIP); in Emit()
1431 CGF.EnsureInsertPoint(); in Emit()
1439 void CodeGenFunction::FinallyInfo::enter(CodeGenFunction &CGF, const Stmt *body, in enter() argument
1458 SavedExnVar = CGF.CreateTempAlloca(CGF.Int8PtrTy, "finally.exn"); in enter()
1475 RethrowDest = CGF.getJumpDestInCurrentScope(CGF.getUnreachableBlock()); in enter()
1478 ForEHVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(), "finally.for-eh"); in enter()
1479 CGF.Builder.CreateFlagStore(false, ForEHVar); in enter()
1482 CGF.EHStack.pushCleanup<PerformFinally>(NormalCleanup, body, in enter()
1487 llvm::BasicBlock *catchBB = CGF.createBasicBlock("finally.catchall"); in enter()
1488 EHCatchScope *catchScope = CGF.EHStack.pushCatch(1); in enter()
1492 void CodeGenFunction::FinallyInfo::exit(CodeGenFunction &CGF) { in exit() argument
1494 EHCatchScope &catchScope = cast<EHCatchScope>(*CGF.EHStack.begin()); in exit()
1497 CGF.popCatchScope(); in exit()
1503 CGBuilderTy::InsertPoint savedIP = CGF.Builder.saveAndClearIP(); in exit()
1504 CGF.EmitBlock(catchBB); in exit()
1510 exn = CGF.getExceptionFromSlot(); in exit()
1511 CGF.EmitNounwindRuntimeCall(BeginCatchFn, exn); in exit()
1516 if (!exn) exn = CGF.getExceptionFromSlot(); in exit()
1517 CGF.Builder.CreateAlignedStore(exn, SavedExnVar, CGF.getPointerAlign()); in exit()
1521 CGF.Builder.CreateFlagStore(true, ForEHVar); in exit()
1524 CGF.EmitBranchThroughCleanup(RethrowDest); in exit()
1526 CGF.Builder.restoreIP(savedIP); in exit()
1530 CGF.PopCleanupBlock(); in exit()
1730 void Emit(CodeGenFunction &CGF, Flags F) override { in Emit()
1731 ASTContext &Context = CGF.getContext(); in Emit()
1732 CodeGenModule &CGM = CGF.CGM; in Emit()
1740 if (CGF.IsOutlinedSEHHelper) { in Emit()
1741 FP = &CGF.CurFn->arg_begin()[1]; in Emit()
1745 FP = CGF.Builder.CreateCall(LocalAddrFn); in Emit()
1749 llvm::ConstantInt::get(CGF.ConvertType(ArgTys[0]), F.isForEHCleanup()); in Emit()
1757 Address Addr = CGF.getNormalCleanupDestSlot(); in Emit()
1758 llvm::Value *Load = CGF.Builder.CreateLoad(Addr, "cleanup.dest"); in Emit()
1760 IsForEH = CGF.Builder.CreateICmpNE(Load, Zero); in Emit()
1771 CGF.EmitCall(FnInfo, Callee, ReturnValueSlot(), Args); in Emit()