Lines Matching refs:CGF

1011   CodeGen::RValue EmitMessageSend(CodeGen::CodeGenFunction &CGF,
1086 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1089 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1092 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1170 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1171 Address EmitSelectorAddr(CodeGenFunction &CGF, Selector Sel);
1178 CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1187 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1194 llvm::Value *GetClass(CodeGenFunction &CGF,
1197 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
1198 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override;
1202 llvm::Value *GetSelector(CodeGenFunction &CGF,
1213 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1226 void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1228 void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1230 void EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF, const Stmt &S);
1231 void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
1233 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1235 void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1237 void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1240 void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1243 void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1245 void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1249 LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
1252 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1348 CodeGen::RValue EmitVTableMessageSend(CodeGen::CodeGenFunction &CGF,
1365 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1368 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1372 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1376 llvm::Value *EmitSuperClassRef(CodeGenFunction &CGF,
1381 llvm::Value *EmitMetaClassRef(CodeGenFunction &CGF,
1393 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1394 Address EmitSelectorAddr(CodeGenFunction &CGF, Selector Sel);
1428 bool IsIvarOffsetKnownIdempotent(const CodeGen::CodeGenFunction &CGF,
1441 dyn_cast_or_null<ObjCMethodDecl>(CGF.CurFuncDecl))
1453 CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1462 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1469 llvm::Value *GetClass(CodeGenFunction &CGF,
1472 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override
1473 { return EmitSelector(CGF, Sel); }
1474 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override
1475 { return EmitSelectorAddr(CGF, Sel); }
1479 llvm::Value *GetSelector(CodeGenFunction &CGF,
1481 { return EmitSelector(CGF, Method->getSelector()); }
1489 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1523 void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1525 void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1527 void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
1529 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1531 void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1533 void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1536 void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1539 void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1541 void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1544 LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
1547 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1559 void init(CodeGenFunction &CGF, llvm::Value *receiver) {
1561 NullBB = CGF.createBasicBlock("msgSend.null-receiver");
1562 llvm::BasicBlock *callBB = CGF.createBasicBlock("msgSend.call");
1568 llvm::Value *isNull = CGF.Builder.CreateIsNull(receiver);
1569 CGF.Builder.CreateCondBr(isNull, NullBB, callBB);
1572 CGF.EmitBlock(callBB);
1577 RValue complete(CodeGenFunction &CGF, RValue result, QualType resultType,
1588 llvm::BasicBlock *callBB = CGF.Builder.GetInsertBlock();
1590 contBB = CGF.createBasicBlock("msgSend.cont");
1591 CGF.Builder.CreateBr(contBB);
1595 CGF.EmitBlock(NullBB);
1607 CGF.EmitARCRelease(RV.getScalarVal(), ARCImpreciseLifetime);
1613 assert(CGF.Builder.GetInsertBlock() == NullBB);
1618 if (contBB) CGF.EmitBlock(contBB);
1625 llvm::Constant *null = CGF.CGM.EmitNullConstant(resultType);
1631 CGF.EmitBlock(contBB);
1632 llvm::PHINode *phi = CGF.Builder.CreatePHI(null->getType(), 2);
1644 CGF.EmitNullInitialization(result.getAggregateAddress(), resultType);
1645 if (contBB) CGF.EmitBlock(contBB);
1650 CGF.EmitBlock(contBB);
1658 llvm::PHINode *real = CGF.Builder.CreatePHI(scalarTy, 2);
1661 llvm::PHINode *imag = CGF.Builder.CreatePHI(scalarTy, 2);
1704 llvm::Value *CGObjCMac::GetClass(CodeGenFunction &CGF,
1706 return EmitClassRef(CGF, ID);
1710 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, Selector Sel) {
1711 return EmitSelector(CGF, Sel);
1713 Address CGObjCMac::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) {
1714 return EmitSelectorAddr(CGF, Sel);
1716 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, const ObjCMethodDecl
1718 return EmitSelector(CGF, Method->getSelector());
1772 CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1785 CGF.CreateTempAlloca(ObjCTypes.SuperTy, CGF.getPointerAlign(),
1788 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
1789 CGF.Builder.CreateStore(
1791 CGF.Builder.CreateStructGEP(ObjCSuper, 0, CharUnits::Zero()));
1803 Target = EmitClassRef(CGF, Class->getSuperClass());
1804 Target = CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, Target, 0);
1805 Target = CGF.Builder.CreateAlignedLoad(Target, CGF.getPointerAlign());
1809 CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, MetaClassPtr, 1);
1811 CGF.Builder.CreateAlignedLoad(SuperPtr, CGF.getPointerAlign());
1815 Target = EmitClassRef(CGF, Class->getSuperClass());
1818 ClassPtr = CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, ClassPtr, 1);
1819 Target = CGF.Builder.CreateAlignedLoad(ClassPtr, CGF.getPointerAlign());
1824 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
1825 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
1826 CGF.Builder.CreateStore(Target,
1827 CGF.Builder.CreateStructGEP(ObjCSuper, 1, CGF.getPointerSize()));
1828 return EmitMessageSend(CGF, Return, ResultType,
1829 EmitSelector(CGF, Sel),
1835 CodeGen::RValue CGObjCMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1843 return EmitMessageSend(CGF, Return, ResultType,
1844 EmitSelector(CGF, Sel),
1845 Receiver, CGF.getContext().getObjCIdType(),
1859 CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
1872 Arg0 = CGF.Builder.CreateBitCast(Arg0, ObjCTypes.ObjectPtrTy);
1874 ActualArgs.add(RValue::get(Sel), CGF.getContext().getObjCSelType());
1900 dyn_cast_or_null<ObjCMethodDecl>(CGF.CurCodeDecl)) {
1904 llvm::Value *SelfAddr = CGF.GetAddrOfLocalVar(Self).getPointer();
1916 if (ReceiverCanBeNull) nullReturn.init(CGF, Arg0);
1929 nullReturn.init(CGF, Arg0);
1940 nullReturn.init(CGF, Arg0);
1949 RValue rvalue = CGF.EmitCall(MSI.CallInfo, Fn, Return, ActualArgs,
1958 return nullReturn.complete(CGF, rvalue, ResultType, CallArgs,
2651 llvm::Value *CGObjCMac::GenerateProtocolRef(CodeGenFunction &CGF,
3625 void CGObjCMac::EmitTryStmt(CodeGenFunction &CGF, const ObjCAtTryStmt &S) {
3626 return EmitTryOrSynchronizedStmt(CGF, S);
3629 void CGObjCMac::EmitSynchronizedStmt(CodeGenFunction &CGF,
3631 return EmitTryOrSynchronizedStmt(CGF, S);
3649 void Emit(CodeGenFunction &CGF, Flags flags) override {
3653 CGF.createBasicBlock("finally.call_exit");
3655 CGF.createBasicBlock("finally.no_call_exit");
3656 CGF.Builder.CreateCondBr(CGF.Builder.CreateLoad(CallTryExitVar),
3659 CGF.EmitBlock(FinallyCallExit);
3660 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryExitFn(),
3663 CGF.EmitBlock(FinallyNoCallExit);
3674 CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot());
3676 CGF.EmitStmt(FinallyStmt->getFinallyBody());
3678 if (CGF.HaveInsertPoint()) {
3679 CGF.Builder.CreateStore(CurCleanupDest,
3680 CGF.getNormalCleanupDestSlot());
3683 CGF.EnsureInsertPoint();
3689 llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot);
3690 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncExitFn(), SyncArg);
3696 CodeGenFunction &CGF;
3709 FragileHazards(CodeGenFunction &CGF);
3721 FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
3728 I = CGF.CurFn->begin(), E = CGF.CurFn->end(); I != E; ++I)
3767 CGF.EmitNounwindRuntimeCall(WriteHazard, Locals);
3774 call->setCallingConv(CGF.getRuntimeCC());
3782 CGBuilderTy Builder(CGF, CGF.getLLVMContext());
3786 FI = CGF.CurFn->begin(), FE = CGF.CurFn->end(); FI != FE; ++FI) {
3828 addIfPresent(AllocasToIgnore, CGF.ReturnValue);
3829 addIfPresent(AllocasToIgnore, CGF.NormalCleanupDest);
3833 llvm::BasicBlock &Entry = CGF.CurFn->getEntryBlock();
3844 return llvm::FunctionType::get(CGF.VoidTy, tys, false);
3959 void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
3966 CGF.getJumpDestInCurrentScope("finally.end");
3971 CGF.getJumpDestInCurrentScope("finally.rethrow");
3981 CGF.EmitScalarExpr(cast<ObjCAtSynchronizedStmt>(S).getSynchExpr());
3982 SyncArg = CGF.Builder.CreateBitCast(SyncArg, ObjCTypes.ObjectPtrTy);
3983 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncEnterFn(), SyncArg);
3985 SyncArgSlot = CGF.CreateTempAlloca(SyncArg->getType(),
3986 CGF.getPointerAlign(), "sync.arg");
3987 CGF.Builder.CreateStore(SyncArg, SyncArgSlot);
3992 Address ExceptionData = CGF.CreateTempAlloca(ObjCTypes.ExceptionDataTy,
3993 CGF.getPointerAlign(),
4000 FragileHazards Hazards(CGF);
4010 Address CallTryExitVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(),
4019 CGF.EHStack.pushCleanup<PerformFragileFinally>(NormalAndEHCleanup, &S,
4028 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
4032 llvm::Constant *Zero = llvm::ConstantInt::get(CGF.Builder.getInt32Ty(), 0);
4034 llvm::Value *SetJmpBuffer = CGF.Builder.CreateGEP(
4037 llvm::CallInst *SetJmpResult = CGF.EmitNounwindRuntimeCall(
4043 llvm::BasicBlock *TryBlock = CGF.createBasicBlock("try");
4044 llvm::BasicBlock *TryHandler = CGF.createBasicBlock("try.handler");
4046 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
4047 CGF.Builder.CreateCondBr(DidCatch, TryHandler, TryBlock);
4050 CGF.EmitBlock(TryBlock);
4051 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
4052 CGF.EmitStmt(isTry ? cast<ObjCAtTryStmt>(S).getTryBody()
4055 CGBuilderTy::InsertPoint TryFallthroughIP = CGF.Builder.saveAndClearIP();
4058 CGF.EmitBlock(TryHandler);
4067 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
4068 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4075 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionExtractFn(),
4080 CGF.ObjCEHValueStack.push_back(Caught);
4091 PropagatingExnVar = CGF.CreateTempAlloca(Caught->getType(),
4092 CGF.getPointerAlign(),
4094 CGF.Builder.CreateStore(Caught, PropagatingExnVar);
4098 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
4102 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSetJmpFn(),
4107 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
4109 CatchBlock = CGF.createBasicBlock("catch");
4110 CatchHandler = CGF.createBasicBlock("catch_for_catch");
4111 CGF.Builder.CreateCondBr(Threw, CatchHandler, CatchBlock);
4113 CGF.EmitBlock(CatchBlock);
4116 CGF.Builder.CreateStore(CGF.Builder.getInt1(HasFinally), CallTryExitVar);
4144 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
4147 CGF.EmitAutoVarDecl(*CatchParam);
4148 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
4151 EmitInitOfCatchParam(CGF, Caught, CatchParam);
4154 CGF.EmitStmt(CatchStmt->getCatchBody());
4159 CGF.EmitBranchThroughCleanup(FinallyEnd);
4171 llvm::Value *Class = EmitClassRef(CGF, IDecl);
4175 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionMatchFn(),
4178 llvm::BasicBlock *MatchedBlock = CGF.createBasicBlock("match");
4179 llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch.next");
4181 CGF.Builder.CreateCondBr(CGF.Builder.CreateIsNotNull(Match, "matched"),
4185 CGF.EmitBlock(MatchedBlock);
4189 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
4191 CGF.EmitAutoVarDecl(*CatchParam);
4192 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
4196 CGF.Builder.CreateBitCast(Caught,
4197 CGF.ConvertType(CatchParam->getType()));
4198 EmitInitOfCatchParam(CGF, Tmp, CatchParam);
4200 CGF.EmitStmt(CatchStmt->getCatchBody());
4205 CGF.EmitBranchThroughCleanup(FinallyEnd);
4207 CGF.EmitBlock(NextCatchBlock);
4210 CGF.ObjCEHValueStack.pop_back();
4218 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4222 CGF.EmitBlock(CatchHandler);
4233 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionExtractFn(),
4235 CGF.Builder.CreateStore(NewCaught, PropagatingExnVar);
4238 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
4239 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4247 CGF.Builder.restoreIP(TryFallthroughIP);
4248 if (CGF.HaveInsertPoint())
4249 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
4250 CGF.PopCleanupBlock();
4251 CGF.EmitBlock(FinallyEnd.getBlock(), true);
4254 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP();
4255 CGF.EmitBlock(FinallyRethrow.getBlock(), true);
4256 if (CGF.HaveInsertPoint()) {
4260 PropagatingExn = CGF.Builder.CreateLoad(PropagatingExnVar);
4265 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionExtractFn(),
4270 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionThrowFn(),
4272 CGF.Builder.CreateUnreachable();
4275 CGF.Builder.restoreIP(SavedIP);
4278 void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
4284 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
4286 CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
4288 assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
4290 ExceptionAsObject = CGF.ObjCEHValueStack.back();
4293 CGF.EmitRuntimeCall(ObjCTypes.getExceptionThrowFn(), ExceptionAsObject)
4295 CGF.Builder.CreateUnreachable();
4299 CGF.Builder.ClearInsertionPoint();
4305 llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
4308 AddrWeakObj = CGF.Builder.CreateBitCast(AddrWeakObj,
4311 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
4313 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
4320 void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
4326 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
4327 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
4328 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4330 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4331 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
4333 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
4341 void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
4348 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
4349 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
4350 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4352 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4353 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
4356 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
4359 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
4367 void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
4375 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
4376 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
4377 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4379 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4380 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
4382 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignIvarFn(), args);
4389 void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
4395 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
4396 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
4397 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4399 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4400 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
4402 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
4407 void CGObjCMac::EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
4411 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, ObjCTypes.Int8PtrTy);
4412 DestPtr = CGF.Builder.CreateBitCast(DestPtr, ObjCTypes.Int8PtrTy);
4414 CGF.EmitNounwindRuntimeCall(ObjCTypes.GcMemmoveCollectableFn(), args);
4419 LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
4426 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
4427 EmitIvarOffset(CGF, ID, Ivar));
4430 llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
4584 llvm::Value *CGObjCMac::EmitClassRefFromId(CodeGenFunction &CGF,
4600 return CGF.Builder.CreateAlignedLoad(Entry, CGF.getPointerAlign());
4603 llvm::Value *CGObjCMac::EmitClassRef(CodeGenFunction &CGF,
4605 return EmitClassRefFromId(CGF, ID->getIdentifier());
4608 llvm::Value *CGObjCMac::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
4610 return EmitClassRefFromId(CGF, II);
4613 llvm::Value *CGObjCMac::EmitSelector(CodeGenFunction &CGF, Selector Sel) {
4614 return CGF.Builder.CreateLoad(EmitSelectorAddr(CGF, Sel));
4617 Address CGObjCMac::EmitSelectorAddr(CodeGenFunction &CGF, Selector Sel) {
4618 CharUnits Align = CGF.getPointerAlign();
6057 llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
6070 CharUnits Align = CGF.getPointerAlign();
6074 return CGF.Builder.CreateAlignedLoad(PTGV, Align);
6085 return CGF.Builder.CreateAlignedLoad(PTGV, Align);
6598 CodeGen::CodeGenFunction &CGF,
6604 llvm::Value *Offset = EmitIvarOffset(CGF, ID, Ivar);
6605 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
6610 CodeGen::CodeGenFunction &CGF,
6614 IvarOffsetValue = CGF.Builder.CreateAlignedLoad(IvarOffsetValue,
6615 CGF.getSizeAlign(), "ivar");
6616 if (IsIvarOffsetKnownIdempotent(CGF, Ivar))
6625 IvarOffsetValue = CGF.Builder.CreateIntCast(
6654 CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
6668 arg0 = CGF.Builder.CreateBitCast(arg0, ObjCTypes.ObjectPtrTy);
6695 nullReturn.init(CGF, arg0);
6740 nullReturn.init(CGF, arg0);
6747 Address(CGF.Builder.CreateBitCast(messageRef, ObjCTypes.MessageRefPtrTy),
6748 CGF.getPointerAlign());
6755 CGF.Builder.CreateStructGEP(mref, 0, CharUnits::Zero());
6756 llvm::Value *callee = CGF.Builder.CreateLoad(calleeAddr, "msgSend_fn");
6758 callee = CGF.Builder.CreateBitCast(callee, MSI.MessengerType);
6760 RValue result = CGF.EmitCall(MSI.CallInfo, callee, returnSlot, args);
6761 return nullReturn.complete(CGF, result, resultType, formalArgs,
6767 CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
6776 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
6777 Receiver, CGF.getContext().getObjCIdType(),
6779 : EmitMessageSend(CGF, Return, ResultType,
6780 EmitSelector(CGF, Sel),
6781 Receiver, CGF.getContext().getObjCIdType(),
6801 llvm::Value *CGObjCNonFragileABIMac::EmitClassRefFromId(CodeGenFunction &CGF,
6805 CharUnits Align = CGF.getPointerAlign();
6820 return CGF.Builder.CreateAlignedLoad(Entry, Align);
6823 llvm::Value *CGObjCNonFragileABIMac::EmitClassRef(CodeGenFunction &CGF,
6825 return EmitClassRefFromId(CGF, ID->getIdentifier(), ID->isWeakImported(), ID);
6829 CodeGenFunction &CGF) {
6831 return EmitClassRefFromId(CGF, II, false, nullptr);
6835 CGObjCNonFragileABIMac::EmitSuperClassRef(CodeGenFunction &CGF,
6837 CharUnits Align = CGF.getPointerAlign();
6852 return CGF.Builder.CreateAlignedLoad(Entry, Align);
6858 llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(CodeGenFunction &CGF,
6861 CharUnits Align = CGF.getPointerAlign();
6878 return CGF.Builder.CreateAlignedLoad(Entry, Align);
6883 llvm::Value *CGObjCNonFragileABIMac::GetClass(CodeGenFunction &CGF,
6893 return EmitClassRef(CGF, ID);
6900 CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
6914 CGF.CreateTempAlloca(ObjCTypes.SuperTy, CGF.getPointerAlign(),
6918 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
6919 CGF.Builder.CreateStore(
6921 CGF.Builder.CreateStructGEP(ObjCSuper, 0, CharUnits::Zero()));
6926 Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
6928 Target = EmitSuperClassRef(CGF, Class);
6933 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
6934 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
6935 CGF.Builder.CreateStore(
6936 Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1, CGF.getPointerSize()));
6939 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
6942 : EmitMessageSend(CGF, Return, ResultType,
6943 EmitSelector(CGF, Sel),
6948 llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CodeGenFunction &CGF,
6950 Address Addr = EmitSelectorAddr(CGF, Sel);
6952 llvm::LoadInst* LI = CGF.Builder.CreateLoad(Addr);
6958 Address CGObjCNonFragileABIMac::EmitSelectorAddr(CodeGenFunction &CGF,
6962 CharUnits Align = CGF.getPointerAlign();
6982 void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
6990 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
6991 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
6992 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
6994 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
6995 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
6997 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignIvarFn(), args);
7004 CodeGen::CodeGenFunction &CGF,
7010 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7011 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7012 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7014 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7015 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
7017 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
7022 CodeGen::CodeGenFunction &CGF,
7026 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, ObjCTypes.Int8PtrTy);
7027 DestPtr = CGF.Builder.CreateBitCast(DestPtr, ObjCTypes.Int8PtrTy);
7029 CGF.EmitNounwindRuntimeCall(ObjCTypes.GcMemmoveCollectableFn(), args);
7036 CodeGen::CodeGenFunction &CGF,
7039 AddrWeakObj = CGF.Builder.CreateBitCast(AddrWeakObj, ObjCTypes.PtrObjectPtrTy);
7041 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
7043 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
7050 void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
7056 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7057 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7058 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7060 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7061 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
7063 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
7070 void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
7077 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7078 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7079 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7081 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7082 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
7085 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
7088 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
7093 CGObjCNonFragileABIMac::EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
7095 EmitAtSynchronizedStmt(CGF, S,
7125 void CGObjCNonFragileABIMac::EmitTryStmt(CodeGen::CodeGenFunction &CGF,
7127 EmitTryCatchStmt(CGF, S,
7134 void CGObjCNonFragileABIMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
7138 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
7139 Exception = CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
7140 CGF.EmitRuntimeCallOrInvoke(ObjCTypes.getExceptionThrowFn(), Exception)
7143 CGF.EmitRuntimeCallOrInvoke(ObjCTypes.getExceptionRethrowFn())
7147 CGF.Builder.CreateUnreachable();
7149 CGF.Builder.ClearInsertionPoint();