Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:CGF

31 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e);
32 static RValue AdjustRelatedResultType(CodeGenFunction &CGF,
204 static RValue AdjustRelatedResultType(CodeGenFunction &CGF,
212 CGF.getContext().hasSameType(E->getType(), Method->getResultType()) ||
217 return RValue::get(CGF.Builder.CreateBitCast(Result.getScalarVal(),
218 CGF.ConvertType(E->getType())));
409 CGF, Flags flags) {
410 const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CGF.CurCodeDecl);
419 llvm::Value *self = CGF.LoadObjCSelf();
422 CGF.CGM.getObjCRuntime().GenerateMessageSendSuper(CGF, ReturnValueSlot(),
423 CGF.getContext().VoidTy,
473 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
486 static void emitStructGetterCall(CodeGenFunction &CGF, ObjCIvarDecl *ivar,
488 ASTContext &Context = CGF.getContext();
491 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(),
498 llvm::Value *dest = CGF.Builder.CreateBitCast(CGF.ReturnValue, CGF.VoidPtrTy);
501 src = CGF.Builder.CreateBitCast(src, CGF.VoidPtrTy);
504 CharUnits size = CGF.getContext().getTypeSizeInChars(ivar->getType());
505 args.add(RValue::get(CGF.CGM.getSize(size)), Context.getSizeType());
506 args.add(RValue::get(CGF.Builder.getInt1(isAtomic)), Context.BoolTy);
507 args.add(RValue::get(CGF.Builder.getInt1(hasStrong)), Context.BoolTy);
509 llvm::Value *fn = CGF.CGM.getObjCRuntime().GetGetStructFunction();
510 CGF.EmitCall(CGF.getTypes().arrangeFunctionCall(Context.VoidTy, args,
743 static void emitCPPObjectAtomicGetterCall(CodeGenFunction &CGF,
752 args.add(RValue::get(returnAddr), CGF.getContext().VoidPtrTy);
756 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(),
757 CGF.LoadObjCSelf(), ivar, 0).getAddress();
758 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
759 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
762 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
765 CGF.CGM.getObjCRuntime().GetCppAtomicObjectFunction();
766 CGF.EmitCall(CGF.getTypes().arrangeFunctionCall(CGF.getContext().VoidTy, args,
921 static void emitStructSetterCall(CodeGenFunction &CGF, ObjCMethodDecl *OMD,
928 llvm::Value *ivarAddr = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(),
929 CGF.LoadObjCSelf(), ivar, 0)
931 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
932 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
938 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getAddress();
939 argAddr = CGF.Builder.CreateBitCast(argAddr, CGF.Int8PtrTy);
940 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
944 CGF.CGM.getSize(CGF.getContext().getTypeSizeInChars(ivar->getType()));
945 args.add(RValue::get(size), CGF.getContext().getSizeType());
948 args.add(RValue::get(CGF.Builder.getTrue()), CGF.getContext().BoolTy);
952 args.add(RValue::get(CGF.Builder.getFalse()), CGF.getContext().BoolTy);
954 llvm::Value *copyStructFn = CGF.CGM.getObjCRuntime().GetSetStructFunction();
955 CGF.EmitCall(CGF.getTypes().arrangeFunctionCall(CGF.getContext().VoidTy, args,
964 static void emitCPPObjectAtomicSetterCall(CodeGenFunction &CGF,
974 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(),
975 CGF.LoadObjCSelf(), ivar, 0).getAddress();
976 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
977 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
983 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getAddress();
984 argAddr = CGF.Builder.CreateBitCast(argAddr, CGF.Int8PtrTy);
985 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
988 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
991 CGF.CGM.getObjCRuntime().GetCppAtomicObjectFunction();
992 CGF.EmitCall(CGF.getTypes().arrangeFunctionCall(CGF.getContext().VoidTy, args,
1240 void Emit(CodeGenFunction &CGF, Flags flags) {
1242 = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), addr, ivar, /*CVR*/ 0);
1243 CGF.emitDestroy(lvalue.getAddress(), ivar->getType(), destroyer,
1250 static void destroyARCStrongWithStore(CodeGenFunction &CGF,
1254 CGF.EmitARCStoreStrongCall(addr, null, /*ignored*/ true);
1257 static void emitCXXDestructMethod(CodeGenFunction &CGF,
1259 CodeGenFunction::RunCleanupsScope scope(CGF);
1261 llvm::Value *self = CGF.LoadObjCSelf();
1281 destroyer = CGF.getDestroyer(dtorKind);
1284 CleanupKind cleanupKind = CGF.getCleanupKind(dtorKind);
1286 CGF.EHStack.pushCleanup<DestroyIvar>(cleanupKind, self, ivar, destroyer,
1661 void Emit(CodeGenFunction &CGF, Flags flags) {
1662 CGF.EmitARCRelease(object, /*precise*/ true);
1700 static llvm::Value *emitARCValueOperation(CodeGenFunction &CGF,
1707 std::vector<llvm::Type*> args(1, CGF.Int8PtrTy);
1709 llvm::FunctionType::get(CGF.Int8PtrTy, args, false);
1710 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1715 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
1718 llvm::CallInst *call = CGF.Builder.CreateCall(fn, value);
1722 return CGF.Builder.CreateBitCast(call, origType);
1727 static llvm::Value *emitARCLoadOperation(CodeGenFunction &CGF,
1732 std::vector<llvm::Type*> args(1, CGF.Int8PtrPtrTy);
1734 llvm::FunctionType::get(CGF.Int8PtrTy, args, false);
1735 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1740 addr = CGF.Builder.CreateBitCast(addr, CGF.Int8PtrPtrTy);
1743 llvm::CallInst *call = CGF.Builder.CreateCall(fn, addr);
1748 if (origType != CGF.Int8PtrPtrTy)
1749 result = CGF.Builder.CreateBitCast(result,
1757 static llvm::Value *emitARCStoreOperation(CodeGenFunction &CGF,
1767 llvm::Type *argTypes[] = { CGF.Int8PtrPtrTy, CGF.Int8PtrTy };
1770 = llvm::FunctionType::get(CGF.Int8PtrTy, argTypes, false);
1771 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1776 addr = CGF.Builder.CreateBitCast(addr, CGF.Int8PtrPtrTy);
1777 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
1779 llvm::CallInst *result = CGF.Builder.CreateCall2(fn, addr, value);
1784 return CGF.Builder.CreateBitCast(result, origType);
1789 static void emitARCCopyOperation(CodeGenFunction &CGF,
1797 std::vector<llvm::Type*> argTypes(2, CGF.Int8PtrPtrTy);
1799 = llvm::FunctionType::get(CGF.Builder.getVoidTy(), argTypes, false);
1800 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1803 dst = CGF.Builder.CreateBitCast(dst, CGF.Int8PtrPtrTy);
1804 src = CGF.Builder.CreateBitCast(src, CGF.Int8PtrPtrTy);
1806 llvm::CallInst *result = CGF.Builder.CreateCall2(fn, dst, src);
2205 void CodeGenFunction::destroyARCStrongPrecise(CodeGenFunction &CGF,
2208 llvm::Value *ptr = CGF.Builder.CreateLoad(addr, "strongdestroy");
2209 CGF.EmitARCRelease(ptr, /*precise*/ true);
2212 void CodeGenFunction::destroyARCStrongImprecise(CodeGenFunction &CGF,
2215 llvm::Value *ptr = CGF.Builder.CreateLoad(addr, "strongdestroy");
2216 CGF.EmitARCRelease(ptr, /*precise*/ false);
2219 void CodeGenFunction::destroyARCWeak(CodeGenFunction &CGF,
2222 CGF.EmitARCDestroyWeak(addr);
2231 void Emit(CodeGenFunction &CGF, Flags flags) {
2232 CGF.EmitObjCAutoreleasePoolPop(Token);
2240 void Emit(CodeGenFunction &CGF, Flags flags) {
2241 CGF.EmitObjCMRRAutoreleasePoolPop(Token);
2253 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2261 return TryEmitResult(CGF.EmitLoadOfLValue(lvalue).getScalarVal(),
2265 return TryEmitResult(CGF.EmitARCLoadWeakRetained(lvalue.getAddress()),
2272 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2284 LValue lv = CGF.EmitLValue(e);
2287 llvm::Value *result = CGF.EmitLoadOfLValue(lv).getScalarVal();
2290 CGF.EmitStoreOfScalar(getNullForVariable(lv.getAddress()), lv);
2298 if (CGF.getLangOpts().CPlusPlus &&
2303 return TryEmitResult(CGF.EmitScalarExpr(e), false);
2305 return tryEmitARCRetainLoadOfScalar(CGF, CGF.EmitLValue(e), type);
2308 static llvm::Value *emitARCRetainAfterCall(CodeGenFunction &CGF,
2313 static llvm::Value *emitARCRetainCall(CodeGenFunction &CGF, const Expr *e) {
2314 llvm::Value *value = CGF.EmitScalarExpr(e);
2315 return emitARCRetainAfterCall(CGF, value);
2318 static llvm::Value *emitARCRetainAfterCall(CodeGenFunction &CGF,
2321 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP();
2324 CGF.Builder.SetInsertPoint(call->getParent(),
2326 value = CGF.EmitARCRetainAutoreleasedReturnValue(value);
2328 CGF.Builder.restoreIP(ip);
2331 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP();
2335 CGF.Builder.SetInsertPoint(BB, BB->begin());
2336 value = CGF.EmitARCRetainAutoreleasedReturnValue(value);
2338 CGF.Builder.restoreIP(ip);
2345 operand = emitARCRetainAfterCall(CGF, operand);
2353 return CGF.EmitARCRetainNonBlock(value);
2396 static TryEmitResult tryEmitARCRetainPseudoObject(CodeGenFunction &CGF,
2419 result = tryEmitARCRetainScalarExpr(CGF, ov->getSourceExpr());
2420 opaqueData = OVMA::bind(CGF, ov, RValue::get(result.getPointer()));
2424 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr());
2431 result = tryEmitARCRetainScalarExpr(CGF, semantic);
2435 CGF.EmitIgnoredExpr(semantic);
2441 opaques[i].unbind(CGF);
2447 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
2450 CGF.enterFullExpression(cleanups);
2451 CodeGenFunction::RunCleanupsScope scope(CGF);
2452 return tryEmitARCRetainScalarExpr(CGF, cleanups->getSubExpr());
2473 = tryEmitARCRetainLoadOfScalar(CGF, ce->getSubExpr());
2476 value = CGF.Builder.CreateBitCast(value, resultType);
2490 resultType = CGF.ConvertType(ce->getType());
2498 llvm::Value *result = CGF.EmitScalarExpr(ce->getSubExpr());
2499 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2512 result = CGF.EmitScalarExpr(ce->getSubExpr());
2517 = tryEmitARCRetainScalarExpr(CGF, ce->getSubExpr());
2524 result = CGF.Builder.CreateBitCast(result, resultType);
2532 result = CGF.EmitARCRetainBlock(result, /*mandatory*/ true);
2533 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2540 CGF, ce->getSubExpr());
2541 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2563 llvm::Value *result = emitARCRetainCall(CGF, e);
2564 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2570 = tryEmitARCRetainPseudoObject(CGF, pseudo);
2573 value = CGF.Builder.CreateBitCast(value, resultType);
2585 llvm::Value *result = CGF.EmitScalarExpr(e);
2586 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2590 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2593 TryEmitResult result = tryEmitARCRetainLoadOfScalar(CGF, lvalue, type);
2596 value = CGF.EmitARCRetain(type, value);