Lines Matching defs:CGF

1031   llvm::Value *EmitClassRefViaRuntime(CodeGenFunction &CGF,
1067 CodeGen::RValue EmitMessageSend(CodeGen::CodeGenFunction &CGF,
1100 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
1241 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1244 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1247 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1309 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1319 CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1328 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1335 llvm::Value *GetClass(CodeGenFunction &CGF,
1338 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
1339 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override;
1343 llvm::Value *GetSelector(CodeGenFunction &CGF,
1354 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1367 void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1369 void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1371 void EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF, const Stmt &S);
1372 void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
1374 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1376 void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1378 void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1381 void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1384 void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1386 void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1390 LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
1393 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1482 CodeGen::RValue EmitVTableMessageSend(CodeGen::CodeGenFunction &CGF,
1503 llvm::Value *EmitLoadOfClassRef(CodeGenFunction &CGF,
1509 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1512 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1516 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1520 llvm::Value *EmitSuperClassRef(CodeGenFunction &CGF,
1525 llvm::Value *EmitMetaClassRef(CodeGenFunction &CGF,
1537 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1568 bool IsIvarOffsetKnownIdempotent(const CodeGen::CodeGenFunction &CGF,
1585 dyn_cast_or_null<ObjCMethodDecl>(CGF.CurFuncDecl))
1616 CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1625 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1632 llvm::Value *GetClass(CodeGenFunction &CGF,
1635 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override
1636 { return EmitSelector(CGF, Sel); }
1637 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override
1642 llvm::Value *GetSelector(CodeGenFunction &CGF,
1644 { return EmitSelector(CGF, Method->getSelector()); }
1652 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1689 void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1691 void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1693 void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
1695 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1697 void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1699 void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1702 void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1705 void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1707 void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1710 LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
1713 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1725 void init(CodeGenFunction &CGF, llvm::Value *receiver) {
1727 NullBB = CGF.createBasicBlock("msgSend.null-receiver");
1728 llvm::BasicBlock *callBB = CGF.createBasicBlock("msgSend.call");
1734 llvm::Value *isNull = CGF.Builder.CreateIsNull(receiver);
1735 CGF.Builder.CreateCondBr(isNull, NullBB, callBB);
1738 CGF.EmitBlock(callBB);
1743 RValue complete(CodeGenFunction &CGF,
1757 llvm::BasicBlock *callBB = CGF.Builder.GetInsertBlock();
1759 contBB = CGF.createBasicBlock("msgSend.cont");
1760 CGF.Builder.CreateBr(contBB);
1764 CGF.EmitBlock(NullBB);
1768 CGObjCRuntime::destroyCalleeDestroyedArguments(CGF, Method, CallArgs);
1772 assert(CGF.Builder.GetInsertBlock() == NullBB);
1777 if (contBB) CGF.EmitBlock(contBB);
1785 CGF.EmitFromMemory(CGF.CGM.EmitNullConstant(resultType), resultType);
1791 CGF.EmitBlock(contBB);
1792 llvm::PHINode *phi = CGF.Builder.CreatePHI(null->getType(), 2);
1805 CGF.EmitNullInitialization(result.getAggregateAddress(), resultType);
1806 if (contBB) CGF.EmitBlock(contBB);
1811 CGF.EmitBlock(contBB);
1819 llvm::PHINode *real = CGF.Builder.CreatePHI(scalarTy, 2);
1822 llvm::PHINode *imag = CGF.Builder.CreatePHI(scalarTy, 2);
1887 llvm::Value *CGObjCMac::GetClass(CodeGenFunction &CGF,
1889 return EmitClassRef(CGF, ID);
1893 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, Selector Sel) {
1894 return EmitSelector(CGF, Sel);
1896 Address CGObjCMac::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) {
1899 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, const ObjCMethodDecl
1901 return EmitSelector(CGF, Method->getSelector());
2052 CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
2064 RawAddress ObjCSuper = CGF.CreateTempAlloca(
2065 ObjCTypes.SuperTy, CGF.getPointerAlign(), "objc_super");
2067 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
2068 CGF.Builder.CreateStore(ReceiverAsObject,
2069 CGF.Builder.CreateStructGEP(ObjCSuper, 0));
2082 Target = EmitClassRef(CGF, Class->getSuperClass());
2083 Target = CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, Target, 0);
2084 Target = CGF.Builder.CreateAlignedLoad(ClassTyPtr, Target,
2085 CGF.getPointerAlign());
2089 CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, MetaClassPtr, 1);
2090 llvm::Value *Super = CGF.Builder.CreateAlignedLoad(ClassTyPtr, SuperPtr,
2091 CGF.getPointerAlign());
2095 Target = EmitClassRef(CGF, Class->getSuperClass());
2098 ClassPtr = CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, ClassPtr, 1);
2099 Target = CGF.Builder.CreateAlignedLoad(ClassTyPtr, ClassPtr,
2100 CGF.getPointerAlign());
2105 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
2106 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
2107 CGF.Builder.CreateStore(Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1));
2108 return EmitMessageSend(CGF, Return, ResultType, Sel, ObjCSuper.getPointer(),
2114 CodeGen::RValue CGObjCMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
2122 return EmitMessageSend(CGF, Return, ResultType, Sel, Receiver,
2123 CGF.getContext().getObjCIdType(), false, CallArgs,
2128 CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
2140 auto selTy = CGF.getContext().getObjCSelType();
2145 Arg0 = CGF.Builder.CreateBitCast(Arg0, ObjCTypes.ObjectPtrTy);
2160 canMessageReceiverBeNull(CGF, Method, IsSuper, ClassReceiver, Arg0);
2193 CGF.Builder.CreateBitCast(Fn.getCallee(), MSI.MessengerType));
2206 nullReturn.init(CGF, Arg0);
2211 SelValue = GetSelector(CGF, Sel);
2217 RValue rvalue = CGF.EmitCall(MSI.CallInfo, Callee, Return, ActualArgs,
2226 return nullReturn.complete(CGF, Return, rvalue, ResultType, CallArgs,
2961 llvm::Value *CGObjCMac::GenerateProtocolRef(CodeGenFunction &CGF,
2990 CodeGenFunction &CGF,
2995 llvm::Value *className = CGF.CGM
2999 ASTContext &ctx = CGF.CGM.getContext();
3001 CGF.Builder.CreateBitCast(className,
3002 CGF.ConvertType(
3004 llvm::CallInst *call = CGF.Builder.CreateCall(lookUpClassFn, className);
4012 CodeGenFunction &CGF, llvm::Function *Fn, const ObjCMethodDecl *OMD,
4014 auto &Builder = CGF.Builder;
4016 auto selfAddr = CGF.GetAddrOfLocalVar(OMD->getSelfDecl());
4037 auto ResultType = CGF.getContext().getObjCIdType();
4049 CGF, ReturnValueSlot(), ResultType, SelfSel, selfValue, Args, OID,
4061 CGF.createBasicBlock("objc_direct_method.self_is_nil");
4063 CGF.createBasicBlock("objc_direct_method.cont");
4073 CGF.EmitBlock(SelfIsNilBlock);
4079 CGF.EmitNullInitialization(CGF.ReturnValue, retTy);
4081 CGF.EmitBranchThroughCleanup(CGF.ReturnBlock);
4085 CGF.EmitBlock(ContBlock);
4093 CGF.EmitVarDecl(*OMD->getCmdDecl());
4094 Builder.CreateStore(GetSelector(CGF, OMD),
4095 CGF.GetAddrOfLocalVar(OMD->getCmdDecl()));
4221 void CGObjCMac::EmitTryStmt(CodeGenFunction &CGF, const ObjCAtTryStmt &S) {
4222 return EmitTryOrSynchronizedStmt(CGF, S);
4225 void CGObjCMac::EmitSynchronizedStmt(CodeGenFunction &CGF,
4227 return EmitTryOrSynchronizedStmt(CGF, S);
4245 void Emit(CodeGenFunction &CGF, Flags flags) override {
4249 CGF.createBasicBlock("finally.call_exit");
4251 CGF.createBasicBlock("finally.no_call_exit");
4252 CGF.Builder.CreateCondBr(CGF.Builder.CreateLoad(CallTryExitVar),
4255 CGF.EmitBlock(FinallyCallExit);
4256 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryExitFn(),
4257 ExceptionData.emitRawPointer(CGF));
4259 CGF.EmitBlock(FinallyNoCallExit);
4270 CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot());
4272 CGF.EmitStmt(FinallyStmt->getFinallyBody());
4274 if (CGF.HaveInsertPoint()) {
4275 CGF.Builder.CreateStore(CurCleanupDest,
4276 CGF.getNormalCleanupDestSlot());
4279 CGF.EnsureInsertPoint();
4285 llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot);
4286 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncExitFn(), SyncArg);
4292 CodeGenFunction &CGF;
4305 FragileHazards(CodeGenFunction &CGF);
4317 FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
4324 I = CGF.CurFn->begin(), E = CGF.CurFn->end(); I != E; ++I)
4363 llvm::CallInst *Call = CGF.EmitNounwindRuntimeCall(WriteHazard, Locals);
4366 CGF.getLLVMContext(), llvm::Attribute::ElementType,
4374 call->setCallingConv(CGF.getRuntimeCC());
4386 CGBuilderTy Builder(CGF, CGF.getLLVMContext());
4390 FI = CGF.CurFn->begin(), FE = CGF.CurFn->end(); FI != FE; ++FI) {
4431 addIfPresent(AllocasToIgnore, CGF.ReturnValue);
4432 addIfPresent(AllocasToIgnore, CGF.NormalCleanupDest);
4436 llvm::BasicBlock &Entry = CGF.CurFn->getEntryBlock();
4447 return llvm::FunctionType::get(CGF.VoidTy, tys, false);
4558 void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
4565 CGF.getJumpDestInCurrentScope("finally.end");
4570 CGF.getJumpDestInCurrentScope("finally.rethrow");
4580 CGF.EmitScalarExpr(cast<ObjCAtSynchronizedStmt>(S).getSynchExpr());
4581 SyncArg = CGF.Builder.CreateBitCast(SyncArg, ObjCTypes.ObjectPtrTy);
4582 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncEnterFn(), SyncArg);
4584 SyncArgSlot = CGF.CreateTempAlloca(SyncArg->getType(),
4585 CGF.getPointerAlign(), "sync.arg");
4586 CGF.Builder.CreateStore(SyncArg, SyncArgSlot);
4591 Address ExceptionData = CGF.CreateTempAlloca(ObjCTypes.ExceptionDataTy,
4592 CGF.getPointerAlign(),
4599 FragileHazards Hazards(CGF);
4609 Address CallTryExitVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(),
4618 CGF.EHStack.pushCleanup<PerformFragileFinally>(NormalAndEHCleanup, &S,
4627 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
4628 ExceptionData.emitRawPointer(CGF));
4631 llvm::Constant *Zero = llvm::ConstantInt::get(CGF.Builder.getInt32Ty(), 0);
4633 llvm::Value *SetJmpBuffer = CGF.Builder.CreateGEP(
4634 ObjCTypes.ExceptionDataTy, ExceptionData.emitRawPointer(CGF), GEPIndexes,
4636 llvm::CallInst *SetJmpResult = CGF.EmitNounwindRuntimeCall(
4642 llvm::BasicBlock *TryBlock = CGF.createBasicBlock("try");
4643 llvm::BasicBlock *TryHandler = CGF.createBasicBlock("try.handler");
4645 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
4646 CGF.Builder.CreateCondBr(DidCatch, TryHandler, TryBlock);
4649 CGF.EmitBlock(TryBlock);
4650 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
4651 CGF.EmitStmt(isTry ? cast<ObjCAtTryStmt>(S).getTryBody()
4654 CGBuilderTy::InsertPoint TryFallthroughIP = CGF.Builder.saveAndClearIP();
4657 CGF.EmitBlock(TryHandler);
4666 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
4667 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4673 llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
4674 ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF),
4679 CGF.ObjCEHValueStack.push_back(Caught);
4690 PropagatingExnVar = CGF.CreateTempAlloca(Caught->getType(),
4691 CGF.getPointerAlign(),
4693 CGF.Builder.CreateStore(Caught, PropagatingExnVar);
4697 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
4698 ExceptionData.emitRawPointer(CGF));
4701 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSetJmpFn(),
4706 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
4708 CatchBlock = CGF.createBasicBlock("catch");
4709 CatchHandler = CGF.createBasicBlock("catch_for_catch");
4710 CGF.Builder.CreateCondBr(Threw, CatchHandler, CatchBlock);
4712 CGF.EmitBlock(CatchBlock);
4715 CGF.Builder.CreateStore(CGF.Builder.getInt1(HasFinally), CallTryExitVar);
4741 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
4744 CGF.EmitAutoVarDecl(*CatchParam);
4745 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
4748 EmitInitOfCatchParam(CGF, Caught, CatchParam);
4751 CGF.EmitStmt(CatchStmt->getCatchBody());
4756 CGF.EmitBranchThroughCleanup(FinallyEnd);
4768 llvm::Value *Class = EmitClassRef(CGF, IDecl);
4772 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionMatchFn(),
4775 llvm::BasicBlock *MatchedBlock = CGF.createBasicBlock("match");
4776 llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch.next");
4778 CGF.Builder.CreateCondBr(CGF.Builder.CreateIsNotNull(Match, "matched"),
4782 CGF.EmitBlock(MatchedBlock);
4786 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
4788 CGF.EmitAutoVarDecl(*CatchParam);
4789 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
4793 CGF.Builder.CreateBitCast(Caught,
4794 CGF.ConvertType(CatchParam->getType()));
4795 EmitInitOfCatchParam(CGF, Tmp, CatchParam);
4797 CGF.EmitStmt(CatchStmt->getCatchBody());
4802 CGF.EmitBranchThroughCleanup(FinallyEnd);
4804 CGF.EmitBlock(NextCatchBlock);
4807 CGF.ObjCEHValueStack.pop_back();
4815 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4819 CGF.EmitBlock(CatchHandler);
4829 llvm::CallInst *NewCaught = CGF.EmitNounwindRuntimeCall(
4830 ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF),
4832 CGF.Builder.CreateStore(NewCaught, PropagatingExnVar);
4835 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
4836 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4844 CGF.Builder.restoreIP(TryFallthroughIP);
4845 if (CGF.HaveInsertPoint())
4846 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
4847 CGF.PopCleanupBlock();
4848 CGF.EmitBlock(FinallyEnd.getBlock(), true);
4851 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP();
4852 CGF.EmitBlock(FinallyRethrow.getBlock(), true);
4853 if (CGF.HaveInsertPoint()) {
4857 PropagatingExn = CGF.Builder.CreateLoad(PropagatingExnVar);
4861 llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
4862 ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF));
4866 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionThrowFn(),
4868 CGF.Builder.CreateUnreachable();
4871 CGF.Builder.restoreIP(SavedIP);
4874 void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
4880 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
4882 CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
4884 assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
4886 ExceptionAsObject = CGF.ObjCEHValueStack.back();
4889 CGF.EmitRuntimeCall(ObjCTypes.getExceptionThrowFn(), ExceptionAsObject)
4891 CGF.Builder.CreateUnreachable();
4895 CGF.Builder.ClearInsertionPoint();
4901 llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
4904 llvm::Value *AddrWeakObjVal = CGF.Builder.CreateBitCast(
4905 AddrWeakObj.emitRawPointer(CGF), ObjCTypes.PtrObjectPtrTy);
4907 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
4909 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
4916 void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
4922 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4923 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4924 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4926 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4927 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4930 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
4937 void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
4944 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4945 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4946 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4948 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4949 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4953 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
4956 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
4963 void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
4971 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4972 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4973 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4975 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4976 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4979 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignIvarFn(), args);
4985 void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
4991 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4992 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4993 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4995 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4996 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4999 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
5003 void CGObjCMac::EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
5006 llvm::Value *args[] = {DestPtr.emitRawPointer(CGF),
5007 SrcPtr.emitRawPointer(CGF), size};
5008 CGF.EmitNounwindRuntimeCall(ObjCTypes.GcMemmoveCollectableFn(), args);
5013 LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
5020 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
5021 EmitIvarOffset(CGF, ID, Ivar));
5024 llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
5205 llvm::Value *CGObjCMac::EmitClassRefFromId(CodeGenFunction &CGF,
5218 return CGF.Builder.CreateAlignedLoad(Entry->getValueType(), Entry,
5219 CGF.getPointerAlign());
5222 llvm::Value *CGObjCMac::EmitClassRef(CodeGenFunction &CGF,
5227 return EmitClassRefViaRuntime(CGF, ID, ObjCTypes);
5231 return EmitClassRefFromId(CGF, RuntimeName);
5234 llvm::Value *CGObjCMac::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
5236 return EmitClassRefFromId(CGF, II);
5239 llvm::Value *CGObjCMac::EmitSelector(CodeGenFunction &CGF, Selector Sel) {
5240 return CGF.Builder.CreateLoad(EmitSelectorAddr(Sel));
6581 llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
6593 CharUnits Align = CGF.getPointerAlign();
6597 return CGF.Builder.CreateAlignedLoad(PTGV->getValueType(), PTGV, Align);
6608 return CGF.Builder.CreateAlignedLoad(PTGV->getValueType(), PTGV, Align);
7156 CodeGen::CodeGenFunction &CGF,
7162 llvm::Value *Offset = EmitIvarOffset(CGF, ID, Ivar);
7163 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
7168 CGObjCNonFragileABIMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
7179 CGF.Builder.CreateAlignedLoad(GV->getValueType(), GV,
7180 CGF.getSizeAlign(), "ivar");
7181 if (IsIvarOffsetKnownIdempotent(CGF, Ivar))
7191 IvarOffsetValue = CGF.Builder.CreateIntCast(
7220 CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
7234 arg0 = CGF.Builder.CreateBitCast(arg0, ObjCTypes.ObjectPtrTy);
7261 nullReturn.init(CGF, arg0);
7305 nullReturn.init(CGF, arg0);
7312 Address(CGF.Builder.CreateBitCast(messageRef, ObjCTypes.MessageRefPtrTy),
7313 ObjCTypes.MessageRefTy, CGF.getPointerAlign());
7316 args[1].setRValue(RValue::get(mref, CGF));
7319 Address calleeAddr = CGF.Builder.CreateStructGEP(mref, 0);
7320 llvm::Value *calleePtr = CGF.Builder.CreateLoad(calleeAddr, "msgSend_fn");
7322 calleePtr = CGF.Builder.CreateBitCast(calleePtr, MSI.MessengerType);
7325 RValue result = CGF.EmitCall(MSI.CallInfo, callee, returnSlot, args);
7326 return nullReturn.complete(CGF, returnSlot, result, resultType, formalArgs,
7332 CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
7341 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
7342 Receiver, CGF.getContext().getObjCIdType(),
7344 : EmitMessageSend(CGF, Return, ResultType, Sel,
7345 Receiver, CGF.getContext().getObjCIdType(),
7408 CGObjCNonFragileABIMac::EmitLoadOfClassRef(CodeGenFunction &CGF,
7414 return CGF.EmitRuntimeCall(
7418 CharUnits Align = CGF.getPointerAlign();
7419 return CGF.Builder.CreateAlignedLoad(Entry->getValueType(), Entry, Align);
7423 CGObjCNonFragileABIMac::EmitClassRefFromId(CodeGenFunction &CGF,
7445 Entry->setAlignment(CGF.getPointerAlign().getAsAlign());
7452 return EmitLoadOfClassRef(CGF, ID, Entry);
7455 llvm::Value *CGObjCNonFragileABIMac::EmitClassRef(CodeGenFunction &CGF,
7460 return EmitClassRefViaRuntime(CGF, ID, ObjCTypes);
7462 return EmitClassRefFromId(CGF, ID->getIdentifier(), ID);
7466 CodeGenFunction &CGF) {
7468 return EmitClassRefFromId(CGF, II, nullptr);
7472 CGObjCNonFragileABIMac::EmitSuperClassRef(CodeGenFunction &CGF,
7483 Entry->setAlignment(CGF.getPointerAlign().getAsAlign());
7488 return EmitLoadOfClassRef(CGF, ID, Entry);
7494 llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(CodeGenFunction &CGF,
7497 CharUnits Align = CGF.getPointerAlign();
7511 return CGF.Builder.CreateAlignedLoad(ObjCTypes.ClassnfABIPtrTy, Entry, Align);
7516 llvm::Value *CGObjCNonFragileABIMac::GetClass(CodeGenFunction &CGF,
7525 return EmitClassRef(CGF, ID);
7532 CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
7545 RawAddress ObjCSuper = CGF.CreateTempAlloca(
7546 ObjCTypes.SuperTy, CGF.getPointerAlign(), "objc_super");
7549 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
7550 CGF.Builder.CreateStore(ReceiverAsObject,
7551 CGF.Builder.CreateStructGEP(ObjCSuper, 0));
7556 Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
7558 Target = EmitSuperClassRef(CGF, Class);
7563 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
7564 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
7565 CGF.Builder.CreateStore(Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1));
7568 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
7571 : EmitMessageSend(CGF, Return, ResultType, Sel,
7576 llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CodeGenFunction &CGF,
7580 llvm::LoadInst* LI = CGF.Builder.CreateLoad(Addr);
7608 void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
7616 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7617 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7618 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7620 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7621 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7624 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignIvarFn(), args);
7631 CodeGen::CodeGenFunction &CGF,
7637 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7638 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7639 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7641 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7642 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7645 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
7650 CodeGen::CodeGenFunction &CGF, Address DestPtr, Address SrcPtr,
7652 llvm::Value *args[] = {DestPtr.emitRawPointer(CGF),
7653 SrcPtr.emitRawPointer(CGF), Size};
7654 CGF.EmitNounwindRuntimeCall(ObjCTypes.GcMemmoveCollectableFn(), args);
7661 CodeGen::CodeGenFunction &CGF,
7664 llvm::Value *AddrWeakObjVal = CGF.Builder.CreateBitCast(
7665 AddrWeakObj.emitRawPointer(CGF), ObjCTypes.PtrObjectPtrTy);
7667 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
7669 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
7676 void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
7682 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7683 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7684 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7686 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7687 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7690 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
7697 void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
7704 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7705 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7706 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7708 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7709 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7713 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
7716 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
7721 CGObjCNonFragileABIMac::EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
7723 EmitAtSynchronizedStmt(CGF, S, ObjCTypes.getSyncEnterFn(),
7753 void CGObjCNonFragileABIMac::EmitTryStmt(CodeGen::CodeGenFunction &CGF,
7755 EmitTryCatchStmt(CGF, S, ObjCTypes.getObjCBeginCatchFn(),
7761 void CGObjCNonFragileABIMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
7765 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
7766 Exception = CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
7768 CGF.EmitRuntimeCallOrInvoke(ObjCTypes.getExceptionThrowFn(), Exception);
7772 CGF.EmitRuntimeCallOrInvoke(ObjCTypes.getExceptionRethrowFn());
7776 CGF.Builder.CreateUnreachable();
7778 CGF.Builder.ClearInsertionPoint();