Lines Matching refs:CGF
92 static const EHPersonality &get(CodeGenFunction &CGF) { in get()
93 return get(CGF.CGM, dyn_cast_or_null<FunctionDecl>(CGF.CurCodeDecl)); in get()
346 static llvm::Constant *getCatchAllValue(CodeGenFunction &CGF) { in getCatchAllValue() argument
348 return llvm::ConstantPointerNull::get(CGF.Int8PtrTy); in getCatchAllValue()
357 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
358 CGF.EmitNounwindRuntimeCall(getFreeExceptionFn(CGF.CGM), exn); in Emit()
475 static void emitFilterDispatchBlock(CodeGenFunction &CGF, in emitFilterDispatchBlock() argument
484 CGF.EmitBlockAfterUses(dispatchBlock); in emitFilterDispatchBlock()
490 llvm::Value *selector = CGF.getSelectorFromSlot(); in emitFilterDispatchBlock()
491 llvm::BasicBlock *unexpectedBB = CGF.createBasicBlock("ehspec.unexpected"); in emitFilterDispatchBlock()
493 llvm::Value *zero = CGF.Builder.getInt32(0); in emitFilterDispatchBlock()
495 CGF.Builder.CreateICmpSLT(selector, zero, "ehspec.fails"); in emitFilterDispatchBlock()
496 CGF.Builder.CreateCondBr(failsFilter, unexpectedBB, in emitFilterDispatchBlock()
497 CGF.getEHResumeBlock(false)); in emitFilterDispatchBlock()
499 CGF.EmitBlock(unexpectedBB); in emitFilterDispatchBlock()
506 llvm::Value *exn = CGF.getExceptionFromSlot(); in emitFilterDispatchBlock()
507 CGF.EmitRuntimeCall(getUnexpectedFn(CGF.CGM), exn) in emitFilterDispatchBlock()
509 CGF.Builder.CreateUnreachable(); in emitFilterDispatchBlock()
819 static void emitCatchDispatchBlock(CodeGenFunction &CGF, in emitCatchDispatchBlock() argument
832 CGBuilderTy::InsertPoint savedIP = CGF.Builder.saveIP(); in emitCatchDispatchBlock()
833 CGF.EmitBlockAfterUses(dispatchBlock); in emitCatchDispatchBlock()
837 CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_typeid_for); in emitCatchDispatchBlock()
840 llvm::Value *selector = CGF.getSelectorFromSlot(); in emitCatchDispatchBlock()
849 typeValue = CGF.Builder.CreateBitCast(typeValue, CGF.Int8PtrTy); in emitCatchDispatchBlock()
858 nextBlock = CGF.getEHDispatchBlock(catchScope.getEnclosingEHScope()); in emitCatchDispatchBlock()
869 nextBlock = CGF.createBasicBlock("catch.fallthrough"); in emitCatchDispatchBlock()
875 CGF.Builder.CreateCall(llvm_eh_typeid_for, typeValue); in emitCatchDispatchBlock()
879 CGF.Builder.CreateICmpEQ(selector, typeIndex, "matches"); in emitCatchDispatchBlock()
880 CGF.Builder.CreateCondBr(matchesTypeIndex, handler.Block, nextBlock); in emitCatchDispatchBlock()
884 CGF.Builder.restoreIP(savedIP); in emitCatchDispatchBlock()
888 CGF.EmitBlock(nextBlock); in emitCatchDispatchBlock()
999 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1000 llvm::BasicBlock *EndCatchBB = CGF.createBasicBlock("finally.endcatch"); in Emit()
1002 CGF.createBasicBlock("finally.cleanup.cont"); in Emit()
1005 CGF.Builder.CreateLoad(ForEHVar, "finally.endcatch"); in Emit()
1006 CGF.Builder.CreateCondBr(ShouldEndCatch, EndCatchBB, CleanupContBB); in Emit()
1007 CGF.EmitBlock(EndCatchBB); in Emit()
1008 CGF.EmitRuntimeCallOrInvoke(EndCatchFn); // catch-all, so might throw in Emit()
1009 CGF.EmitBlock(CleanupContBB); in Emit()
1026 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1029 CGF.EHStack.pushCleanup<CallEndCatchForFinally>(NormalAndEHCleanup, in Emit()
1035 CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot(), in Emit()
1039 CGF.EmitStmt(Body); in Emit()
1043 if (CGF.HaveInsertPoint()) { in Emit()
1044 llvm::BasicBlock *RethrowBB = CGF.createBasicBlock("finally.rethrow"); in Emit()
1045 llvm::BasicBlock *ContBB = CGF.createBasicBlock("finally.cont"); in Emit()
1048 CGF.Builder.CreateLoad(ForEHVar, "finally.shouldthrow"); in Emit()
1049 CGF.Builder.CreateCondBr(ShouldRethrow, RethrowBB, ContBB); in Emit()
1051 CGF.EmitBlock(RethrowBB); in Emit()
1053 CGF.EmitRuntimeCallOrInvoke(RethrowFn, in Emit()
1054 CGF.Builder.CreateLoad(SavedExnVar)); in Emit()
1056 CGF.EmitRuntimeCallOrInvoke(RethrowFn); in Emit()
1058 CGF.Builder.CreateUnreachable(); in Emit()
1060 CGF.EmitBlock(ContBB); in Emit()
1063 CGF.Builder.CreateStore(SavedCleanupDest, in Emit()
1064 CGF.getNormalCleanupDestSlot()); in Emit()
1071 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP(); in Emit()
1072 CGF.PopCleanupBlock(); in Emit()
1073 CGF.Builder.restoreIP(SavedIP); in Emit()
1078 CGF.EnsureInsertPoint(); in Emit()
1086 void CodeGenFunction::FinallyInfo::enter(CodeGenFunction &CGF, in enter() argument
1108 SavedExnVar = CGF.CreateTempAlloca(CGF.Int8PtrTy, "finally.exn"); in enter()
1125 RethrowDest = CGF.getJumpDestInCurrentScope(CGF.getUnreachableBlock()); in enter()
1128 ForEHVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(), "finally.for-eh"); in enter()
1129 CGF.Builder.CreateStore(CGF.Builder.getFalse(), ForEHVar); in enter()
1132 CGF.EHStack.pushCleanup<PerformFinally>(NormalCleanup, body, in enter()
1137 llvm::BasicBlock *catchBB = CGF.createBasicBlock("finally.catchall"); in enter()
1138 EHCatchScope *catchScope = CGF.EHStack.pushCatch(1); in enter()
1142 void CodeGenFunction::FinallyInfo::exit(CodeGenFunction &CGF) { in exit() argument
1144 EHCatchScope &catchScope = cast<EHCatchScope>(*CGF.EHStack.begin()); in exit()
1147 CGF.popCatchScope(); in exit()
1153 CGBuilderTy::InsertPoint savedIP = CGF.Builder.saveAndClearIP(); in exit()
1154 CGF.EmitBlock(catchBB); in exit()
1160 exn = CGF.getExceptionFromSlot(); in exit()
1161 CGF.EmitNounwindRuntimeCall(BeginCatchFn, exn); in exit()
1166 if (!exn) exn = CGF.getExceptionFromSlot(); in exit()
1167 CGF.Builder.CreateStore(exn, SavedExnVar); in exit()
1171 CGF.Builder.CreateStore(CGF.Builder.getTrue(), ForEHVar); in exit()
1174 CGF.EmitBranchThroughCleanup(RethrowDest); in exit()
1176 CGF.Builder.restoreIP(savedIP); in exit()
1180 CGF.PopCleanupBlock(); in exit()
1306 void Emit(CodeGenFunction &CGF, Flags F) override { in Emit()
1307 ASTContext &Context = CGF.getContext(); in Emit()
1315 llvm::ConstantInt::get(CGF.ConvertType(ArgTys[0]), F.isForEHCleanup()); in Emit()
1318 CodeGenModule &CGM = CGF.CGM; in Emit()
1321 llvm::Value *FP = CGF.Builder.CreateCall(FrameAddr, Zero); in Emit()
1326 CGF.EmitCall(FnInfo, OutlinedFinally, ReturnValueSlot(), Args); in Emit()