Lines Matching defs:CGF
1034 llvm::Value *EmitClassRefViaRuntime(CodeGenFunction &CGF,
1070 CodeGen::RValue EmitMessageSend(CodeGen::CodeGenFunction &CGF,
1103 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
1244 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1247 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1250 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1312 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1322 CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1331 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1338 llvm::Value *GetClass(CodeGenFunction &CGF,
1341 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
1342 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override;
1346 llvm::Value *GetSelector(CodeGenFunction &CGF,
1357 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1370 void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1372 void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1374 void EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF, const Stmt &S);
1375 void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
1377 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1379 void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1381 void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1384 void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1387 void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1389 void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1393 LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
1396 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1485 CodeGen::RValue EmitVTableMessageSend(CodeGen::CodeGenFunction &CGF,
1506 llvm::Value *EmitLoadOfClassRef(CodeGenFunction &CGF,
1512 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1515 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1519 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1523 llvm::Value *EmitSuperClassRef(CodeGenFunction &CGF,
1528 llvm::Value *EmitMetaClassRef(CodeGenFunction &CGF,
1540 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1571 bool IsIvarOffsetKnownIdempotent(const CodeGen::CodeGenFunction &CGF,
1588 dyn_cast_or_null<ObjCMethodDecl>(CGF.CurFuncDecl))
1619 CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1628 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1635 llvm::Value *GetClass(CodeGenFunction &CGF,
1638 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override
1639 { return EmitSelector(CGF, Sel); }
1640 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override
1645 llvm::Value *GetSelector(CodeGenFunction &CGF,
1647 { return EmitSelector(CGF, Method->getSelector()); }
1655 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1692 void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1694 void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1696 void EmitThrowStmt(CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S,
1698 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1700 void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1702 void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1705 void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1708 void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1710 void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1713 LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF, QualType ObjectTy,
1716 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1728 void init(CodeGenFunction &CGF, llvm::Value *receiver) {
1730 NullBB = CGF.createBasicBlock("msgSend.null-receiver");
1731 llvm::BasicBlock *callBB = CGF.createBasicBlock("msgSend.call");
1737 llvm::Value *isNull = CGF.Builder.CreateIsNull(receiver);
1738 CGF.Builder.CreateCondBr(isNull, NullBB, callBB);
1741 CGF.EmitBlock(callBB);
1746 RValue complete(CodeGenFunction &CGF,
1760 llvm::BasicBlock *callBB = CGF.Builder.GetInsertBlock();
1762 contBB = CGF.createBasicBlock("msgSend.cont");
1763 CGF.Builder.CreateBr(contBB);
1767 CGF.EmitBlock(NullBB);
1771 CGObjCRuntime::destroyCalleeDestroyedArguments(CGF, Method, CallArgs);
1775 assert(CGF.Builder.GetInsertBlock() == NullBB);
1780 if (contBB) CGF.EmitBlock(contBB);
1788 CGF.EmitFromMemory(CGF.CGM.EmitNullConstant(resultType), resultType);
1794 CGF.EmitBlock(contBB);
1795 llvm::PHINode *phi = CGF.Builder.CreatePHI(null->getType(), 2);
1808 CGF.EmitNullInitialization(result.getAggregateAddress(), resultType);
1809 if (contBB) CGF.EmitBlock(contBB);
1814 CGF.EmitBlock(contBB);
1822 llvm::PHINode *real = CGF.Builder.CreatePHI(scalarTy, 2);
1825 llvm::PHINode *imag = CGF.Builder.CreatePHI(scalarTy, 2);
1890 llvm::Value *CGObjCMac::GetClass(CodeGenFunction &CGF,
1892 return EmitClassRef(CGF, ID);
1896 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, Selector Sel) {
1897 return EmitSelector(CGF, Sel);
1899 Address CGObjCMac::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) {
1902 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, const ObjCMethodDecl
1904 return EmitSelector(CGF, Method->getSelector());
2055 CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
2067 RawAddress ObjCSuper = CGF.CreateTempAlloca(
2068 ObjCTypes.SuperTy, CGF.getPointerAlign(), "objc_super");
2070 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
2071 CGF.Builder.CreateStore(ReceiverAsObject,
2072 CGF.Builder.CreateStructGEP(ObjCSuper, 0));
2085 Target = EmitClassRef(CGF, Class->getSuperClass());
2086 Target = CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, Target, 0);
2087 Target = CGF.Builder.CreateAlignedLoad(ClassTyPtr, Target,
2088 CGF.getPointerAlign());
2092 CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, MetaClassPtr, 1);
2093 llvm::Value *Super = CGF.Builder.CreateAlignedLoad(ClassTyPtr, SuperPtr,
2094 CGF.getPointerAlign());
2098 Target = EmitClassRef(CGF, Class->getSuperClass());
2101 ClassPtr = CGF.Builder.CreateStructGEP(ObjCTypes.ClassTy, ClassPtr, 1);
2102 Target = CGF.Builder.CreateAlignedLoad(ClassTyPtr, ClassPtr,
2103 CGF.getPointerAlign());
2108 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
2109 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
2110 CGF.Builder.CreateStore(Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1));
2111 return EmitMessageSend(CGF, Return, ResultType, Sel, ObjCSuper.getPointer(),
2117 CodeGen::RValue CGObjCMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
2125 return EmitMessageSend(CGF, Return, ResultType, Sel, Receiver,
2126 CGF.getContext().getObjCIdType(), false, CallArgs,
2131 CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
2143 auto selTy = CGF.getContext().getObjCSelType();
2148 Arg0 = CGF.Builder.CreateBitCast(Arg0, ObjCTypes.ObjectPtrTy);
2163 canMessageReceiverBeNull(CGF, Method, IsSuper, ClassReceiver, Arg0);
2196 CGF.Builder.CreateBitCast(Fn.getCallee(), MSI.MessengerType));
2209 nullReturn.init(CGF, Arg0);
2214 SelValue = GetSelector(CGF, Sel);
2220 RValue rvalue = CGF.EmitCall(MSI.CallInfo, Callee, Return, ActualArgs,
2229 return nullReturn.complete(CGF, Return, rvalue, ResultType, CallArgs,
2965 llvm::Value *CGObjCMac::GenerateProtocolRef(CodeGenFunction &CGF,
2994 CodeGenFunction &CGF,
2999 llvm::Value *className = CGF.CGM
3003 ASTContext &ctx = CGF.CGM.getContext();
3005 CGF.Builder.CreateBitCast(className,
3006 CGF.ConvertType(
3008 llvm::CallInst *call = CGF.Builder.CreateCall(lookUpClassFn, className);
4016 CodeGenFunction &CGF, llvm::Function *Fn, const ObjCMethodDecl *OMD,
4018 auto &Builder = CGF.Builder;
4020 auto selfAddr = CGF.GetAddrOfLocalVar(OMD->getSelfDecl());
4041 auto ResultType = CGF.getContext().getObjCIdType();
4053 CGF, ReturnValueSlot(), ResultType, SelfSel, selfValue, Args, OID,
4065 CGF.createBasicBlock("objc_direct_method.self_is_nil");
4067 CGF.createBasicBlock("objc_direct_method.cont");
4077 CGF.EmitBlock(SelfIsNilBlock);
4083 CGF.EmitNullInitialization(CGF.ReturnValue, retTy);
4085 CGF.EmitBranchThroughCleanup(CGF.ReturnBlock);
4089 CGF.EmitBlock(ContBlock);
4097 CGF.EmitVarDecl(*OMD->getCmdDecl());
4098 Builder.CreateStore(GetSelector(CGF, OMD),
4099 CGF.GetAddrOfLocalVar(OMD->getCmdDecl()));
4225 void CGObjCMac::EmitTryStmt(CodeGenFunction &CGF, const ObjCAtTryStmt &S) {
4226 return EmitTryOrSynchronizedStmt(CGF, S);
4229 void CGObjCMac::EmitSynchronizedStmt(CodeGenFunction &CGF,
4231 return EmitTryOrSynchronizedStmt(CGF, S);
4249 void Emit(CodeGenFunction &CGF, Flags flags) override {
4253 CGF.createBasicBlock("finally.call_exit");
4255 CGF.createBasicBlock("finally.no_call_exit");
4256 CGF.Builder.CreateCondBr(CGF.Builder.CreateLoad(CallTryExitVar),
4259 CGF.EmitBlock(FinallyCallExit);
4260 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryExitFn(),
4261 ExceptionData.emitRawPointer(CGF));
4263 CGF.EmitBlock(FinallyNoCallExit);
4274 CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot());
4276 CGF.EmitStmt(FinallyStmt->getFinallyBody());
4278 if (CGF.HaveInsertPoint()) {
4279 CGF.Builder.CreateStore(CurCleanupDest,
4280 CGF.getNormalCleanupDestSlot());
4283 CGF.EnsureInsertPoint();
4289 llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot);
4290 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncExitFn(), SyncArg);
4296 CodeGenFunction &CGF;
4309 FragileHazards(CodeGenFunction &CGF);
4321 FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
4328 I = CGF.CurFn->begin(), E = CGF.CurFn->end(); I != E; ++I)
4367 llvm::CallInst *Call = CGF.EmitNounwindRuntimeCall(WriteHazard, Locals);
4370 CGF.getLLVMContext(), llvm::Attribute::ElementType,
4378 call->setCallingConv(CGF.getRuntimeCC());
4390 CGBuilderTy Builder(CGF, CGF.getLLVMContext());
4394 FI = CGF.CurFn->begin(), FE = CGF.CurFn->end(); FI != FE; ++FI) {
4435 addIfPresent(AllocasToIgnore, CGF.ReturnValue);
4436 addIfPresent(AllocasToIgnore, CGF.NormalCleanupDest);
4440 llvm::BasicBlock &Entry = CGF.CurFn->getEntryBlock();
4451 return llvm::FunctionType::get(CGF.VoidTy, tys, false);
4562 void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
4569 CGF.getJumpDestInCurrentScope("finally.end");
4574 CGF.getJumpDestInCurrentScope("finally.rethrow");
4584 CGF.EmitScalarExpr(cast<ObjCAtSynchronizedStmt>(S).getSynchExpr());
4585 SyncArg = CGF.Builder.CreateBitCast(SyncArg, ObjCTypes.ObjectPtrTy);
4586 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSyncEnterFn(), SyncArg);
4588 SyncArgSlot = CGF.CreateTempAlloca(SyncArg->getType(),
4589 CGF.getPointerAlign(), "sync.arg");
4590 CGF.Builder.CreateStore(SyncArg, SyncArgSlot);
4595 Address ExceptionData = CGF.CreateTempAlloca(ObjCTypes.ExceptionDataTy,
4596 CGF.getPointerAlign(),
4603 FragileHazards Hazards(CGF);
4613 Address CallTryExitVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(),
4622 CGF.EHStack.pushCleanup<PerformFragileFinally>(NormalAndEHCleanup, &S,
4631 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
4632 ExceptionData.emitRawPointer(CGF));
4635 llvm::Constant *Zero = llvm::ConstantInt::get(CGF.Builder.getInt32Ty(), 0);
4637 llvm::Value *SetJmpBuffer = CGF.Builder.CreateGEP(
4638 ObjCTypes.ExceptionDataTy, ExceptionData.emitRawPointer(CGF), GEPIndexes,
4640 llvm::CallInst *SetJmpResult = CGF.EmitNounwindRuntimeCall(
4646 llvm::BasicBlock *TryBlock = CGF.createBasicBlock("try");
4647 llvm::BasicBlock *TryHandler = CGF.createBasicBlock("try.handler");
4649 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
4650 CGF.Builder.CreateCondBr(DidCatch, TryHandler, TryBlock);
4653 CGF.EmitBlock(TryBlock);
4654 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
4655 CGF.EmitStmt(isTry ? cast<ObjCAtTryStmt>(S).getTryBody()
4658 CGBuilderTy::InsertPoint TryFallthroughIP = CGF.Builder.saveAndClearIP();
4661 CGF.EmitBlock(TryHandler);
4670 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
4671 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4677 llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
4678 ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF),
4683 CGF.ObjCEHValueStack.push_back(Caught);
4694 PropagatingExnVar = CGF.CreateTempAlloca(Caught->getType(),
4695 CGF.getPointerAlign(),
4697 CGF.Builder.CreateStore(Caught, PropagatingExnVar);
4701 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionTryEnterFn(),
4702 ExceptionData.emitRawPointer(CGF));
4705 CGF.EmitNounwindRuntimeCall(ObjCTypes.getSetJmpFn(),
4710 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
4712 CatchBlock = CGF.createBasicBlock("catch");
4713 CatchHandler = CGF.createBasicBlock("catch_for_catch");
4714 CGF.Builder.CreateCondBr(Threw, CatchHandler, CatchBlock);
4716 CGF.EmitBlock(CatchBlock);
4719 CGF.Builder.CreateStore(CGF.Builder.getInt1(HasFinally), CallTryExitVar);
4745 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
4748 CGF.EmitAutoVarDecl(*CatchParam);
4749 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
4752 EmitInitOfCatchParam(CGF, Caught, CatchParam);
4755 CGF.EmitStmt(CatchStmt->getCatchBody());
4760 CGF.EmitBranchThroughCleanup(FinallyEnd);
4772 llvm::Value *Class = EmitClassRef(CGF, IDecl);
4776 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionMatchFn(),
4779 llvm::BasicBlock *MatchedBlock = CGF.createBasicBlock("match");
4780 llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch.next");
4782 CGF.Builder.CreateCondBr(CGF.Builder.CreateIsNotNull(Match, "matched"),
4786 CGF.EmitBlock(MatchedBlock);
4790 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
4792 CGF.EmitAutoVarDecl(*CatchParam);
4793 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
4797 CGF.Builder.CreateBitCast(Caught,
4798 CGF.ConvertType(CatchParam->getType()));
4799 EmitInitOfCatchParam(CGF, Tmp, CatchParam);
4801 CGF.EmitStmt(CatchStmt->getCatchBody());
4806 CGF.EmitBranchThroughCleanup(FinallyEnd);
4808 CGF.EmitBlock(NextCatchBlock);
4811 CGF.ObjCEHValueStack.pop_back();
4819 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4823 CGF.EmitBlock(CatchHandler);
4833 llvm::CallInst *NewCaught = CGF.EmitNounwindRuntimeCall(
4834 ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF),
4836 CGF.Builder.CreateStore(NewCaught, PropagatingExnVar);
4839 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
4840 CGF.EmitBranchThroughCleanup(FinallyRethrow);
4848 CGF.Builder.restoreIP(TryFallthroughIP);
4849 if (CGF.HaveInsertPoint())
4850 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
4851 CGF.PopCleanupBlock();
4852 CGF.EmitBlock(FinallyEnd.getBlock(), true);
4855 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP();
4856 CGF.EmitBlock(FinallyRethrow.getBlock(), true);
4857 if (CGF.HaveInsertPoint()) {
4861 PropagatingExn = CGF.Builder.CreateLoad(PropagatingExnVar);
4865 llvm::CallInst *Caught = CGF.EmitNounwindRuntimeCall(
4866 ObjCTypes.getExceptionExtractFn(), ExceptionData.emitRawPointer(CGF));
4870 CGF.EmitNounwindRuntimeCall(ObjCTypes.getExceptionThrowFn(),
4872 CGF.Builder.CreateUnreachable();
4875 CGF.Builder.restoreIP(SavedIP);
4878 void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
4884 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
4886 CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
4888 assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
4890 ExceptionAsObject = CGF.ObjCEHValueStack.back();
4893 CGF.EmitRuntimeCall(ObjCTypes.getExceptionThrowFn(), ExceptionAsObject)
4895 CGF.Builder.CreateUnreachable();
4899 CGF.Builder.ClearInsertionPoint();
4905 llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
4908 llvm::Value *AddrWeakObjVal = CGF.Builder.CreateBitCast(
4909 AddrWeakObj.emitRawPointer(CGF), ObjCTypes.PtrObjectPtrTy);
4911 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
4913 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
4920 void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
4926 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4927 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4928 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4930 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4931 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4934 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
4941 void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
4948 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4949 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4950 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4952 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4953 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4957 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
4960 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
4967 void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
4975 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4976 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4977 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4979 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
4980 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
4983 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignIvarFn(), args);
4989 void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
4995 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, CGM.Int32Ty)
4996 : CGF.Builder.CreateBitCast(src, CGM.Int64Ty);
4997 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
4999 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
5000 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
5003 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
5007 void CGObjCMac::EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
5010 llvm::Value *args[] = {DestPtr.emitRawPointer(CGF),
5011 SrcPtr.emitRawPointer(CGF), size};
5012 CGF.EmitNounwindRuntimeCall(ObjCTypes.GcMemmoveCollectableFn(), args);
5017 LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
5024 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
5025 EmitIvarOffset(CGF, ID, Ivar));
5028 llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
5209 llvm::Value *CGObjCMac::EmitClassRefFromId(CodeGenFunction &CGF,
5222 return CGF.Builder.CreateAlignedLoad(Entry->getValueType(), Entry,
5223 CGF.getPointerAlign());
5226 llvm::Value *CGObjCMac::EmitClassRef(CodeGenFunction &CGF,
5231 return EmitClassRefViaRuntime(CGF, ID, ObjCTypes);
5235 return EmitClassRefFromId(CGF, RuntimeName);
5238 llvm::Value *CGObjCMac::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
5240 return EmitClassRefFromId(CGF, II);
5243 llvm::Value *CGObjCMac::EmitSelector(CodeGenFunction &CGF, Selector Sel) {
5244 return CGF.Builder.CreateLoad(EmitSelectorAddr(Sel));
6591 llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
6603 CharUnits Align = CGF.getPointerAlign();
6607 return CGF.Builder.CreateAlignedLoad(PTGV->getValueType(), PTGV, Align);
6618 return CGF.Builder.CreateAlignedLoad(PTGV->getValueType(), PTGV, Align);
7166 CodeGen::CodeGenFunction &CGF,
7172 llvm::Value *Offset = EmitIvarOffset(CGF, ID, Ivar);
7173 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
7178 CGObjCNonFragileABIMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
7189 CGF.Builder.CreateAlignedLoad(GV->getValueType(), GV,
7190 CGF.getSizeAlign(), "ivar");
7191 if (IsIvarOffsetKnownIdempotent(CGF, Ivar))
7201 IvarOffsetValue = CGF.Builder.CreateIntCast(
7230 CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
7244 arg0 = CGF.Builder.CreateBitCast(arg0, ObjCTypes.ObjectPtrTy);
7271 nullReturn.init(CGF, arg0);
7315 nullReturn.init(CGF, arg0);
7322 Address(CGF.Builder.CreateBitCast(messageRef, ObjCTypes.MessageRefPtrTy),
7323 ObjCTypes.MessageRefTy, CGF.getPointerAlign());
7326 args[1].setRValue(RValue::get(mref, CGF));
7329 Address calleeAddr = CGF.Builder.CreateStructGEP(mref, 0);
7330 llvm::Value *calleePtr = CGF.Builder.CreateLoad(calleeAddr, "msgSend_fn");
7332 calleePtr = CGF.Builder.CreateBitCast(calleePtr, MSI.MessengerType);
7335 RValue result = CGF.EmitCall(MSI.CallInfo, callee, returnSlot, args);
7336 return nullReturn.complete(CGF, returnSlot, result, resultType, formalArgs,
7342 CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
7351 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
7352 Receiver, CGF.getContext().getObjCIdType(),
7354 : EmitMessageSend(CGF, Return, ResultType, Sel,
7355 Receiver, CGF.getContext().getObjCIdType(),
7418 CGObjCNonFragileABIMac::EmitLoadOfClassRef(CodeGenFunction &CGF,
7424 return CGF.EmitRuntimeCall(
7428 CharUnits Align = CGF.getPointerAlign();
7429 return CGF.Builder.CreateAlignedLoad(Entry->getValueType(), Entry, Align);
7433 CGObjCNonFragileABIMac::EmitClassRefFromId(CodeGenFunction &CGF,
7455 Entry->setAlignment(CGF.getPointerAlign().getAsAlign());
7462 return EmitLoadOfClassRef(CGF, ID, Entry);
7465 llvm::Value *CGObjCNonFragileABIMac::EmitClassRef(CodeGenFunction &CGF,
7470 return EmitClassRefViaRuntime(CGF, ID, ObjCTypes);
7472 return EmitClassRefFromId(CGF, ID->getIdentifier(), ID);
7476 CodeGenFunction &CGF) {
7478 return EmitClassRefFromId(CGF, II, nullptr);
7482 CGObjCNonFragileABIMac::EmitSuperClassRef(CodeGenFunction &CGF,
7493 Entry->setAlignment(CGF.getPointerAlign().getAsAlign());
7498 return EmitLoadOfClassRef(CGF, ID, Entry);
7504 llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(CodeGenFunction &CGF,
7507 CharUnits Align = CGF.getPointerAlign();
7521 return CGF.Builder.CreateAlignedLoad(ObjCTypes.ClassnfABIPtrTy, Entry, Align);
7526 llvm::Value *CGObjCNonFragileABIMac::GetClass(CodeGenFunction &CGF,
7535 return EmitClassRef(CGF, ID);
7542 CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
7555 RawAddress ObjCSuper = CGF.CreateTempAlloca(
7556 ObjCTypes.SuperTy, CGF.getPointerAlign(), "objc_super");
7559 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
7560 CGF.Builder.CreateStore(ReceiverAsObject,
7561 CGF.Builder.CreateStructGEP(ObjCSuper, 0));
7566 Target = EmitMetaClassRef(CGF, Class, Class->isWeakImported());
7568 Target = EmitSuperClassRef(CGF, Class);
7573 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
7574 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
7575 CGF.Builder.CreateStore(Target, CGF.Builder.CreateStructGEP(ObjCSuper, 1));
7578 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
7581 : EmitMessageSend(CGF, Return, ResultType, Sel,
7586 llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CodeGenFunction &CGF,
7590 llvm::LoadInst* LI = CGF.Builder.CreateLoad(Addr);
7618 void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
7626 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7627 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7628 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7630 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7631 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7634 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignIvarFn(), args);
7641 CodeGen::CodeGenFunction &CGF,
7647 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7648 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7649 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7651 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7652 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7655 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignStrongCastFn(),
7660 CodeGen::CodeGenFunction &CGF, Address DestPtr, Address SrcPtr,
7662 llvm::Value *args[] = {DestPtr.emitRawPointer(CGF),
7663 SrcPtr.emitRawPointer(CGF), Size};
7664 CGF.EmitNounwindRuntimeCall(ObjCTypes.GcMemmoveCollectableFn(), args);
7671 CodeGen::CodeGenFunction &CGF,
7674 llvm::Value *AddrWeakObjVal = CGF.Builder.CreateBitCast(
7675 AddrWeakObj.emitRawPointer(CGF), ObjCTypes.PtrObjectPtrTy);
7677 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcReadWeakFn(),
7679 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
7686 void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
7692 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7693 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7694 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7696 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7697 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7700 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignWeakFn(),
7707 void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
7714 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
7715 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
7716 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
7718 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
7719 llvm::Value *dstVal = CGF.Builder.CreateBitCast(dst.emitRawPointer(CGF),
7723 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignGlobalFn(),
7726 CGF.EmitNounwindRuntimeCall(ObjCTypes.getGcAssignThreadLocalFn(),
7731 CGObjCNonFragileABIMac::EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
7733 EmitAtSynchronizedStmt(CGF, S, ObjCTypes.getSyncEnterFn(),
7763 void CGObjCNonFragileABIMac::EmitTryStmt(CodeGen::CodeGenFunction &CGF,
7765 EmitTryCatchStmt(CGF, S, ObjCTypes.getObjCBeginCatchFn(),
7771 void CGObjCNonFragileABIMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
7775 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
7776 Exception = CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
7778 CGF.EmitRuntimeCallOrInvoke(ObjCTypes.getExceptionThrowFn(), Exception);
7782 CGF.EmitRuntimeCallOrInvoke(ObjCTypes.getExceptionRethrowFn());
7786 CGF.Builder.CreateUnreachable();
7788 CGF.Builder.ClearInsertionPoint();