Lines Matching refs:CGF

33 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e);
34 static RValue AdjustObjCObjectType(CodeGenFunction &CGF,
265 static RValue AdjustObjCObjectType(CodeGenFunction &CGF, QualType ExpT, in AdjustObjCObjectType() argument
271 llvm::Type *ExpLLVMTy = CGF.ConvertType(ExpT); in AdjustObjCObjectType()
276 return RValue::get(CGF.Builder.CreateBitCast(Result.getScalarVal(), in AdjustObjCObjectType()
370 tryGenerateSpecializedMessageSend(CodeGenFunction &CGF, QualType ResultType, in tryGenerateSpecializedMessageSend() argument
375 auto &CGM = CGF.CGM; in tryGenerateSpecializedMessageSend()
387 return CGF.EmitObjCAlloc(Receiver, CGF.ConvertType(ResultType)); in tryGenerateSpecializedMessageSend()
394 return CGF.EmitObjCAllocWithZone(Receiver, in tryGenerateSpecializedMessageSend()
395 CGF.ConvertType(ResultType)); in tryGenerateSpecializedMessageSend()
405 return CGF.EmitObjCAutorelease(Receiver, CGF.ConvertType(ResultType)); in tryGenerateSpecializedMessageSend()
412 return CGF.EmitObjCRetainNonBlock(Receiver, CGF.ConvertType(ResultType)); in tryGenerateSpecializedMessageSend()
419 CGF.EmitObjCRelease(Receiver, ARCPreciseLifetime); in tryGenerateSpecializedMessageSend()
585 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
586 const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CGF.CurCodeDecl); in Emit()
595 llvm::Value *self = CGF.LoadObjCSelf(); in Emit()
598 CGF.CGM.getObjCRuntime().GenerateMessageSendSuper(CGF, ReturnValueSlot(), in Emit()
599 CGF.getContext().VoidTy, in Emit()
649 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
665 static void emitStructGetterCall(CodeGenFunction &CGF, ObjCIvarDecl *ivar, in emitStructGetterCall() argument
667 ASTContext &Context = CGF.getContext(); in emitStructGetterCall()
670 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(), ivar, 0) in emitStructGetterCall()
677 Address dest = CGF.Builder.CreateBitCast(CGF.ReturnValue, CGF.VoidPtrTy); in emitStructGetterCall()
680 src = CGF.Builder.CreateBitCast(src, CGF.VoidPtrTy); in emitStructGetterCall()
683 CharUnits size = CGF.getContext().getTypeSizeInChars(ivar->getType()); in emitStructGetterCall()
684 args.add(RValue::get(CGF.CGM.getSize(size)), Context.getSizeType()); in emitStructGetterCall()
685 args.add(RValue::get(CGF.Builder.getInt1(isAtomic)), Context.BoolTy); in emitStructGetterCall()
686 args.add(RValue::get(CGF.Builder.getInt1(hasStrong)), Context.BoolTy); in emitStructGetterCall()
688 llvm::Constant *fn = CGF.CGM.getObjCRuntime().GetGetStructFunction(); in emitStructGetterCall()
690 CGF.EmitCall(CGF.getTypes().arrangeBuiltinFunctionCall(Context.VoidTy, args), in emitStructGetterCall()
931 static void emitCPPObjectAtomicGetterCall(CodeGenFunction &CGF, in emitCPPObjectAtomicGetterCall() argument
940 args.add(RValue::get(returnAddr), CGF.getContext().VoidPtrTy); in emitCPPObjectAtomicGetterCall()
944 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), in emitCPPObjectAtomicGetterCall()
945 CGF.LoadObjCSelf(), ivar, 0).getPointer(); in emitCPPObjectAtomicGetterCall()
946 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy); in emitCPPObjectAtomicGetterCall()
947 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy); in emitCPPObjectAtomicGetterCall()
950 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy); in emitCPPObjectAtomicGetterCall()
953 CGF.CGM.getObjCRuntime().GetCppAtomicObjectGetFunction(); in emitCPPObjectAtomicGetterCall()
955 CGF.EmitCall( in emitCPPObjectAtomicGetterCall()
956 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args), in emitCPPObjectAtomicGetterCall()
1139 static void emitStructSetterCall(CodeGenFunction &CGF, ObjCMethodDecl *OMD, in emitStructSetterCall() argument
1146 llvm::Value *ivarAddr = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), in emitStructSetterCall()
1147 CGF.LoadObjCSelf(), ivar, 0) in emitStructSetterCall()
1149 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy); in emitStructSetterCall()
1150 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy); in emitStructSetterCall()
1154 DeclRefExpr argRef(CGF.getContext(), argVar, false, in emitStructSetterCall()
1157 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getPointer(); in emitStructSetterCall()
1158 argAddr = CGF.Builder.CreateBitCast(argAddr, CGF.Int8PtrTy); in emitStructSetterCall()
1159 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy); in emitStructSetterCall()
1163 CGF.CGM.getSize(CGF.getContext().getTypeSizeInChars(ivar->getType())); in emitStructSetterCall()
1164 args.add(RValue::get(size), CGF.getContext().getSizeType()); in emitStructSetterCall()
1167 args.add(RValue::get(CGF.Builder.getTrue()), CGF.getContext().BoolTy); in emitStructSetterCall()
1171 args.add(RValue::get(CGF.Builder.getFalse()), CGF.getContext().BoolTy); in emitStructSetterCall()
1173 llvm::Constant *fn = CGF.CGM.getObjCRuntime().GetSetStructFunction(); in emitStructSetterCall()
1175 CGF.EmitCall( in emitStructSetterCall()
1176 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args), in emitStructSetterCall()
1183 static void emitCPPObjectAtomicSetterCall(CodeGenFunction &CGF, in emitCPPObjectAtomicSetterCall() argument
1193 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), in emitCPPObjectAtomicSetterCall()
1194 CGF.LoadObjCSelf(), ivar, 0).getPointer(); in emitCPPObjectAtomicSetterCall()
1195 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy); in emitCPPObjectAtomicSetterCall()
1196 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy); in emitCPPObjectAtomicSetterCall()
1200 DeclRefExpr argRef(CGF.getContext(), argVar, false, in emitCPPObjectAtomicSetterCall()
1203 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getPointer(); in emitCPPObjectAtomicSetterCall()
1204 argAddr = CGF.Builder.CreateBitCast(argAddr, CGF.Int8PtrTy); in emitCPPObjectAtomicSetterCall()
1205 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy); in emitCPPObjectAtomicSetterCall()
1208 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy); in emitCPPObjectAtomicSetterCall()
1211 CGF.CGM.getObjCRuntime().GetCppAtomicObjectSetFunction(); in emitCPPObjectAtomicSetterCall()
1213 CGF.EmitCall( in emitCPPObjectAtomicSetterCall()
1214 CGF.getTypes().arrangeBuiltinFunctionCall(CGF.getContext().VoidTy, args), in emitCPPObjectAtomicSetterCall()
1457 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1459 = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), addr, ivar, /*CVR*/ 0); in Emit()
1460 CGF.emitDestroy(lvalue.getAddress(), ivar->getType(), destroyer, in Emit()
1467 static void destroyARCStrongWithStore(CodeGenFunction &CGF, in destroyARCStrongWithStore() argument
1471 CGF.EmitARCStoreStrongCall(addr, null, /*ignored*/ true); in destroyARCStrongWithStore()
1474 static void emitCXXDestructMethod(CodeGenFunction &CGF, in emitCXXDestructMethod() argument
1476 CodeGenFunction::RunCleanupsScope scope(CGF); in emitCXXDestructMethod()
1478 llvm::Value *self = CGF.LoadObjCSelf(); in emitCXXDestructMethod()
1498 destroyer = CGF.getDestroyer(dtorKind); in emitCXXDestructMethod()
1501 CleanupKind cleanupKind = CGF.getCleanupKind(dtorKind); in emitCXXDestructMethod()
1503 CGF.EHStack.pushCleanup<DestroyIvar>(cleanupKind, self, ivar, destroyer, in emitCXXDestructMethod()
1869 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
1871 CGF.EmitARCRelease(object, ARCImpreciseLifetime); in Emit()
1919 static llvm::Value *emitARCValueOperation(CodeGenFunction &CGF, in emitARCValueOperation() argument
1929 fn = CGF.CGM.getIntrinsic(IntID); in emitARCValueOperation()
1930 setARCRuntimeFunctionLinkage(CGF.CGM, fn); in emitARCValueOperation()
1935 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy); in emitARCValueOperation()
1938 llvm::CallInst *call = CGF.EmitNounwindRuntimeCall(fn, value); in emitARCValueOperation()
1943 return CGF.Builder.CreateBitCast(call, origType); in emitARCValueOperation()
1948 static llvm::Value *emitARCLoadOperation(CodeGenFunction &CGF, in emitARCLoadOperation() argument
1953 fn = CGF.CGM.getIntrinsic(IntID); in emitARCLoadOperation()
1954 setARCRuntimeFunctionLinkage(CGF.CGM, fn); in emitARCLoadOperation()
1959 addr = CGF.Builder.CreateBitCast(addr, CGF.Int8PtrPtrTy); in emitARCLoadOperation()
1962 llvm::Value *result = CGF.EmitNounwindRuntimeCall(fn, addr.getPointer()); in emitARCLoadOperation()
1965 if (origType != CGF.Int8PtrTy) in emitARCLoadOperation()
1966 result = CGF.Builder.CreateBitCast(result, origType); in emitARCLoadOperation()
1973 static llvm::Value *emitARCStoreOperation(CodeGenFunction &CGF, in emitARCStoreOperation() argument
1982 fn = CGF.CGM.getIntrinsic(IntID); in emitARCStoreOperation()
1983 setARCRuntimeFunctionLinkage(CGF.CGM, fn); in emitARCStoreOperation()
1989 CGF.Builder.CreateBitCast(addr.getPointer(), CGF.Int8PtrPtrTy), in emitARCStoreOperation()
1990 CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy) in emitARCStoreOperation()
1992 llvm::CallInst *result = CGF.EmitNounwindRuntimeCall(fn, args); in emitARCStoreOperation()
1996 return CGF.Builder.CreateBitCast(result, origType); in emitARCStoreOperation()
2001 static void emitARCCopyOperation(CodeGenFunction &CGF, in emitARCCopyOperation() argument
2009 fn = CGF.CGM.getIntrinsic(IntID); in emitARCCopyOperation()
2010 setARCRuntimeFunctionLinkage(CGF.CGM, fn); in emitARCCopyOperation()
2014 CGF.Builder.CreateBitCast(dst.getPointer(), CGF.Int8PtrPtrTy), in emitARCCopyOperation()
2015 CGF.Builder.CreateBitCast(src.getPointer(), CGF.Int8PtrPtrTy) in emitARCCopyOperation()
2017 CGF.EmitNounwindRuntimeCall(fn, args); in emitARCCopyOperation()
2023 static llvm::Value *emitObjCValueOperation(CodeGenFunction &CGF, in emitObjCValueOperation() argument
2033 llvm::FunctionType::get(CGF.Int8PtrTy, CGF.Int8PtrTy, false); in emitObjCValueOperation()
2034 fn = CGF.CGM.CreateRuntimeFunction(fnType, fnName); in emitObjCValueOperation()
2044 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy); in emitObjCValueOperation()
2047 llvm::CallInst *call = CGF.EmitNounwindRuntimeCall(fn, value); in emitObjCValueOperation()
2050 return CGF.Builder.CreateBitCast(call, origType); in emitObjCValueOperation()
2100 static void emitAutoreleasedReturnValueMarker(CodeGenFunction &CGF) { in emitAutoreleasedReturnValueMarker() argument
2104 = CGF.CGM.getObjCEntrypoints().retainAutoreleasedReturnValueMarker; in emitAutoreleasedReturnValueMarker()
2107 = CGF.CGM.getTargetCodeGenInfo() in emitAutoreleasedReturnValueMarker()
2115 } else if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) { in emitAutoreleasedReturnValueMarker()
2117 llvm::FunctionType::get(CGF.VoidTy, /*variadic*/false); in emitAutoreleasedReturnValueMarker()
2126 CGF.CGM.getModule().getOrInsertNamedMetadata( in emitAutoreleasedReturnValueMarker()
2130 auto &ctx = CGF.getLLVMContext(); in emitAutoreleasedReturnValueMarker()
2139 CGF.Builder.CreateCall(marker, None, CGF.getBundlesForFunclet(marker)); in emitAutoreleasedReturnValueMarker()
2520 void CodeGenFunction::destroyARCStrongPrecise(CodeGenFunction &CGF, in destroyARCStrongPrecise() argument
2523 CGF.EmitARCDestroyStrong(addr, ARCPreciseLifetime); in destroyARCStrongPrecise()
2526 void CodeGenFunction::destroyARCStrongImprecise(CodeGenFunction &CGF, in destroyARCStrongImprecise() argument
2529 CGF.EmitARCDestroyStrong(addr, ARCImpreciseLifetime); in destroyARCStrongImprecise()
2532 void CodeGenFunction::destroyARCWeak(CodeGenFunction &CGF, in destroyARCWeak() argument
2535 CGF.EmitARCDestroyWeak(addr); in destroyARCWeak()
2538 void CodeGenFunction::emitARCIntrinsicUse(CodeGenFunction &CGF, Address addr, in emitARCIntrinsicUse() argument
2540 llvm::Value *value = CGF.Builder.CreateLoad(addr); in emitARCIntrinsicUse()
2541 CGF.EmitARCIntrinsicUse(value); in emitARCIntrinsicUse()
2599 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2600 CGF.EmitObjCAutoreleasePoolPop(Token); in Emit()
2608 void Emit(CodeGenFunction &CGF, Flags flags) override { in Emit()
2609 CGF.EmitObjCMRRAutoreleasePoolPop(Token); in Emit()
2636 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF, in tryEmitARCRetainLoadOfScalar() argument
2642 result = CGF.EmitLoadOfLValue(lvalue, SourceLocation()).getScalarVal(); in tryEmitARCRetainLoadOfScalar()
2645 result = CGF.EmitARCLoadWeakRetained(lvalue.getAddress()); in tryEmitARCRetainLoadOfScalar()
2650 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF, in tryEmitARCRetainLoadOfScalar() argument
2662 LValue lv = CGF.EmitLValue(e); in tryEmitARCRetainLoadOfScalar()
2665 llvm::Value *result = CGF.EmitLoadOfLValue(lv, in tryEmitARCRetainLoadOfScalar()
2669 CGF.EmitStoreOfScalar(getNullForVariable(lv.getAddress()), lv); in tryEmitARCRetainLoadOfScalar()
2677 if (CGF.getLangOpts().CPlusPlus && in tryEmitARCRetainLoadOfScalar()
2682 return TryEmitResult(CGF.EmitScalarExpr(e), false); in tryEmitARCRetainLoadOfScalar()
2689 if (CodeGenFunction::ConstantEmission constant = CGF.tryEmitAsConstant(DRE)) in tryEmitARCRetainLoadOfScalar()
2690 return TryEmitResult(CGF.emitScalarConstant(constant, DRE), in tryEmitARCRetainLoadOfScalar()
2694 return tryEmitARCRetainLoadOfScalar(CGF, CGF.EmitLValue(e), type); in tryEmitARCRetainLoadOfScalar()
2697 typedef llvm::function_ref<llvm::Value *(CodeGenFunction &CGF,
2702 static llvm::Value *emitARCOperationAfterCall(CodeGenFunction &CGF, in emitARCOperationAfterCall() argument
2707 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP(); in emitARCOperationAfterCall()
2710 CGF.Builder.SetInsertPoint(call->getParent(), in emitARCOperationAfterCall()
2712 value = doAfterCall(CGF, value); in emitARCOperationAfterCall()
2714 CGF.Builder.restoreIP(ip); in emitARCOperationAfterCall()
2717 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP(); in emitARCOperationAfterCall()
2721 CGF.Builder.SetInsertPoint(BB, BB->begin()); in emitARCOperationAfterCall()
2722 value = doAfterCall(CGF, value); in emitARCOperationAfterCall()
2724 CGF.Builder.restoreIP(ip); in emitARCOperationAfterCall()
2731 operand = emitARCOperationAfterCall(CGF, operand, doAfterCall, doFallback); in emitARCOperationAfterCall()
2739 return doFallback(CGF, value); in emitARCOperationAfterCall()
2745 static llvm::Value *emitARCRetainCallResult(CodeGenFunction &CGF, in emitARCRetainCallResult() argument
2747 llvm::Value *value = CGF.EmitScalarExpr(e); in emitARCRetainCallResult()
2748 return emitARCOperationAfterCall(CGF, value, in emitARCRetainCallResult()
2749 [](CodeGenFunction &CGF, llvm::Value *value) { in emitARCRetainCallResult() argument
2750 return CGF.EmitARCRetainAutoreleasedReturnValue(value); in emitARCRetainCallResult()
2752 [](CodeGenFunction &CGF, llvm::Value *value) { in emitARCRetainCallResult() argument
2753 return CGF.EmitARCRetainNonBlock(value); in emitARCRetainCallResult()
2759 static llvm::Value *emitARCUnsafeClaimCallResult(CodeGenFunction &CGF, in emitARCUnsafeClaimCallResult() argument
2761 llvm::Value *value = CGF.EmitScalarExpr(e); in emitARCUnsafeClaimCallResult()
2762 return emitARCOperationAfterCall(CGF, value, in emitARCUnsafeClaimCallResult()
2763 [](CodeGenFunction &CGF, llvm::Value *value) { in emitARCUnsafeClaimCallResult() argument
2764 return CGF.EmitARCUnsafeClaimAutoreleasedReturnValue(value); in emitARCUnsafeClaimCallResult()
2766 [](CodeGenFunction &CGF, llvm::Value *value) { in emitARCUnsafeClaimCallResult() argument
2823 CodeGenFunction &CGF; member in __anonda19ca350a11::ARCExprEmitter
2826 ARCExprEmitter(CodeGenFunction &CGF) : CGF(CGF) {} in ARCExprEmitter() argument
2880 opaqueData = OVMA::bind(CGF, ov, in visitPseudoObjectExpr()
2885 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr()); in visitPseudoObjectExpr()
2896 CGF.EmitIgnoredExpr(semantic); in visitPseudoObjectExpr()
2902 opaques[i].unbind(CGF); in visitPseudoObjectExpr()
2920 llvm::Type *resultType = CGF.ConvertType(e->getType()); in visitCastExpr()
2947 CGF.EmitIgnoredExpr(e->getLHS()); in visitBinaryOperator()
2948 CGF.EnsureInsertPoint(); in visitBinaryOperator()
2991 CGF.EmitCheckedLValue(e->getLHS(), CodeGenFunction::TCK_Store); in visitBinAssignUnsafeUnretained()
2992 CGF.EmitStoreThroughLValue(RValue::get(asImpl().getValueOfResult(result)), in visitBinAssignUnsafeUnretained()
3061 ARCRetainExprEmitter(CodeGenFunction &CGF) : ARCExprEmitter(CGF) {} in ARCRetainExprEmitter()
3069 value = CGF.Builder.CreateBitCast(value, resultType); in emitBitCast()
3075 return tryEmitARCRetainLoadOfScalar(CGF, e); in visitLValueToRValue()
3081 llvm::Value *result = CGF.EmitScalarExpr(e); in visitConsumeObject()
3094 result = CGF.EmitScalarExpr(e); in visitExtendBlockObject()
3110 result = CGF.EmitARCRetainBlock(result, /*mandatory*/ true); in visitExtendBlockObject()
3117 llvm::Value *result = emitARCRetainCallResult(CGF, e); in visitReclaimReturnedObject()
3123 llvm::Value *result = emitARCRetainCallResult(CGF, e); in visitCall()
3132 llvm::Value *result = CGF.EmitScalarExpr(e); in visitExpr()
3139 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) { in tryEmitARCRetainScalarExpr() argument
3140 return ARCRetainExprEmitter(CGF).visit(e); in tryEmitARCRetainScalarExpr()
3143 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF, in emitARCRetainLoadOfScalar() argument
3146 TryEmitResult result = tryEmitARCRetainLoadOfScalar(CGF, lvalue, type); in emitARCRetainLoadOfScalar()
3149 value = CGF.EmitARCRetain(type, value); in emitARCRetainLoadOfScalar()
3230 ARCUnsafeUnretainedExprEmitter(CodeGenFunction &CGF) : ARCExprEmitter(CGF) {} in ARCUnsafeUnretainedExprEmitter()
3237 return CGF.Builder.CreateBitCast(value, resultType); in emitBitCast()
3241 return CGF.EmitScalarExpr(e); in visitLValueToRValue()
3247 llvm::Value *value = CGF.EmitScalarExpr(e); in visitConsumeObject()
3248 return CGF.EmitObjCConsumeObject(e->getType(), value); in visitConsumeObject()
3254 return CGF.EmitARCExtendBlockObject(e); in visitExtendBlockObject()
3259 return CGF.EmitARCReclaimReturnedObject(e, /*unsafe*/ true); in visitReclaimReturnedObject()
3265 return CGF.EmitScalarExpr(e); in visitCall()
3270 return CGF.EmitScalarExpr(e); in visitExpr()
3275 static llvm::Value *emitARCUnsafeUnretainedScalarExpr(CodeGenFunction &CGF, in emitARCUnsafeUnretainedScalarExpr() argument
3277 return ARCUnsafeUnretainedExprEmitter(CGF).visit(e); in emitARCUnsafeUnretainedScalarExpr()
3658 CodeGenFunction CGF(*this); in emitAtAvailableLinkGuard() local
3659 CGF.Builder.SetInsertPoint(CGF.createBasicBlock("", CFLinkCheckFunc)); in emitAtAvailableLinkGuard()
3660 CGF.EmitNounwindRuntimeCall(CFFunc, llvm::Constant::getNullValue(VoidPtrTy)); in emitAtAvailableLinkGuard()
3661 CGF.Builder.CreateUnreachable(); in emitAtAvailableLinkGuard()