Lines Matching defs:CGF
37 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e);
38 static RValue AdjustObjCObjectType(CodeGenFunction &CGF,
272 static RValue AdjustObjCObjectType(CodeGenFunction &CGF, QualType ExpT,
278 llvm::Type *ExpLLVMTy = CGF.ConvertType(ExpT);
283 return RValue::get(CGF.Builder.CreateBitCast(Result.getScalarVal(),
377 CodeGenFunction &CGF, QualType ResultType, llvm::Value *Receiver,
380 auto &CGM = CGF.CGM;
393 return CGF.EmitObjCAlloc(Receiver, CGF.ConvertType(ResultType));
401 return CGF.EmitObjCAllocWithZone(Receiver,
402 CGF.ConvertType(ResultType));
412 return CGF.EmitObjCAutorelease(Receiver, CGF.ConvertType(ResultType));
419 return CGF.EmitObjCRetainNonBlock(Receiver, CGF.ConvertType(ResultType));
426 CGF.EmitObjCRelease(Receiver, ARCPreciseLifetime);
438 CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType,
443 tryGenerateSpecializedMessageSend(CGF, ResultType, Receiver, Args,
447 return GenerateMessageSend(CGF, Return, ResultType, Sel, Receiver, Args, OID,
524 tryEmitSpecializedAllocInit(CodeGenFunction &CGF, const ObjCMessageExpr *OME) {
525 auto &Runtime = CGF.getLangOpts().ObjCRuntime;
553 Receiver = CGF.EmitScalarExpr(SubOME->getInstanceReceiver());
561 Receiver = CGF.CGM.getObjCRuntime().GetClass(CGF, ID);
569 return CGF.EmitObjCAllocInit(Receiver, CGF.ConvertType(OME->getType()));
722 void Emit(CodeGenFunction &CGF, Flags flags) override {
723 const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CGF.CurCodeDecl);
732 llvm::Value *self = CGF.LoadObjCSelf();
735 CGF.CGM.getObjCRuntime().GenerateMessageSendSuper(CGF, ReturnValueSlot(),
736 CGF.getContext().VoidTy,
801 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
817 static void emitStructGetterCall(CodeGenFunction &CGF, ObjCIvarDecl *ivar,
819 ASTContext &Context = CGF.getContext();
822 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
823 .getPointer(CGF);
829 llvm::Value *dest = CGF.ReturnValue.emitRawPointer(CGF);
833 CharUnits size = CGF.getContext().getTypeSizeInChars(ivar->getType());
834 args.add(RValue::get(CGF.CGM.getSize(size)), Context.getSizeType());
835 args.add(RValue::get(CGF.Builder.getInt1(isAtomic)), Context.BoolTy);
836 args.add(RValue::get(CGF.Builder.getInt1(hasStrong)), Context.BoolTy);
838 llvm::FunctionCallee fn = CGF.CGM.getObjCRuntime().GetGetStructFunction();
840 CGF.EmitCall(CGF.getTypes().arrangeBuiltinFunctionCall(Context.VoidTy, args),
1086 static void emitCPPObjectAtomicGetterCall(CodeGenFunction &CGF,
1095 args.add(RValue::get(returnAddr), CGF.getContext().VoidPtrTy);
1099 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
1100 .getPointer(CGF);
1101 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1104 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
1107 CGF.CGM.getObjCRuntime().GetCppAtomicObjectGetFunction();
1109 CGF.EmitCall(
1110 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args),
1120 static llvm::Value *emitCmdValueForGetterSetterBody(CodeGenFunction &CGF,
1126 llvm::Type *selType = CGF.ConvertType(CGF.getContext().getObjCSelType());
1130 return CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(MD->getCmdDecl()), "cmd");
1323 static void emitStructSetterCall(CodeGenFunction &CGF, ObjCMethodDecl *OMD,
1331 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
1332 .getPointer(CGF);
1333 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
1334 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1338 DeclRefExpr argRef(CGF.getContext(), argVar, false,
1341 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getPointer(CGF);
1342 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
1346 CGF.CGM.getSize(CGF.getContext().getTypeSizeInChars(ivar->getType()));
1347 args.add(RValue::get(size), CGF.getContext().getSizeType());
1350 args.add(RValue::get(CGF.Builder.getTrue()), CGF.getContext().BoolTy);
1354 args.add(RValue::get(CGF.Builder.getFalse()), CGF.getContext().BoolTy);
1356 llvm::FunctionCallee fn = CGF.CGM.getObjCRuntime().GetSetStructFunction();
1358 CGF.EmitCall(
1359 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args),
1366 static void emitCPPObjectAtomicSetterCall(CodeGenFunction &CGF,
1376 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0)
1377 .getPointer(CGF);
1378 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1382 DeclRefExpr argRef(CGF.getContext(), argVar, false,
1385 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getPointer(CGF);
1386 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
1389 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
1392 CGF.CGM.getObjCRuntime().GetCppAtomicObjectSetFunction();
1394 CGF.EmitCall(
1395 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args),
1654 void Emit(CodeGenFunction &CGF, Flags flags) override {
1656 = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), addr, ivar, /*CVR*/ 0);
1657 CGF.emitDestroy(lvalue.getAddress(), ivar->getType(), destroyer,
1664 static void destroyARCStrongWithStore(CodeGenFunction &CGF,
1668 CGF.EmitARCStoreStrongCall(addr, null, /*ignored*/ true);
1671 static void emitCXXDestructMethod(CodeGenFunction &CGF,
1673 CodeGenFunction::RunCleanupsScope scope(CGF);
1675 llvm::Value *self = CGF.LoadObjCSelf();
1695 destroyer = CGF.getDestroyer(dtorKind);
1698 CleanupKind cleanupKind = CGF.getCleanupKind(dtorKind);
1700 CGF.EHStack.pushCleanup<DestroyIvar>(cleanupKind, self, ivar, destroyer,
2097 void Emit(CodeGenFunction &CGF, Flags flags) override {
2099 CGF.EmitARCRelease(object, ARCImpreciseLifetime);
2168 CodeGenFunction &CGF, llvm::Value *value, llvm::Type *returnType,
2175 fn = getARCIntrinsic(IntID, CGF.CGM);
2179 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
2182 llvm::CallInst *call = CGF.EmitNounwindRuntimeCall(fn, value);
2186 return CGF.Builder.CreateBitCast(call, origType);
2191 static llvm::Value *emitARCLoadOperation(CodeGenFunction &CGF, Address addr,
2195 fn = getARCIntrinsic(IntID, CGF.CGM);
2197 return CGF.EmitNounwindRuntimeCall(fn, addr.emitRawPointer(CGF));
2202 static llvm::Value *emitARCStoreOperation(CodeGenFunction &CGF, Address addr,
2210 fn = getARCIntrinsic(IntID, CGF.CGM);
2215 CGF.Builder.CreateBitCast(addr.emitRawPointer(CGF), CGF.Int8PtrPtrTy),
2216 CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy)};
2217 llvm::CallInst *result = CGF.EmitNounwindRuntimeCall(fn, args);
2221 return CGF.Builder.CreateBitCast(result, origType);
2226 static void emitARCCopyOperation(CodeGenFunction &CGF, Address dst, Address src,
2232 fn = getARCIntrinsic(IntID, CGF.CGM);
2235 CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF), CGF.Int8PtrPtrTy),
2236 CGF.Builder.CreateBitCast(src.emitRawPointer(CGF), CGF.Int8PtrPtrTy)};
2237 CGF.EmitNounwindRuntimeCall(fn, args);
2243 static llvm::Value *emitObjCValueOperation(CodeGenFunction &CGF,
2253 llvm::FunctionType::get(CGF.Int8PtrTy, CGF.Int8PtrTy, false);
2254 fn = CGF.CGM.CreateRuntimeFunction(fnType, fnName);
2264 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
2267 llvm::CallBase *Inst = CGF.EmitCallOrInvoke(fn, value);
2276 return CGF.Builder.CreateBitCast(Inst, origType);
2327 static void emitAutoreleasedReturnValueMarker(CodeGenFunction &CGF) {
2331 = CGF.CGM.getObjCEntrypoints().retainAutoreleasedReturnValueMarker;
2334 = CGF.CGM.getTargetCodeGenInfo()
2342 } else if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) {
2344 llvm::FunctionType::get(CGF.VoidTy, /*variadic*/false);
2353 if (!CGF.CGM.getModule().getModuleFlag(retainRVMarkerKey)) {
2354 auto *str = llvm::MDString::get(CGF.getLLVMContext(), assembly);
2355 CGF.CGM.getModule().addModuleFlag(llvm::Module::Error,
2363 CGF.Builder.CreateCall(marker, {}, CGF.getBundlesForFunclet(marker));
2368 CodeGenFunction &CGF) {
2369 emitAutoreleasedReturnValueMarker(CGF);
2375 ObjCEntrypoints &EPs = CGF.CGM.getObjCEntrypoints();
2382 EP = getARCIntrinsic(IID, CGF.CGM);
2384 llvm::Triple::ArchType Arch = CGF.CGM.getTriple().getArch();
2388 if (CGF.CGM.getCodeGenOpts().OptimizationLevel > 0 &&
2399 CGF.EmitARCNoopIntrinsicUse(newCall);
2404 CGF.CGM.getTargetCodeGenInfo().markARCOptimizedReturnCallsAsNoTail();
2407 return emitARCValueOperation(CGF, value, nullptr, EP, IID, tailKind);
2775 void CodeGenFunction::destroyARCStrongPrecise(CodeGenFunction &CGF,
2778 CGF.EmitARCDestroyStrong(addr, ARCPreciseLifetime);
2781 void CodeGenFunction::destroyARCStrongImprecise(CodeGenFunction &CGF,
2784 CGF.EmitARCDestroyStrong(addr, ARCImpreciseLifetime);
2787 void CodeGenFunction::destroyARCWeak(CodeGenFunction &CGF,
2790 CGF.EmitARCDestroyWeak(addr);
2793 void CodeGenFunction::emitARCIntrinsicUse(CodeGenFunction &CGF, Address addr,
2795 llvm::Value *value = CGF.Builder.CreateLoad(addr);
2796 CGF.EmitARCIntrinsicUse(value);
2854 void Emit(CodeGenFunction &CGF, Flags flags) override {
2855 CGF.EmitObjCAutoreleasePoolPop(Token);
2863 void Emit(CodeGenFunction &CGF, Flags flags) override {
2864 CGF.EmitObjCMRRAutoreleasePoolPop(Token);
2891 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2897 result = CGF.EmitLoadOfLValue(lvalue, SourceLocation()).getScalarVal();
2900 result = CGF.EmitARCLoadWeakRetained(lvalue.getAddress());
2905 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2917 LValue lv = CGF.EmitLValue(e);
2920 llvm::Value *result = CGF.EmitLoadOfLValue(lv,
2924 CGF.EmitStoreOfScalar(getNullForVariable(lv.getAddress()), lv);
2932 if (CGF.getLangOpts().CPlusPlus &&
2937 return TryEmitResult(CGF.EmitScalarExpr(e), false);
2944 if (CodeGenFunction::ConstantEmission constant = CGF.tryEmitAsConstant(DRE))
2945 return TryEmitResult(CGF.emitScalarConstant(constant, DRE),
2949 return tryEmitARCRetainLoadOfScalar(CGF, CGF.EmitLValue(e), type);
2952 typedef llvm::function_ref<llvm::Value *(CodeGenFunction &CGF,
2960 static llvm::Value *emitARCOperationAfterCall(CodeGenFunction &CGF,
2964 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP();
2969 value = doFallback(CGF, value);
2972 CGF.Builder.SetInsertPoint(call->getParent(),
2974 value = doAfterCall(CGF, value);
2978 CGF.Builder.SetInsertPoint(BB, BB->begin());
2979 value = doAfterCall(CGF, value);
2986 CGF.Builder.SetInsertPoint(bitcast->getParent(), bitcast->getIterator());
2988 operand = emitARCOperationAfterCall(CGF, operand, doAfterCall, doFallback);
2999 inVal = emitARCOperationAfterCall(CGF, inVal, doAfterCall, doFallback);
3006 value = doFallback(CGF, value);
3010 CGF.Builder.restoreIP(ip);
3016 static llvm::Value *emitARCRetainCallResult(CodeGenFunction &CGF,
3018 llvm::Value *value = CGF.EmitScalarExpr(e);
3019 return emitARCOperationAfterCall(CGF, value,
3020 [](CodeGenFunction &CGF, llvm::Value *value) {
3021 return CGF.EmitARCRetainAutoreleasedReturnValue(value);
3023 [](CodeGenFunction &CGF, llvm::Value *value) {
3024 return CGF.EmitARCRetainNonBlock(value);
3030 static llvm::Value *emitARCUnsafeClaimCallResult(CodeGenFunction &CGF,
3032 llvm::Value *value = CGF.EmitScalarExpr(e);
3033 return emitARCOperationAfterCall(CGF, value,
3034 [](CodeGenFunction &CGF, llvm::Value *value) {
3035 return CGF.EmitARCUnsafeClaimAutoreleasedReturnValue(value);
3037 [](CodeGenFunction &CGF, llvm::Value *value) {
3094 CodeGenFunction &CGF;
3097 ARCExprEmitter(CodeGenFunction &CGF) : CGF(CGF) {}
3152 opaqueData = OVMA::bind(CGF, ov,
3157 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr());
3168 CGF.EmitIgnoredExpr(semantic);
3174 opaques[i].unbind(CGF);
3198 llvm::Type *resultType = CGF.ConvertType(e->getType());
3225 CGF.EmitIgnoredExpr(e->getLHS());
3226 CGF.EnsureInsertPoint();
3269 CGF.EmitCheckedLValue(e->getLHS(), CodeGenFunction::TCK_Store);
3270 CGF.EmitStoreThroughLValue(RValue::get(asImpl().getValueOfResult(result)),
3340 ARCRetainExprEmitter(CodeGenFunction &CGF) : ARCExprEmitter(CGF) {}
3348 value = CGF.Builder.CreateBitCast(value, resultType);
3354 return tryEmitARCRetainLoadOfScalar(CGF, e);
3360 llvm::Value *result = CGF.EmitScalarExpr(e);
3368 if (CGF.CGM.getCodeGenOpts().ObjCAvoidHeapifyLocalBlocks &&
3383 result = CGF.EmitScalarExpr(e);
3399 result = CGF.EmitARCRetainBlock(result, /*mandatory*/ true);
3406 llvm::Value *result = emitARCRetainCallResult(CGF, e);
3412 llvm::Value *result = emitARCRetainCallResult(CGF, e);
3421 llvm::Value *result = CGF.EmitScalarExpr(e);
3428 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
3429 return ARCRetainExprEmitter(CGF).visit(e);
3432 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
3435 TryEmitResult result = tryEmitARCRetainLoadOfScalar(CGF, lvalue, type);
3438 value = CGF.EmitARCRetain(type, value);
3517 ARCUnsafeUnretainedExprEmitter(CodeGenFunction &CGF) : ARCExprEmitter(CGF) {}
3524 return CGF.Builder.CreateBitCast(value, resultType);
3528 return CGF.EmitScalarExpr(e);
3534 llvm::Value *value = CGF.EmitScalarExpr(e);
3535 return CGF.EmitObjCConsumeObject(e->getType(), value);
3541 return CGF.EmitARCExtendBlockObject(e);
3546 return CGF.EmitARCReclaimReturnedObject(e, /*unsafe*/ true);
3552 return CGF.EmitScalarExpr(e);
3557 return CGF.EmitScalarExpr(e);
3562 static llvm::Value *emitARCUnsafeUnretainedScalarExpr(CodeGenFunction &CGF,
3564 return ARCUnsafeUnretainedExprEmitter(CGF).visit(e);
3950 static llvm::Value *emitIsPlatformVersionAtLeast(CodeGenFunction &CGF,
3952 CodeGenModule &CGM = CGF.CGM;
3980 CGF.EmitNounwindRuntimeCall(CGM.IsPlatformVersionAtLeastFn, Args);
3981 return CGF.Builder.CreateICmpNE(Check,
4073 CodeGenFunction CGF(*this);
4074 CGF.Builder.SetInsertPoint(CGF.createBasicBlock("", CFLinkCheckFunc));
4075 CGF.EmitNounwindRuntimeCall(CFFunc,
4077 CGF.Builder.CreateUnreachable();