Lines Matching defs:CGF

54 LValue CGObjCRuntime::EmitValueForIvarAtOffset(CodeGen::CodeGenFunction &CGF,
63 CGF.CGM.getContext().getObjCObjectPointerType(InterfaceTy);
67 V = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, V, Offset, "add.ptr");
70 LValue LV = CGF.MakeNaturalAlignRawAddrLValue(V, IvarTy);
89 CGF.CGM.getContext().lookupFieldBitOffset(OID, nullptr, Ivar);
90 uint64_t BitOffset = FieldBitOffset % CGF.CGM.getContext().getCharWidth();
91 uint64_t AlignmentBits = CGF.CGM.getTarget().getCharAlign();
93 CharUnits StorageSize = CGF.CGM.getContext().toCharUnitsFromBits(
95 CharUnits Alignment = CGF.CGM.getContext().toCharUnitsFromBits(AlignmentBits);
103 CGBitFieldInfo *Info = new (CGF.CGM.getContext()) CGBitFieldInfo(
104 CGBitFieldInfo::MakeInfo(CGF.CGM.getTypes(), Ivar, BitOffset, BitFieldSize,
105 CGF.CGM.getContext().toBits(StorageSize),
109 Address(V, llvm::Type::getIntNTy(CGF.getLLVMContext(), Info->StorageSize),
133 void Emit(CodeGenFunction &CGF, Flags flags) override {
135 CGF.EmitRuntimeCallOrInvoke(Fn);
137 CGF.EmitNounwindRuntimeCall(Fn);
142 void CGObjCRuntime::EmitTryCatchStmt(CodeGenFunction &CGF,
150 Cont = CGF.getJumpDestInCurrentScope("eh.cont");
152 bool useFunclets = EHPersonality::get(CGF).usesFuncletPads();
157 FinallyInfo.enter(CGF, Finally->getFinallyBody(),
172 Handler.Block = CGF.createBasicBlock("catch");
187 EHCatchScope *Catch = CGF.EHStack.pushCatch(Handlers.size());
195 if (!CGF.CurSEHParent)
196 CGF.CurSEHParent = cast<NamedDecl>(CGF.CurFuncDecl);
199 HelperCGF.startOutlinedSEHHelper(CGF, /*isFilter*/false, FinallyBlock);
210 CGF.pushSEHCleanup(NormalAndEHCleanup, FinallyFunc);
215 CGF.EmitStmt(S.getTryBody());
219 CGF.popCatchScope();
222 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP();
228 CGF.EmitBlock(Handler.Block);
230 CodeGenFunction::LexicalScope Cleanups(CGF, Handler.Body->getSourceRange());
231 SaveAndRestore RevertAfterScope(CGF.CurrentFuncletPad);
237 CGF.CurrentFuncletPad = CPI;
238 CPI->setOperand(2, CGF.getExceptionSlot().emitRawPointer(CGF));
239 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
244 llvm::Value *RawExn = CGF.getExceptionFromSlot();
249 Exn = CGF.EmitNounwindRuntimeCall(beginCatchFn, RawExn, "exn.adjusted");
255 CGF.EHStack.pushCleanup<CallObjCEndCatch>(NormalAndEHCleanup,
262 llvm::Type *CatchType = CGF.ConvertType(CatchParam->getType());
263 llvm::Value *CastExn = CGF.Builder.CreateBitCast(Exn, CatchType);
265 CGF.EmitAutoVarDecl(*CatchParam);
266 EmitInitOfCatchParam(CGF, CastExn, CatchParam);
269 CGF.ObjCEHValueStack.push_back(Exn);
270 CGF.EmitStmt(Handler.Body);
271 CGF.ObjCEHValueStack.pop_back();
276 CGF.EmitBranchThroughCleanup(Cont);
280 CGF.Builder.restoreIP(SavedIP);
284 FinallyInfo.exit(CGF);
287 CGF.EmitBlock(Cont.getBlock());
290 void CGObjCRuntime::EmitInitOfCatchParam(CodeGenFunction &CGF,
294 Address paramAddr = CGF.GetAddrOfLocalVar(paramDecl);
298 exn = CGF.EmitARCRetainNonBlock(exn);
304 CGF.Builder.CreateStore(exn, paramAddr);
308 CGF.EmitARCInitWeak(paramAddr, exn);
321 void Emit(CodeGenFunction &CGF, Flags flags) override {
322 CGF.EmitNounwindRuntimeCall(SyncExitFn, SyncArg);
327 void CGObjCRuntime::EmitAtSynchronizedStmt(CodeGenFunction &CGF,
331 CodeGenFunction::RunCleanupsScope cleanups(CGF);
337 if (CGF.getLangOpts().ObjCAutoRefCount) {
338 lock = CGF.EmitARCRetainScalarExpr(lockExpr);
339 lock = CGF.EmitObjCConsumeObject(lockExpr->getType(), lock);
341 lock = CGF.EmitScalarExpr(lockExpr);
343 lock = CGF.Builder.CreateBitCast(lock, CGF.VoidPtrTy);
346 CGF.Builder.CreateCall(syncEnterFn, lock)->setDoesNotThrow();
349 CGF.EHStack.pushCleanup<CallSyncExit>(NormalAndEHCleanup, syncExitFn, lock);
352 CGF.EmitStmt(S.getSynchBody());
389 bool CGObjCRuntime::canMessageReceiverBeNull(CodeGenFunction &CGF,
407 dyn_cast_or_null<ObjCMethodDecl>(CGF.CurCodeDecl)) {
411 llvm::Value *selfAddr = CGF.GetAddrOfLocalVar(self).emitRawPointer(CGF);
432 void CGObjCRuntime::destroyCalleeDestroyedArguments(CodeGenFunction &CGF,
440 RValue RV = I->getRValue(CGF);
443 CGF.EmitARCRelease(RV.getScalarVal(), ARCImpreciseLifetime);
448 RValue RV = I->getRValue(CGF);
452 CGF.destroyCXXObject(CGF, RV.getAggregateAddress(), QT);
455 CGF.destroyNonTrivialCStruct(CGF, RV.getAggregateAddress(), QT);