Lines Matching defs:CGF

53 LValue CGObjCRuntime::EmitValueForIvarAtOffset(CodeGen::CodeGenFunction &CGF,
62 CGF.CGM.getContext().getObjCObjectPointerType(InterfaceTy);
65 llvm::Type *LTy = CGF.CGM.getTypes().ConvertTypeForMem(IvarTy);
66 llvm::Value *V = CGF.Builder.CreateBitCast(BaseValue, CGF.Int8PtrTy);
67 V = CGF.Builder.CreateInBoundsGEP(CGF.Int8Ty, V, Offset, "add.ptr");
70 V = CGF.Builder.CreateBitCast(V, llvm::PointerType::getUnqual(LTy));
71 LValue LV = CGF.MakeNaturalAlignAddrLValue(V, IvarTy);
90 CGF.CGM.getContext().lookupFieldBitOffset(OID, nullptr, Ivar);
91 uint64_t BitOffset = FieldBitOffset % CGF.CGM.getContext().getCharWidth();
92 uint64_t AlignmentBits = CGF.CGM.getTarget().getCharAlign();
93 uint64_t BitFieldSize = Ivar->getBitWidthValue(CGF.getContext());
94 CharUnits StorageSize = CGF.CGM.getContext().toCharUnitsFromBits(
96 CharUnits Alignment = CGF.CGM.getContext().toCharUnitsFromBits(AlignmentBits);
104 CGBitFieldInfo *Info = new (CGF.CGM.getContext()) CGBitFieldInfo(
105 CGBitFieldInfo::MakeInfo(CGF.CGM.getTypes(), Ivar, BitOffset, BitFieldSize,
106 CGF.CGM.getContext().toBits(StorageSize),
110 Addr = CGF.Builder.CreateElementBitCast(Addr,
111 llvm::Type::getIntNTy(CGF.getLLVMContext(),
134 void Emit(CodeGenFunction &CGF, Flags flags) override {
136 CGF.EmitRuntimeCallOrInvoke(Fn);
138 CGF.EmitNounwindRuntimeCall(Fn);
143 void CGObjCRuntime::EmitTryCatchStmt(CodeGenFunction &CGF,
151 Cont = CGF.getJumpDestInCurrentScope("eh.cont");
153 bool useFunclets = EHPersonality::get(CGF).usesFuncletPads();
158 FinallyInfo.enter(CGF, Finally->getFinallyBody(),
174 Handler.Block = CGF.createBasicBlock("catch");
189 EHCatchScope *Catch = CGF.EHStack.pushCatch(Handlers.size());
197 if (!CGF.CurSEHParent)
198 CGF.CurSEHParent = cast<NamedDecl>(CGF.CurFuncDecl);
201 HelperCGF.startOutlinedSEHHelper(CGF, /*isFilter*/false, FinallyBlock);
212 CGF.pushSEHCleanup(NormalAndEHCleanup, FinallyFunc);
217 CGF.EmitStmt(S.getTryBody());
221 CGF.popCatchScope();
224 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP();
230 CGF.EmitBlock(Handler.Block);
232 SaveAndRestore<llvm::Instruction *> RestoreCurrentFuncletPad(CGF.CurrentFuncletPad);
235 CGF.CurrentFuncletPad = CPI;
236 CPI->setOperand(2, CGF.getExceptionSlot().getPointer());
238 llvm::Value *RawExn = CGF.getExceptionFromSlot();
243 Exn = CGF.EmitNounwindRuntimeCall(beginCatchFn, RawExn, "exn.adjusted");
245 CodeGenFunction::LexicalScope cleanups(CGF, Handler.Body->getSourceRange());
251 CGF.EHStack.pushCleanup<CallObjCEndCatch>(NormalAndEHCleanup,
258 llvm::Type *CatchType = CGF.ConvertType(CatchParam->getType());
259 llvm::Value *CastExn = CGF.Builder.CreateBitCast(Exn, CatchType);
261 CGF.EmitAutoVarDecl(*CatchParam);
262 EmitInitOfCatchParam(CGF, CastExn, CatchParam);
265 CGF.EHStack.pushCleanup<CatchRetScope>(NormalCleanup, CPI);
267 CGF.ObjCEHValueStack.push_back(Exn);
268 CGF.EmitStmt(Handler.Body);
269 CGF.ObjCEHValueStack.pop_back();
274 CGF.EmitBranchThroughCleanup(Cont);
278 CGF.Builder.restoreIP(SavedIP);
282 FinallyInfo.exit(CGF);
285 CGF.EmitBlock(Cont.getBlock());
288 void CGObjCRuntime::EmitInitOfCatchParam(CodeGenFunction &CGF,
292 Address paramAddr = CGF.GetAddrOfLocalVar(paramDecl);
296 exn = CGF.EmitARCRetainNonBlock(exn);
302 CGF.Builder.CreateStore(exn, paramAddr);
306 CGF.EmitARCInitWeak(paramAddr, exn);
319 void Emit(CodeGenFunction &CGF, Flags flags) override {
320 CGF.EmitNounwindRuntimeCall(SyncExitFn, SyncArg);
325 void CGObjCRuntime::EmitAtSynchronizedStmt(CodeGenFunction &CGF,
329 CodeGenFunction::RunCleanupsScope cleanups(CGF);
335 if (CGF.getLangOpts().ObjCAutoRefCount) {
336 lock = CGF.EmitARCRetainScalarExpr(lockExpr);
337 lock = CGF.EmitObjCConsumeObject(lockExpr->getType(), lock);
339 lock = CGF.EmitScalarExpr(lockExpr);
341 lock = CGF.Builder.CreateBitCast(lock, CGF.VoidPtrTy);
344 CGF.Builder.CreateCall(syncEnterFn, lock)->setDoesNotThrow();
347 CGF.EHStack.pushCleanup<CallSyncExit>(NormalAndEHCleanup, syncExitFn, lock);
350 CGF.EmitStmt(S.getSynchBody());