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();
92 uint64_t BitFieldSize = Ivar->getBitWidthValue(CGF.getContext());
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);
235 CGF.CurrentFuncletPad = CPI;
236 CPI->setOperand(2, CGF.getExceptionSlot().emitRawPointer(CGF));
237 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
241 llvm::Value *RawExn = CGF.getExceptionFromSlot();
246 Exn = CGF.EmitNounwindRuntimeCall(beginCatchFn, RawExn, "exn.adjusted");
252 CGF.EHStack.pushCleanup<CallObjCEndCatch>(NormalAndEHCleanup,
259 llvm::Type *CatchType = CGF.ConvertType(CatchParam->getType());
260 llvm::Value *CastExn = CGF.Builder.CreateBitCast(Exn, CatchType);
262 CGF.EmitAutoVarDecl(*CatchParam);
263 EmitInitOfCatchParam(CGF, CastExn, CatchParam);
266 CGF.ObjCEHValueStack.push_back(Exn);
267 CGF.EmitStmt(Handler.Body);
268 CGF.ObjCEHValueStack.pop_back();
273 CGF.EmitBranchThroughCleanup(Cont);
277 CGF.Builder.restoreIP(SavedIP);
281 FinallyInfo.exit(CGF);
284 CGF.EmitBlock(Cont.getBlock());
287 void CGObjCRuntime::EmitInitOfCatchParam(CodeGenFunction &CGF,
291 Address paramAddr = CGF.GetAddrOfLocalVar(paramDecl);
295 exn = CGF.EmitARCRetainNonBlock(exn);
301 CGF.Builder.CreateStore(exn, paramAddr);
305 CGF.EmitARCInitWeak(paramAddr, exn);
318 void Emit(CodeGenFunction &CGF, Flags flags) override {
319 CGF.EmitNounwindRuntimeCall(SyncExitFn, SyncArg);
324 void CGObjCRuntime::EmitAtSynchronizedStmt(CodeGenFunction &CGF,
328 CodeGenFunction::RunCleanupsScope cleanups(CGF);
334 if (CGF.getLangOpts().ObjCAutoRefCount) {
335 lock = CGF.EmitARCRetainScalarExpr(lockExpr);
336 lock = CGF.EmitObjCConsumeObject(lockExpr->getType(), lock);
338 lock = CGF.EmitScalarExpr(lockExpr);
340 lock = CGF.Builder.CreateBitCast(lock, CGF.VoidPtrTy);
343 CGF.Builder.CreateCall(syncEnterFn, lock)->setDoesNotThrow();
346 CGF.EHStack.pushCleanup<CallSyncExit>(NormalAndEHCleanup, syncExitFn, lock);
349 CGF.EmitStmt(S.getSynchBody());
386 bool CGObjCRuntime::canMessageReceiverBeNull(CodeGenFunction &CGF,
404 dyn_cast_or_null<ObjCMethodDecl>(CGF.CurCodeDecl)) {
408 llvm::Value *selfAddr = CGF.GetAddrOfLocalVar(self).emitRawPointer(CGF);
429 void CGObjCRuntime::destroyCalleeDestroyedArguments(CodeGenFunction &CGF,
437 RValue RV = I->getRValue(CGF);
440 CGF.EmitARCRelease(RV.getScalarVal(), ARCImpreciseLifetime);
445 RValue RV = I->getRValue(CGF);
449 CGF.destroyCXXObject(CGF, RV.getAggregateAddress(), QT);
452 CGF.destroyNonTrivialCStruct(CGF, RV.getAggregateAddress(), QT);