Home | History | Annotate | Download | only in CodeGen

Lines Matching refs:CGF

33 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e);
34 static RValue AdjustRelatedResultType(CodeGenFunction &CGF,
230 static RValue AdjustRelatedResultType(CodeGenFunction &CGF,
238 CGF.getContext().hasSameType(ExpT, Method->getReturnType()) ||
243 return RValue::get(CGF.Builder.CreateBitCast(Result.getScalarVal(),
244 CGF.ConvertType(ExpT)));
434 void Emit(CodeGenFunction &CGF, Flags flags) override {
435 const ObjCMethodDecl *method = cast<ObjCMethodDecl>(CGF.CurCodeDecl);
444 llvm::Value *self = CGF.LoadObjCSelf();
447 CGF.CGM.getObjCRuntime().GenerateMessageSendSuper(CGF, ReturnValueSlot(),
448 CGF.getContext().VoidTy,
498 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
517 static void emitStructGetterCall(CodeGenFunction &CGF, ObjCIvarDecl *ivar,
519 ASTContext &Context = CGF.getContext();
522 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), CGF.LoadObjCSelf(),
529 llvm::Value *dest = CGF.Builder.CreateBitCast(CGF.ReturnValue, CGF.VoidPtrTy);
532 src = CGF.Builder.CreateBitCast(src, CGF.VoidPtrTy);
535 CharUnits size = CGF.getContext().getTypeSizeInChars(ivar->getType());
536 args.add(RValue::get(CGF.CGM.getSize(size)), Context.getSizeType());
537 args.add(RValue::get(CGF.Builder.getInt1(isAtomic)), Context.BoolTy);
538 args.add(RValue::get(CGF.Builder.getInt1(hasStrong)), Context.BoolTy);
540 llvm::Value *fn = CGF.CGM.getObjCRuntime().GetGetStructFunction();
541 CGF.EmitCall(CGF.getTypes().arrangeFreeFunctionCall(Context.VoidTy, args,
784 static void emitCPPObjectAtomicGetterCall(CodeGenFunction &CGF,
793 args.add(RValue::get(returnAddr), CGF.getContext().VoidPtrTy);
797 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(),
798 CGF.LoadObjCSelf(), ivar, 0).getAddress();
799 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
800 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
803 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
806 CGF.CGM.getObjCRuntime().GetCppAtomicObjectGetFunction();
807 CGF.EmitCall(CGF.getTypes().arrangeFreeFunctionCall(CGF.getContext().VoidTy,
982 static void emitStructSetterCall(CodeGenFunction &CGF, ObjCMethodDecl *OMD,
989 llvm::Value *ivarAddr = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(),
990 CGF.LoadObjCSelf(), ivar, 0)
992 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
993 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
999 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getAddress();
1000 argAddr = CGF.Builder.CreateBitCast(argAddr, CGF.Int8PtrTy);
1001 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
1005 CGF.CGM.getSize(CGF.getContext().getTypeSizeInChars(ivar->getType()));
1006 args.add(RValue::get(size), CGF.getContext().getSizeType());
1009 args.add(RValue::get(CGF.Builder.getTrue()), CGF.getContext().BoolTy);
1013 args.add(RValue::get(CGF.Builder.getFalse()), CGF.getContext().BoolTy);
1015 llvm::Value *copyStructFn = CGF.CGM.getObjCRuntime().GetSetStructFunction();
1016 CGF.EmitCall(CGF.getTypes().arrangeFreeFunctionCall(CGF.getContext().VoidTy,
1026 static void emitCPPObjectAtomicSetterCall(CodeGenFunction &CGF,
1036 CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(),
1037 CGF.LoadObjCSelf(), ivar, 0).getAddress();
1038 ivarAddr = CGF.Builder.CreateBitCast(ivarAddr, CGF.Int8PtrTy);
1039 args.add(RValue::get(ivarAddr), CGF.getContext().VoidPtrTy);
1045 llvm::Value *argAddr = CGF.EmitLValue(&argRef).getAddress();
1046 argAddr = CGF.Builder.CreateBitCast(argAddr, CGF.Int8PtrTy);
1047 args.add(RValue::get(argAddr), CGF.getContext().VoidPtrTy);
1050 args.add(RValue::get(AtomicHelperFn), CGF.getContext().VoidPtrTy);
1053 CGF.CGM.getObjCRuntime().GetCppAtomicObjectSetFunction();
1054 CGF.EmitCall(CGF.getTypes().arrangeFreeFunctionCall(CGF.getContext().VoidTy,
1302 void Emit(CodeGenFunction &CGF, Flags flags) override {
1304 = CGF.EmitLValueForIvar(CGF.TypeOfSelfObject(), addr, ivar, /*CVR*/ 0);
1305 CGF.emitDestroy(lvalue.getAddress(), ivar->getType(), destroyer,
1312 static void destroyARCStrongWithStore(CodeGenFunction &CGF,
1316 CGF.EmitARCStoreStrongCall(addr, null, /*ignored*/ true);
1319 static void emitCXXDestructMethod(CodeGenFunction &CGF,
1321 CodeGenFunction::RunCleanupsScope scope(CGF);
1323 llvm::Value *self = CGF.LoadObjCSelf();
1343 destroyer = CGF.getDestroyer(dtorKind);
1346 CleanupKind cleanupKind = CGF.getCleanupKind(dtorKind);
1348 CGF.EHStack.pushCleanup<DestroyIvar>(cleanupKind, self, ivar, destroyer,
1732 void Emit(CodeGenFunction &CGF, Flags flags) override {
1734 CGF.EmitARCRelease(object, ARCImpreciseLifetime);
1794 static llvm::Value *emitARCValueOperation(CodeGenFunction &CGF,
1803 llvm::FunctionType::get(CGF.Int8PtrTy, CGF.Int8PtrTy, false);
1804 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1809 value = CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy);
1812 llvm::CallInst *call = CGF.EmitNounwindRuntimeCall(fn, value);
1817 return CGF.Builder.CreateBitCast(call, origType);
1822 static llvm::Value *emitARCLoadOperation(CodeGenFunction &CGF,
1828 llvm::FunctionType::get(CGF.Int8PtrTy, CGF.Int8PtrPtrTy, false);
1829 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1834 addr = CGF.Builder.CreateBitCast(addr, CGF.Int8PtrPtrTy);
1837 llvm::Value *result = CGF.EmitNounwindRuntimeCall(fn, addr);
1840 if (origType != CGF.Int8PtrPtrTy)
1841 result = CGF.Builder.CreateBitCast(result,
1849 static llvm::Value *emitARCStoreOperation(CodeGenFunction &CGF,
1859 llvm::Type *argTypes[] = { CGF.Int8PtrPtrTy, CGF.Int8PtrTy };
1862 = llvm::FunctionType::get(CGF.Int8PtrTy, argTypes, false);
1863 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1869 CGF.Builder.CreateBitCast(addr, CGF.Int8PtrPtrTy),
1870 CGF.Builder.CreateBitCast(value, CGF.Int8PtrTy)
1872 llvm::CallInst *result = CGF.EmitNounwindRuntimeCall(fn, args);
1876 return CGF.Builder.CreateBitCast(result, origType);
1881 static void emitARCCopyOperation(CodeGenFunction &CGF,
1889 llvm::Type *argTypes[] = { CGF.Int8PtrPtrTy, CGF.Int8PtrPtrTy };
1892 = llvm::FunctionType::get(CGF.Builder.getVoidTy(), argTypes, false);
1893 fn = createARCRuntimeFunction(CGF.CGM, fnType, fnName);
1897 CGF.Builder.CreateBitCast(dst, CGF.Int8PtrPtrTy),
1898 CGF.Builder.CreateBitCast(src, CGF.Int8PtrPtrTy)
1900 CGF.EmitNounwindRuntimeCall(fn, args);
2317 void CodeGenFunction::destroyARCStrongPrecise(CodeGenFunction &CGF,
2320 CGF.EmitARCDestroyStrong(addr, ARCPreciseLifetime);
2323 void CodeGenFunction::destroyARCStrongImprecise(CodeGenFunction &CGF,
2326 CGF.EmitARCDestroyStrong(addr, ARCImpreciseLifetime);
2329 void CodeGenFunction::destroyARCWeak(CodeGenFunction &CGF,
2332 CGF.EmitARCDestroyWeak(addr);
2341 void Emit(CodeGenFunction &CGF, Flags flags) override {
2342 CGF.EmitObjCAutoreleasePoolPop(Token);
2350 void Emit(CodeGenFunction &CGF, Flags flags) override {
2351 CGF.EmitObjCMRRAutoreleasePoolPop(Token);
2363 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2371 return TryEmitResult(CGF.EmitLoadOfLValue(lvalue,
2376 return TryEmitResult(CGF.EmitARCLoadWeakRetained(lvalue.getAddress()),
2383 static TryEmitResult tryEmitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2395 LValue lv = CGF.EmitLValue(e);
2398 llvm::Value *result = CGF.EmitLoadOfLValue(lv,
2402 CGF.EmitStoreOfScalar(getNullForVariable(lv.getAddress()), lv);
2410 if (CGF.getLangOpts().CPlusPlus &&
2415 return TryEmitResult(CGF.EmitScalarExpr(e), false);
2417 return tryEmitARCRetainLoadOfScalar(CGF, CGF.EmitLValue(e), type);
2420 static llvm::Value *emitARCRetainAfterCall(CodeGenFunction &CGF,
2425 static llvm::Value *emitARCRetainCall(CodeGenFunction &CGF, const Expr *e) {
2426 llvm::Value *value = CGF.EmitScalarExpr(e);
2427 return emitARCRetainAfterCall(CGF, value);
2430 static llvm::Value *emitARCRetainAfterCall(CodeGenFunction &CGF,
2433 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP();
2436 CGF.Builder.SetInsertPoint(call->getParent(),
2438 value = CGF.EmitARCRetainAutoreleasedReturnValue(value);
2440 CGF.Builder.restoreIP(ip);
2443 CGBuilderTy::InsertPoint ip = CGF.Builder.saveIP();
2447 CGF.Builder.SetInsertPoint(BB, BB->begin());
2448 value = CGF.EmitARCRetainAutoreleasedReturnValue(value);
2450 CGF.Builder.restoreIP(ip);
2457 operand = emitARCRetainAfterCall(CGF, operand);
2465 return CGF.EmitARCRetainNonBlock(value);
2508 static TryEmitResult tryEmitARCRetainPseudoObject(CodeGenFunction &CGF,
2531 result = tryEmitARCRetainScalarExpr(CGF, ov->getSourceExpr());
2532 opaqueData = OVMA::bind(CGF, ov, RValue::get(result.getPointer()));
2536 opaqueData = OVMA::bind(CGF, ov, ov->getSourceExpr());
2543 result = tryEmitARCRetainScalarExpr(CGF, semantic);
2547 CGF.EmitIgnoredExpr(semantic);
2553 opaques[i].unbind(CGF);
2559 tryEmitARCRetainScalarExpr(CodeGenFunction &CGF, const Expr *e) {
2583 = tryEmitARCRetainLoadOfScalar(CGF, ce->getSubExpr());
2586 value = CGF.Builder.CreateBitCast(value, resultType);
2600 resultType = CGF.ConvertType(ce->getType());
2608 llvm::Value *result = CGF.EmitScalarExpr(ce->getSubExpr());
2609 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2622 result = CGF.EmitScalarExpr(ce->getSubExpr());
2627 = tryEmitARCRetainScalarExpr(CGF, ce->getSubExpr());
2634 result = CGF.Builder.CreateBitCast(result, resultType);
2642 result = CGF.EmitARCRetainBlock(result, /*mandatory*/ true);
2643 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2650 llvm::Value *result = emitARCRetainCall(CGF, ce->getSubExpr());
2651 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2673 llvm::Value *result = emitARCRetainCall(CGF, e);
2674 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2680 = tryEmitARCRetainPseudoObject(CGF, pseudo);
2683 value = CGF.Builder.CreateBitCast(value, resultType);
2695 llvm::Value *result = CGF.EmitScalarExpr(e);
2696 if (resultType) result = CGF.Builder.CreateBitCast(result, resultType);
2700 static llvm::Value *emitARCRetainLoadOfScalar(CodeGenFunction &CGF,
2703 TryEmitResult result = tryEmitARCRetainLoadOfScalar(CGF, lvalue, type);
2706 value = CGF.EmitARCRetain(type, value);