Lines Matching defs:CGF

446                                             CodeGenFunction *CGF,
472 return ConstantEmitter(CGM, CGF).tryEmitAbstractForInitializer(*var);
534 static QualType getCaptureFieldType(const CodeGenFunction &CGF,
540 if (CGF.BlockInfo && CI.isNested())
541 return CGF.BlockInfo->getCapture(VD).fieldType();
542 if (auto *FD = CGF.LambdaCaptureFields.lookup(VD))
548 CGF.getContext().getLValueReferenceType(VD->getType()) : VD->getType();
553 static void computeBlockInfo(CodeGenModule &CGM, CodeGenFunction *CGF,
587 assert(CGF && isa_and_nonnull<CXXMethodDecl>(CGF->CurFuncDecl) &&
589 QualType thisType = cast<CXXMethodDecl>(CGF->CurFuncDecl)->getThisType();
612 assert(CGF && getCaptureFieldType(*CGF, CI) == variable->getType() &&
621 if (llvm::Constant *constant = tryCaptureAsConstant(CGM, CGF, variable)) {
627 QualType VT = getCaptureFieldType(*CGF, CI);
1673 void Emit(CodeGenFunction &CGF, Flags flags) override {
1676 BlockVarAddr = CGF.Builder.CreateLoad(Addr);
1678 BlockVarAddr = Addr.emitRawPointer(CGF);
1681 CGF.BuildBlockRelease(BlockVarAddr, FieldFlags, CanThrow);
1819 VarDecl *Var, CodeGenFunction &CGF) {
1828 (!EHOnly || CGF.needsEHCleanup(CaptureType.isDestructedType()))) {
1832 : CGF.getDestroyer(CaptureType.isDestructedType());
1835 : CGF.getCleanupKind(CaptureType.isDestructedType());
1836 CGF.pushDestroy(Kind, Field, CaptureType, Destroyer, Kind & EHCleanup);
1841 if (!EHOnly || CGF.getLangOpts().Exceptions) {
1847 !ForCopyHelper && CGF.cxxDestructorCanThrow(CaptureType);
1848 CGF.enterByrefCleanup(Kind, Field, Flags, /*LoadBlockVarAddr*/ true,
2145 void emitCopy(CodeGenFunction &CGF, Address destField,
2147 destField = destField.withElementType(CGF.Int8Ty);
2149 srcField = srcField.withElementType(CGF.Int8PtrTy);
2150 llvm::Value *srcValue = CGF.Builder.CreateLoad(srcField);
2154 llvm::Value *flagsVal = llvm::ConstantInt::get(CGF.Int32Ty, flags);
2155 llvm::FunctionCallee fn = CGF.CGM.getBlockObjectAssign();
2157 llvm::Value *args[] = {destField.emitRawPointer(CGF), srcValue, flagsVal};
2158 CGF.EmitNounwindRuntimeCall(fn, args);
2161 void emitDispose(CodeGenFunction &CGF, Address field) override {
2162 field = field.withElementType(CGF.Int8PtrTy);
2163 llvm::Value *value = CGF.Builder.CreateLoad(field);
2165 CGF.BuildBlockRelease(value, Flags | BLOCK_BYREF_CALLER, false);
2178 void emitCopy(CodeGenFunction &CGF, Address destField,
2180 CGF.EmitARCMoveWeak(destField, srcField);
2183 void emitDispose(CodeGenFunction &CGF, Address field) override {
2184 CGF.EmitARCDestroyWeak(field);
2199 void emitCopy(CodeGenFunction &CGF, Address destField,
2204 llvm::Value *value = CGF.Builder.CreateLoad(srcField);
2209 if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) {
2210 CGF.Builder.CreateStore(null, destField);
2211 CGF.EmitARCStoreStrongCall(destField, value, /*ignored*/ true);
2212 CGF.EmitARCStoreStrongCall(srcField, null, /*ignored*/ true);
2215 CGF.Builder.CreateStore(value, destField);
2216 CGF.Builder.CreateStore(null, srcField);
2219 void emitDispose(CodeGenFunction &CGF, Address field) override {
2220 CGF.EmitARCDestroyStrong(field, ARCImpreciseLifetime);
2236 void emitCopy(CodeGenFunction &CGF, Address destField,
2241 llvm::Value *oldValue = CGF.Builder.CreateLoad(srcField);
2242 llvm::Value *copy = CGF.EmitARCRetainBlock(oldValue, /*mandatory*/ true);
2243 CGF.Builder.CreateStore(copy, destField);
2246 void emitDispose(CodeGenFunction &CGF, Address field) override {
2247 CGF.EmitARCDestroyStrong(field, ARCImpreciseLifetime);
2268 void emitCopy(CodeGenFunction &CGF, Address destField,
2271 CGF.EmitSynthesizedCXXCopyCtor(destField, srcField, CopyExpr);
2274 void emitDispose(CodeGenFunction &CGF, Address field) override {
2275 EHScopeStack::stable_iterator cleanupDepth = CGF.EHStack.stable_begin();
2276 CGF.PushDestructorCleanup(VarType, field);
2277 CGF.PopCleanupBlocks(cleanupDepth);
2294 void emitCopy(CodeGenFunction &CGF, Address destField,
2296 CGF.callCStructMoveConstructor(CGF.MakeAddrLValue(destField, VarType),
2297 CGF.MakeAddrLValue(srcField, VarType));
2304 void emitDispose(CodeGenFunction &CGF, Address field) override {
2305 EHScopeStack::stable_iterator cleanupDepth = CGF.EHStack.stable_begin();
2306 CGF.pushDestroy(VarType.isDestructedType(), field, VarType);
2307 CGF.PopCleanupBlocks(cleanupDepth);
2317 generateByrefCopyHelper(CodeGenFunction &CGF, const BlockByrefInfo &byrefInfo,
2319 ASTContext &Context = CGF.getContext();
2331 CGF.CGM.getTypes().arrangeBuiltinFunctionDeclaration(ReturnTy, args);
2333 llvm::FunctionType *LTy = CGF.CGM.getTypes().GetFunctionType(FI);
2339 "__Block_byref_object_copy_", &CGF.CGM.getModule());
2345 CGF.CGM.SetInternalFunctionAttributes(GlobalDecl(), Fn, FI);
2347 CGF.StartFunction(GlobalDecl(), ReturnTy, Fn, FI, args);
2349 auto AL = ApplyDebugLocation::CreateArtificial(CGF);
2353 Address destField = CGF.GetAddrOfLocalVar(&Dst);
2354 destField = Address(CGF.Builder.CreateLoad(destField), byrefInfo.Type,
2357 CGF.emitBlockByrefAddress(destField, byrefInfo, false, "dest-object");
2360 Address srcField = CGF.GetAddrOfLocalVar(&Src);
2361 srcField = Address(CGF.Builder.CreateLoad(srcField), byrefInfo.Type,
2364 CGF.emitBlockByrefAddress(srcField, byrefInfo, false, "src-object");
2366 generator.emitCopy(CGF, destField, srcField);
2369 CGF.FinishFunction();
2378 CodeGenFunction CGF(CGM);
2379 return generateByrefCopyHelper(CGF, byrefInfo, generator);
2384 generateByrefDisposeHelper(CodeGenFunction &CGF,
2387 ASTContext &Context = CGF.getContext();
2391 ImplicitParamDecl Src(CGF.getContext(), Context.VoidPtrTy,
2396 CGF.CGM.getTypes().arrangeBuiltinFunctionDeclaration(R, args);
2398 llvm::FunctionType *LTy = CGF.CGM.getTypes().GetFunctionType(FI);
2405 &CGF.CGM.getModule());
2410 CGF.CGM.SetInternalFunctionAttributes(GlobalDecl(), Fn, FI);
2412 CGF.StartFunction(GlobalDecl(), R, Fn, FI, args);
2414 auto AL = ApplyDebugLocation::CreateArtificial(CGF);
2417 Address addr = CGF.GetAddrOfLocalVar(&Src);
2418 addr = Address(CGF.Builder.CreateLoad(addr), byrefInfo.Type,
2420 addr = CGF.emitBlockByrefAddress(addr, byrefInfo, false, "object");
2422 generator.emitDispose(CGF, addr);
2425 CGF.FinishFunction();
2434 CodeGenFunction CGF(CGM);
2435 return generateByrefDisposeHelper(CGF, byrefInfo, generator);