Lines Matching defs:CGF
38 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e);
39 static RValue AdjustObjCObjectType(CodeGenFunction &CGF,
273 static RValue AdjustObjCObjectType(CodeGenFunction &CGF, QualType ExpT,
279 llvm::Type *ExpLLVMTy = CGF.ConvertType(ExpT);
284 return RValue::get(CGF.Builder.CreateBitCast(Result.getScalarVal(),
378 CodeGenFunction &CGF, QualType ResultType, llvm::Value *Receiver,
381 auto &CGM = CGF.CGM;
394 return CGF.EmitObjCAlloc(Receiver, CGF.ConvertType(ResultType));
402 return CGF.EmitObjCAllocWithZone(Receiver,
403 CGF.ConvertType(ResultType));
413 return CGF.EmitObjCAutorelease(Receiver, CGF.ConvertType(ResultType));
420 return CGF.EmitObjCRetainNonBlock(Receiver, CGF.ConvertType(ResultType));
427 CGF.EmitObjCRelease(Receiver, ARCPreciseLifetime);
439 CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
444 tryGenerateSpecializedMessageSend(CGF, ResultType, Receiver, Args,
448 return GenerateMessageSend(CGF, Return, ResultType, Sel, Receiver, Args, OID,
525 tryEmitSpecializedAllocInit(CodeGenFunction &CGF, const ObjCMessageExpr *OME) {
526 auto &Runtime = CGF.getLangOpts().ObjCRuntime;
554 Receiver = CGF.EmitScalarExpr(SubOME->getInstanceReceiver());
562 Receiver = CGF.CGM.getObjCRuntime().GetClass(CGF, ID);
570 return CGF.EmitObjCAllocInit(Receiver, CGF.ConvertType(OME->getType()));
723 void Emit(CodeGenFunction &CGF, Flags flags) override {
724 const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CGF.CurCodeDecl);
733 llvm::Value *self = CGF.LoadObjCSelf();
736 CGF.CGM.getObjCRuntime().GenerateMessageSendSuper(CGF, ReturnValueSlot(),
737 CGF.getContext().VoidTy,
802 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
818 static void emitStructGetterCall(CodeGenFunction &CGF, ObjCIvarDecl *ivar,
820 ASTContext &Context = CGF.getContext();
823 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
824 .getPointer(CGF);
830 llvm::Value *dest = CGF.ReturnValue.emitRawPointer(CGF);
834 CharUnits size = CGF.getContext().getTypeSizeInChars(ivar->getType());
835 args.add(RValue::get(CGF.CGM.getSize(size)), Context.getSizeType());
836 args.add(RValue::get(CGF.Builder.getInt1(isAtomic)), Context.BoolTy);
837 args.add(RValue::get(CGF.Builder.getInt1(hasStrong)), Context.BoolTy);
839 llvm::FunctionCallee fn = CGF.CGM.getObjCRuntime().GetGetStructFunction();
841 CGF.EmitCall(CGF.getTypes().arrangeBuiltinFunctionCall(Context.VoidTy, args),
1087 static void emitCPPObjectAtomicGetterCall(CodeGenFunction &CGF,
1096 args.add(RValue::get(returnAddr), CGF.getContext().VoidPtrTy);
1100 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
1101 .getPointer(CGF);
1102 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1105 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
1108 CGF.CGM.getObjCRuntime().GetCppAtomicObjectGetFunction();
1110 CGF.EmitCall(
1111 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args),
1121 static llvm::Value *emitCmdValueForGetterSetterBody(CodeGenFunction &CGF,
1127 llvm::Type *selType = CGF.ConvertType(CGF.getContext().getObjCSelType());
1131 return CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(MD->getCmdDecl()), "cmd");
1324 static void emitStructSetterCall(CodeGenFunction &CGF, ObjCMethodDecl *OMD,
1332 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
1333 .getPointer(CGF);
1334 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
1335 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1339 DeclRefExpr argRef(CGF.getContext(), argVar, false,
1342 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getPointer(CGF);
1343 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
1347 CGF.CGM.getSize(CGF.getContext().getTypeSizeInChars(ivar->getType()));
1348 args.add(RValue::get(size), CGF.getContext().getSizeType());
1351 args.add(RValue::get(CGF.Builder.getTrue()), CGF.getContext().BoolTy);
1355 args.add(RValue::get(CGF.Builder.getFalse()), CGF.getContext().BoolTy);
1357 llvm::FunctionCallee fn = CGF.CGM.getObjCRuntime().GetSetStructFunction();
1359 CGF.EmitCall(
1360 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args),
1367 static void emitCPPObjectAtomicSetterCall(CodeGenFunction &CGF,
1377 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
1378 .getPointer(CGF);
1379 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1383 DeclRefExpr argRef(CGF.getContext(), argVar, false,
1386 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getPointer(CGF);
1387 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
1390 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
1393 CGF.CGM.getObjCRuntime().GetCppAtomicObjectSetFunction();
1395 CGF.EmitCall(
1396 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args),
1655 void Emit(CodeGenFunction &CGF, Flags flags) override {
1657 = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), addr, ivar, /*CVR*/ 0);
1658 CGF.emitDestroy(lvalue.getAddress(), ivar->getType(), destroyer,
1665 static void destroyARCStrongWithStore(CodeGenFunction &CGF,
1669 CGF.EmitARCStoreStrongCall(addr, null, /*ignored*/ true);
1672 static void emitCXXDestructMethod(CodeGenFunction &CGF,
1674 CodeGenFunction::RunCleanupsScope scope(CGF);
1676 llvm::Value *self = CGF.LoadObjCSelf();
1696 destroyer = CGF.getDestroyer(dtorKind);
1699 CleanupKind cleanupKind = CGF.getCleanupKind(dtorKind);
1701 CGF.EHStack.pushCleanup<DestroyIvar>(cleanupKind, self, ivar, destroyer,
2098 void Emit(CodeGenFunction &CGF, Flags flags) override {
2100 CGF.EmitARCRelease(object, ARCImpreciseLifetime);
2169 CodeGenFunction &CGF, llvm::Value *value, llvm::Type *returnType,
2176 fn = getARCIntrinsic(IntID, CGF.CGM);
2180 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
2183 llvm::CallInst *call = CGF.EmitNounwindRuntimeCall(fn, value);
2187 return CGF.Builder.CreateBitCast(call, origType);
2192 static llvm::Value *emitARCLoadOperation(CodeGenFunction &CGF, Address addr,
2196 fn = getARCIntrinsic(IntID, CGF.CGM);
2198 return CGF.EmitNounwindRuntimeCall(fn, addr.emitRawPointer(CGF));
2203 static llvm::Value *emitARCStoreOperation(CodeGenFunction &CGF, Address addr,
2211 fn = getARCIntrinsic(IntID, CGF.CGM);
2216 CGF.Builder.CreateBitCast(addr.emitRawPointer(CGF), CGF.Int8PtrPtrTy),
2217 CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy)};
2218 llvm::CallInst *result = CGF.EmitNounwindRuntimeCall(fn, args);
2222 return CGF.Builder.CreateBitCast(result, origType);
2227 static void emitARCCopyOperation(CodeGenFunction &CGF, Address dst, Address src,
2233 fn = getARCIntrinsic(IntID, CGF.CGM);
2236 CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF), CGF.Int8PtrPtrTy),
2237 CGF.Builder.CreateBitCast(src.emitRawPointer(CGF), CGF.Int8PtrPtrTy)};
2238 CGF.EmitNounwindRuntimeCall(fn, args);
2244 static llvm::Value *emitObjCValueOperation(CodeGenFunction &CGF,
2254 llvm::FunctionType::get(CGF.Int8PtrTy, CGF.Int8PtrTy, false);
2255 fn = CGF.CGM.CreateRuntimeFunction(fnType, fnName);
2265 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
2268 llvm::CallBase *Inst = CGF.EmitCallOrInvoke(fn, value);
2277 return CGF.Builder.CreateBitCast(Inst, origType);
2328 static void emitAutoreleasedReturnValueMarker(CodeGenFunction &CGF) {
2332 = CGF.CGM.getObjCEntrypoints().retainAutoreleasedReturnValueMarker;
2335 = CGF.CGM.getTargetCodeGenInfo()
2343 } else if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) {
2345 llvm::FunctionType::get(CGF.VoidTy, /*variadic*/false);
2354 if (!CGF.CGM.getModule().getModuleFlag(retainRVMarkerKey)) {
2355 auto *str = llvm::MDString::get(CGF.getLLVMContext(), assembly);
2356 CGF.CGM.getModule().addModuleFlag(llvm::Module::Error,
2364 CGF.Builder.CreateCall(marker, std::nullopt,
2365 CGF.getBundlesForFunclet(marker));
2370 CodeGenFunction &CGF) {
2371 emitAutoreleasedReturnValueMarker(CGF);
2377 ObjCEntrypoints &EPs = CGF.CGM.getObjCEntrypoints();
2384 EP = getARCIntrinsic(IID, CGF.CGM);
2386 llvm::Triple::ArchType Arch = CGF.CGM.getTriple().getArch();
2390 if (CGF.CGM.getCodeGenOpts().OptimizationLevel > 0 &&
2400 CGF.EmitARCNoopIntrinsicUse(newCall);
2405 CGF.CGM.getTargetCodeGenInfo().markARCOptimizedReturnCallsAsNoTail();
2408 return emitARCValueOperation(CGF, value, nullptr, EP, IID, tailKind);
2776 void CodeGenFunction::destroyARCStrongPrecise(CodeGenFunction &CGF,
2779 CGF.EmitARCDestroyStrong(addr, ARCPreciseLifetime);
2782 void CodeGenFunction::destroyARCStrongImprecise(CodeGenFunction &CGF,
2785 CGF.EmitARCDestroyStrong(addr, ARCImpreciseLifetime);
2788 void CodeGenFunction::destroyARCWeak(CodeGenFunction &CGF,
2791 CGF.EmitARCDestroyWeak(addr);
2794 void CodeGenFunction::emitARCIntrinsicUse(CodeGenFunction &CGF, Address addr,
2796 llvm::Value *value = CGF.Builder.CreateLoad(addr);
2797 CGF.EmitARCIntrinsicUse(value);
2855 void Emit(CodeGenFunction &CGF, Flags flags) override {
2856 CGF.EmitObjCAutoreleasePoolPop(Token);
2864 void Emit(CodeGenFunction &CGF, Flags flags) override {
2865 CGF.EmitObjCMRRAutoreleasePoolPop(Token);
2892 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2898 result = CGF.EmitLoadOfLValue(lvalue, SourceLocation()).getScalarVal();
2901 result = CGF.EmitARCLoadWeakRetained(lvalue.getAddress());
2906 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2918 LValue lv = CGF.EmitLValue(e);
2921 llvm::Value *result = CGF.EmitLoadOfLValue(lv,
2925 CGF.EmitStoreOfScalar(getNullForVariable(lv.getAddress()), lv);
2933 if (CGF.getLangOpts().CPlusPlus &&
2938 return TryEmitResult(CGF.EmitScalarExpr(e), false);
2945 if (CodeGenFunction::ConstantEmission constant = CGF.tryEmitAsConstant(DRE))
2946 return TryEmitResult(CGF.emitScalarConstant(constant, DRE),
2950 return tryEmitARCRetainLoadOfScalar(CGF, CGF.EmitLValue(e), type);
2953 typedef llvm::function_ref<llvm::Value *(CodeGenFunction &CGF,
2961 static llvm::Value *emitARCOperationAfterCall(CodeGenFunction &CGF,
2965 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP();
2970 value = doFallback(CGF, value);
2973 CGF.Builder.SetInsertPoint(call->getParent(),
2975 value = doAfterCall(CGF, value);
2979 CGF.Builder.SetInsertPoint(BB, BB->begin());
2980 value = doAfterCall(CGF, value);
2987 CGF.Builder.SetInsertPoint(bitcast->getParent(), bitcast->getIterator());
2989 operand = emitARCOperationAfterCall(CGF, operand, doAfterCall, doFallback);
3000 inVal = emitARCOperationAfterCall(CGF, inVal, doAfterCall, doFallback);
3007 value = doFallback(CGF, value);
3011 CGF.Builder.restoreIP(ip);
3017 static llvm::Value *emitARCRetainCallResult(CodeGenFunction &CGF,
3019 llvm::Value *value = CGF.EmitScalarExpr(e);
3020 return emitARCOperationAfterCall(CGF, value,
3021 [](CodeGenFunction &CGF, llvm::Value *value) {
3022 return CGF.EmitARCRetainAutoreleasedReturnValue(value);
3024 [](CodeGenFunction &CGF, llvm::Value *value) {
3025 return CGF.EmitARCRetainNonBlock(value);
3031 static llvm::Value *emitARCUnsafeClaimCallResult(CodeGenFunction &CGF,
3033 llvm::Value *value = CGF.EmitScalarExpr(e);
3034 return emitARCOperationAfterCall(CGF, value,
3035 [](CodeGenFunction &CGF, llvm::Value *value) {
3036 return CGF.EmitARCUnsafeClaimAutoreleasedReturnValue(value);
3038 [](CodeGenFunction &CGF, llvm::Value *value) {
3095 CodeGenFunction &CGF;
3098 ARCExprEmitter(CodeGenFunction &CGF) : CGF(CGF) {}
3153 opaqueData = OVMA::bind(CGF, ov,
3158 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr());
3169 CGF.EmitIgnoredExpr(semantic);
3175 opaques[i].unbind(CGF);
3199 llvm::Type *resultType = CGF.ConvertType(e->getType());
3226 CGF.EmitIgnoredExpr(e->getLHS());
3227 CGF.EnsureInsertPoint();
3270 CGF.EmitCheckedLValue(e->getLHS(), CodeGenFunction::TCK_Store);
3271 CGF.EmitStoreThroughLValue(RValue::get(asImpl().getValueOfResult(result)),
3341 ARCRetainExprEmitter(CodeGenFunction &CGF) : ARCExprEmitter(CGF) {}
3349 value = CGF.Builder.CreateBitCast(value, resultType);
3355 return tryEmitARCRetainLoadOfScalar(CGF, e);
3361 llvm::Value *result = CGF.EmitScalarExpr(e);
3369 if (CGF.CGM.getCodeGenOpts().ObjCAvoidHeapifyLocalBlocks &&
3384 result = CGF.EmitScalarExpr(e);
3400 result = CGF.EmitARCRetainBlock(result, /*mandatory*/ true);
3407 llvm::Value *result = emitARCRetainCallResult(CGF, e);
3413 llvm::Value *result = emitARCRetainCallResult(CGF, e);
3422 llvm::Value *result = CGF.EmitScalarExpr(e);
3429 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
3430 return ARCRetainExprEmitter(CGF).visit(e);
3433 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
3436 TryEmitResult result = tryEmitARCRetainLoadOfScalar(CGF, lvalue, type);
3439 value = CGF.EmitARCRetain(type, value);
3518 ARCUnsafeUnretainedExprEmitter(CodeGenFunction &CGF) : ARCExprEmitter(CGF) {}
3525 return CGF.Builder.CreateBitCast(value, resultType);
3529 return CGF.EmitScalarExpr(e);
3535 llvm::Value *value = CGF.EmitScalarExpr(e);
3536 return CGF.EmitObjCConsumeObject(e->getType(), value);
3542 return CGF.EmitARCExtendBlockObject(e);
3547 return CGF.EmitARCReclaimReturnedObject(e, /*unsafe*/ true);
3553 return CGF.EmitScalarExpr(e);
3558 return CGF.EmitScalarExpr(e);
3563 static llvm::Value *emitARCUnsafeUnretainedScalarExpr(CodeGenFunction &CGF,
3565 return ARCUnsafeUnretainedExprEmitter(CGF).visit(e);
3951 static llvm::Value *emitIsPlatformVersionAtLeast(CodeGenFunction &CGF,
3953 CodeGenModule &CGM = CGF.CGM;
3981 CGF.EmitNounwindRuntimeCall(CGM.IsPlatformVersionAtLeastFn, Args);
3982 return CGF.Builder.CreateICmpNE(Check,
4074 CodeGenFunction CGF(*this);
4075 CGF.Builder.SetInsertPoint(CGF.createBasicBlock("", CFLinkCheckFunc));
4076 CGF.EmitNounwindRuntimeCall(CFFunc,
4078 CGF.Builder.CreateUnreachable();