Lines Matching defs:CGF
447 CodeGenFunction *CGF,
473 return ConstantEmitter(CGM, CGF).tryEmitAbstractForInitializer(*var);
535 static QualType getCaptureFieldType(const CodeGenFunction &CGF,
541 if (CGF.BlockInfo && CI.isNested())
542 return CGF.BlockInfo->getCapture(VD).fieldType();
543 if (auto *FD = CGF.LambdaCaptureFields.lookup(VD))
549 CGF.getContext().getLValueReferenceType(VD->getType()) : VD->getType();
554 static void computeBlockInfo(CodeGenModule &CGM, CodeGenFunction *CGF,
588 assert(CGF && isa_and_nonnull<CXXMethodDecl>(CGF->CurFuncDecl) &&
590 QualType thisType = cast<CXXMethodDecl>(CGF->CurFuncDecl)->getThisType();
613 assert(CGF && getCaptureFieldType(*CGF, CI) == variable->getType() &&
622 if (llvm::Constant *constant = tryCaptureAsConstant(CGM, CGF, variable)) {
628 QualType VT = getCaptureFieldType(*CGF, CI);
1672 void Emit(CodeGenFunction &CGF, Flags flags) override {
1675 BlockVarAddr = CGF.Builder.CreateLoad(Addr);
1677 BlockVarAddr = Addr.emitRawPointer(CGF);
1680 CGF.BuildBlockRelease(BlockVarAddr, FieldFlags, CanThrow);
1818 VarDecl *Var, CodeGenFunction &CGF) {
1827 (!EHOnly || CGF.needsEHCleanup(CaptureType.isDestructedType()))) {
1831 : CGF.getDestroyer(CaptureType.isDestructedType());
1834 : CGF.getCleanupKind(CaptureType.isDestructedType());
1835 CGF.pushDestroy(Kind, Field, CaptureType, Destroyer, Kind & EHCleanup);
1840 if (!EHOnly || CGF.getLangOpts().Exceptions) {
1846 !ForCopyHelper && CGF.cxxDestructorCanThrow(CaptureType);
1847 CGF.enterByrefCleanup(Kind, Field, Flags, /*LoadBlockVarAddr*/ true,
2144 void emitCopy(CodeGenFunction &CGF, Address destField,
2146 destField = destField.withElementType(CGF.Int8Ty);
2148 srcField = srcField.withElementType(CGF.Int8PtrTy);
2149 llvm::Value *srcValue = CGF.Builder.CreateLoad(srcField);
2153 llvm::Value *flagsVal = llvm::ConstantInt::get(CGF.Int32Ty, flags);
2154 llvm::FunctionCallee fn = CGF.CGM.getBlockObjectAssign();
2156 llvm::Value *args[] = {destField.emitRawPointer(CGF), srcValue, flagsVal};
2157 CGF.EmitNounwindRuntimeCall(fn, args);
2160 void emitDispose(CodeGenFunction &CGF, Address field) override {
2161 field = field.withElementType(CGF.Int8PtrTy);
2162 llvm::Value *value = CGF.Builder.CreateLoad(field);
2164 CGF.BuildBlockRelease(value, Flags | BLOCK_BYREF_CALLER, false);
2177 void emitCopy(CodeGenFunction &CGF, Address destField,
2179 CGF.EmitARCMoveWeak(destField, srcField);
2182 void emitDispose(CodeGenFunction &CGF, Address field) override {
2183 CGF.EmitARCDestroyWeak(field);
2198 void emitCopy(CodeGenFunction &CGF, Address destField,
2203 llvm::Value *value = CGF.Builder.CreateLoad(srcField);
2208 if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) {
2209 CGF.Builder.CreateStore(null, destField);
2210 CGF.EmitARCStoreStrongCall(destField, value, /*ignored*/ true);
2211 CGF.EmitARCStoreStrongCall(srcField, null, /*ignored*/ true);
2214 CGF.Builder.CreateStore(value, destField);
2215 CGF.Builder.CreateStore(null, srcField);
2218 void emitDispose(CodeGenFunction &CGF, Address field) override {
2219 CGF.EmitARCDestroyStrong(field, ARCImpreciseLifetime);
2235 void emitCopy(CodeGenFunction &CGF, Address destField,
2240 llvm::Value *oldValue = CGF.Builder.CreateLoad(srcField);
2241 llvm::Value *copy = CGF.EmitARCRetainBlock(oldValue, /*mandatory*/ true);
2242 CGF.Builder.CreateStore(copy, destField);
2245 void emitDispose(CodeGenFunction &CGF, Address field) override {
2246 CGF.EmitARCDestroyStrong(field, ARCImpreciseLifetime);
2267 void emitCopy(CodeGenFunction &CGF, Address destField,
2270 CGF.EmitSynthesizedCXXCopyCtor(destField, srcField, CopyExpr);
2273 void emitDispose(CodeGenFunction &CGF, Address field) override {
2274 EHScopeStack::stable_iterator cleanupDepth = CGF.EHStack.stable_begin();
2275 CGF.PushDestructorCleanup(VarType, field);
2276 CGF.PopCleanupBlocks(cleanupDepth);
2293 void emitCopy(CodeGenFunction &CGF, Address destField,
2295 CGF.callCStructMoveConstructor(CGF.MakeAddrLValue(destField, VarType),
2296 CGF.MakeAddrLValue(srcField, VarType));
2303 void emitDispose(CodeGenFunction &CGF, Address field) override {
2304 EHScopeStack::stable_iterator cleanupDepth = CGF.EHStack.stable_begin();
2305 CGF.pushDestroy(VarType.isDestructedType(), field, VarType);
2306 CGF.PopCleanupBlocks(cleanupDepth);
2316 generateByrefCopyHelper(CodeGenFunction &CGF, const BlockByrefInfo &byrefInfo,
2318 ASTContext &Context = CGF.getContext();
2330 CGF.CGM.getTypes().arrangeBuiltinFunctionDeclaration(ReturnTy, args);
2332 llvm::FunctionType *LTy = CGF.CGM.getTypes().GetFunctionType(FI);
2338 "__Block_byref_object_copy_", &CGF.CGM.getModule());
2344 CGF.CGM.SetInternalFunctionAttributes(GlobalDecl(), Fn, FI);
2346 CGF.StartFunction(GlobalDecl(), ReturnTy, Fn, FI, args);
2348 auto AL = ApplyDebugLocation::CreateArtificial(CGF);
2352 Address destField = CGF.GetAddrOfLocalVar(&Dst);
2353 destField = Address(CGF.Builder.CreateLoad(destField), byrefInfo.Type,
2356 CGF.emitBlockByrefAddress(destField, byrefInfo, false, "dest-object");
2359 Address srcField = CGF.GetAddrOfLocalVar(&Src);
2360 srcField = Address(CGF.Builder.CreateLoad(srcField), byrefInfo.Type,
2363 CGF.emitBlockByrefAddress(srcField, byrefInfo, false, "src-object");
2365 generator.emitCopy(CGF, destField, srcField);
2368 CGF.FinishFunction();
2377 CodeGenFunction CGF(CGM);
2378 return generateByrefCopyHelper(CGF, byrefInfo, generator);
2383 generateByrefDisposeHelper(CodeGenFunction &CGF,
2386 ASTContext &Context = CGF.getContext();
2390 ImplicitParamDecl Src(CGF.getContext(), Context.VoidPtrTy,
2395 CGF.CGM.getTypes().arrangeBuiltinFunctionDeclaration(R, args);
2397 llvm::FunctionType *LTy = CGF.CGM.getTypes().GetFunctionType(FI);
2404 &CGF.CGM.getModule());
2409 CGF.CGM.SetInternalFunctionAttributes(GlobalDecl(), Fn, FI);
2411 CGF.StartFunction(GlobalDecl(), R, Fn, FI, args);
2413 auto AL = ApplyDebugLocation::CreateArtificial(CGF);
2416 Address addr = CGF.GetAddrOfLocalVar(&Src);
2417 addr = Address(CGF.Builder.CreateLoad(addr), byrefInfo.Type,
2419 addr = CGF.emitBlockByrefAddress(addr, byrefInfo, false, "object");
2421 generator.emitDispose(CGF, addr);
2424 CGF.FinishFunction();
2433 CodeGenFunction CGF(CGM);
2434 return generateByrefDisposeHelper(CGF, byrefInfo, generator);