Home | History | Annotate | Download | only in CodeGen

Lines Matching defs:CGF

924   CodeGen::RValue EmitMessageSend(CodeGen::CodeGenFunction &CGF,
1080 virtual CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1090 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1132 virtual void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1134 virtual void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1136 void EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF, const Stmt &S);
1137 virtual void EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
1139 virtual llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1141 virtual void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1143 virtual void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1146 virtual void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1149 virtual void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1151 virtual void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1155 virtual LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
1160 virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1254 CodeGen::RValue EmitVTableMessageSend(CodeGen::CodeGenFunction &CGF,
1337 virtual CodeGen::RValue GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1347 GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1408 virtual void EmitTryStmt(CodeGen::CodeGenFunction &CGF,
1410 virtual void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
1412 virtual void EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
1414 virtual llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1416 virtual void EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
1418 virtual void EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
1421 virtual void EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
1424 virtual void EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
1426 virtual void EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
1429 virtual LValue EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
1434 virtual llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1446 void init(CodeGenFunction &CGF, llvm::Value *receiver) {
1448 NullBB = CGF.createBasicBlock("msgSend.nullinit");
1449 callBB = CGF.createBasicBlock("msgSend.call");
1453 llvm::Value *isNull = CGF.Builder.CreateIsNull(receiver);
1454 CGF.Builder.CreateCondBr(isNull, NullBB, callBB);
1457 CGF.EmitBlock(callBB);
1460 RValue complete(CodeGenFunction &CGF, RValue result, QualType resultType,
1467 NullInitPtr = CGF.CreateTempAlloca(result.getScalarVal()->getType());
1468 CGF.Builder.CreateStore(result.getScalarVal(), NullInitPtr);
1472 llvm::BasicBlock *contBB = CGF.createBasicBlock("msgSend.cont");
1473 if (CGF.HaveInsertPoint()) CGF.Builder.CreateBr(contBB);
1476 CGF.EmitBlock(NullBB);
1488 CGF.EmitARCRelease(RV.getScalarVal(), true);
1495 CGF.EmitNullInitialization(NullInitPtr, resultType);
1497 CGF.EmitBlock(contBB);
1498 return NullInitPtr ? RValue::get(CGF.Builder.CreateLoad(NullInitPtr))
1504 CGF.EmitNullInitialization(result.getAggregateAddr(), resultType);
1506 CGF.EmitBlock(contBB);
1513 CGF.EmitBlock(contBB);
1518 llvm::PHINode *PHIReal = CGF.Builder.CreatePHI(MemberType, 2);
1521 llvm::PHINode *PHIImag = CGF.Builder.CreatePHI(MemberType, 2);
1631 CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
1644 CGF.CreateTempAlloca(ObjCTypes.SuperTy, "objc_super");
1646 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
1647 CGF.Builder.CreateStore(ReceiverAsObject,
1648 CGF.Builder.CreateStructGEP(ObjCSuper, 0));
1660 Target = EmitClassRef(CGF.Builder, Class->getSuperClass());
1661 Target = CGF.Builder.CreateStructGEP(Target, 0);
1662 Target = CGF.Builder.CreateLoad(Target);
1665 llvm::Value *SuperPtr = CGF.Builder.CreateStructGEP(MetaClassPtr, 1);
1666 llvm::Value *Super = CGF.Builder.CreateLoad(SuperPtr);
1671 Target = EmitClassRef(CGF.Builder, Class->getSuperClass());
1674 ClassPtr = CGF.Builder.CreateStructGEP(ClassPtr, 1);
1675 Target = CGF.Builder.CreateLoad(ClassPtr);
1680 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
1681 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
1682 CGF.Builder.CreateStore(Target,
1683 CGF.Builder.CreateStructGEP(ObjCSuper, 1));
1684 return EmitMessageSend(CGF, Return, ResultType,
1685 EmitSelector(CGF.Builder, Sel),
1691 CodeGen::RValue CGObjCMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
1699 return EmitMessageSend(CGF, Return, ResultType,
1700 EmitSelector(CGF.Builder, Sel),
1701 Receiver, CGF.getContext().getObjCIdType(),
1706 CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
1718 Arg0 = CGF.Builder.CreateBitCast(Arg0, ObjCTypes.ObjectPtrTy);
1720 ActualArgs.add(RValue::get(Sel), CGF.getContext().getObjCSelType());
1735 if (!IsSuper) nullReturn.init(CGF, Arg0);
1756 nullReturn.init(CGF, Arg0);
1763 RValue rvalue = CGF.EmitCall(MSI.CallInfo, Fn, Return, ActualArgs);
1764 return nullReturn.complete(CGF, rvalue, ResultType, CallArgs,
2794 void CGObjCMac::EmitTryStmt(CodeGenFunction &CGF, const ObjCAtTryStmt &S) {
2795 return EmitTryOrSynchronizedStmt(CGF, S);
2798 void CGObjCMac::EmitSynchronizedStmt(CodeGenFunction &CGF,
2800 return EmitTryOrSynchronizedStmt(CGF, S);
2818 void Emit(CodeGenFunction &CGF, Flags flags) {
2822 CGF.createBasicBlock("finally.call_exit");
2824 CGF.createBasicBlock("finally.no_call_exit");
2825 CGF.Builder.CreateCondBr(CGF.Builder.CreateLoad(CallTryExitVar),
2828 CGF.EmitBlock(FinallyCallExit);
2829 CGF.Builder.CreateCall(ObjCTypes.getExceptionTryExitFn(), ExceptionData)
2832 CGF.EmitBlock(FinallyNoCallExit);
2840 CGF.Builder.CreateLoad(CGF.getNormalCleanupDestSlot());
2842 CGF.EmitStmt(FinallyStmt->getFinallyBody());
2844 if (CGF.HaveInsertPoint()) {
2845 CGF.Builder.CreateStore(CurCleanupDest,
2846 CGF.getNormalCleanupDestSlot());
2849 CGF.EnsureInsertPoint();
2855 llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot);
2856 CGF.Builder.CreateCall(ObjCTypes.getSyncExitFn(), SyncArg)
2863 CodeGenFunction &CGF;
2876 FragileHazards(CodeGenFunction &CGF);
2888 FragileHazards::FragileHazards(CodeGenFunction &CGF) : CGF(CGF) {
2895 I = CGF.CurFn->begin(), E = CGF.CurFn->end(); I != E; ++I)
2934 CGF.Builder.CreateCall(WriteHazard, Locals)->setDoesNotThrow();
2947 CGBuilderTy Builder(CGF.getLLVMContext());
2951 FI = CGF.CurFn->begin(), FE = CGF.CurFn->end(); FI != FE; ++FI) {
2989 addIfPresent(AllocasToIgnore, CGF.ReturnValue);
2990 addIfPresent(AllocasToIgnore, CGF.NormalCleanupDest);
2994 llvm::BasicBlock &Entry = CGF.CurFn->getEntryBlock();
3005 return llvm::FunctionType::get(CGF.VoidTy, tys, false);
3120 void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
3127 CGF.getJumpDestInCurrentScope("finally.end");
3132 CGF.getJumpDestInCurrentScope("finally.rethrow");
3142 CGF.EmitScalarExpr(cast<ObjCAtSynchronizedStmt>(S).getSynchExpr());
3143 SyncArg = CGF.Builder.CreateBitCast(SyncArg, ObjCTypes.ObjectPtrTy);
3144 CGF.Builder.CreateCall(ObjCTypes.getSyncEnterFn(), SyncArg)
3147 SyncArgSlot = CGF.CreateTempAlloca(SyncArg->getType(), "sync.arg");
3148 CGF.Builder.CreateStore(SyncArg, SyncArgSlot);
3153 llvm::Value *ExceptionData = CGF.CreateTempAlloca(ObjCTypes.ExceptionDataTy,
3160 FragileHazards Hazards(CGF);
3170 llvm::Value *CallTryExitVar = CGF.CreateTempAlloca(CGF.Builder.getInt1Ty(),
3178 CGF.EHStack.pushCleanup<PerformFragileFinally>(NormalCleanup, &S,
3187 CGF.Builder.CreateCall(ObjCTypes.getExceptionTryEnterFn(), ExceptionData)
3191 llvm::Constant *Zero = llvm::ConstantInt::get(CGF.Builder.getInt32Ty(), 0);
3194 CGF.Builder.CreateGEP(ExceptionData, GEPIndexes, "setjmp_buffer");
3196 CGF.Builder.CreateCall(ObjCTypes.getSetJmpFn(), SetJmpBuffer, "setjmp_result");
3202 llvm::BasicBlock *TryBlock = CGF.createBasicBlock("try");
3203 llvm::BasicBlock *TryHandler = CGF.createBasicBlock("try.handler");
3205 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
3206 CGF.Builder.CreateCondBr(DidCatch, TryHandler, TryBlock);
3209 CGF.EmitBlock(TryBlock);
3210 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
3211 CGF.EmitStmt(isTry ? cast<ObjCAtTryStmt>(S).getTryBody()
3214 CGBuilderTy::InsertPoint TryFallthroughIP = CGF.Builder.saveAndClearIP();
3217 CGF.EmitBlock(TryHandler);
3226 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
3227 CGF.EmitBranchThroughCleanup(FinallyRethrow);
3234 CGF.Builder.CreateCall(ObjCTypes.getExceptionExtractFn(),
3240 CGF.ObjCEHValueStack.push_back(Caught);
3251 PropagatingExnVar = CGF.CreateTempAlloca(Caught->getType(),
3253 CGF.Builder.CreateStore(Caught, PropagatingExnVar);
3257 CGF.Builder.CreateCall(ObjCTypes.getExceptionTryEnterFn(), ExceptionData)
3261 CGF.Builder.CreateCall(ObjCTypes.getSetJmpFn(), SetJmpBuffer,
3267 CGF.Builder.CreateIsNotNull(SetJmpResult, "did_catch_exception");
3269 CatchBlock = CGF.createBasicBlock("catch");
3270 CatchHandler = CGF.createBasicBlock("catch_for_catch");
3271 CGF
3273 CGF.EmitBlock(CatchBlock);
3276 CGF.Builder.CreateStore(CGF.Builder.getInt1(HasFinally), CallTryExitVar);
3304 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
3307 CGF.EmitAutoVarDecl(*CatchParam);
3308 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
3311 CGF.Builder.CreateStore(Caught, CGF.GetAddrOfLocalVar(CatchParam));
3314 CGF.EmitStmt(CatchStmt->getCatchBody());
3319 CGF.EmitBranchThroughCleanup(FinallyEnd);
3331 llvm::Value *Class = EmitClassRef(CGF.Builder, IDecl);
3334 CGF.Builder.CreateCall2(ObjCTypes.getExceptionMatchFn(),
3338 llvm::BasicBlock *MatchedBlock = CGF.createBasicBlock("match");
3339 llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch.next");
3341 CGF.Builder.CreateCondBr(CGF.Builder.CreateIsNotNull(Match, "matched"),
3345 CGF.EmitBlock(MatchedBlock);
3349 CodeGenFunction::RunCleanupsScope CatchVarCleanups(CGF);
3351 CGF.EmitAutoVarDecl(*CatchParam);
3352 assert(CGF.HaveInsertPoint() && "DeclStmt destroyed insert point?");
3356 CGF.Builder.CreateBitCast(Caught,
3357 CGF.ConvertType(CatchParam->getType()));
3358 CGF.Builder.CreateStore(Tmp, CGF.GetAddrOfLocalVar(CatchParam));
3360 CGF.EmitStmt(CatchStmt->getCatchBody());
3365 CGF.EmitBranchThroughCleanup(FinallyEnd);
3367 CGF.EmitBlock(NextCatchBlock);
3370 CGF.ObjCEHValueStack.pop_back();
3378 CGF.EmitBranchThroughCleanup(FinallyRethrow);
3382 CGF.EmitBlock(CatchHandler);
3393 CGF.Builder.CreateCall(ObjCTypes.getExceptionExtractFn(),
3396 CGF.Builder.CreateStore(NewCaught, PropagatingExnVar);
3399 CGF.Builder.CreateStore(CGF.Builder.getFalse(), CallTryExitVar);
3400 CGF.EmitBranchThroughCleanup(FinallyRethrow);
3408 CGF.Builder.restoreIP(TryFallthroughIP);
3409 if (CGF.HaveInsertPoint())
3410 CGF.Builder.CreateStore(CGF.Builder.getTrue(), CallTryExitVar);
3411 CGF.PopCleanupBlock();
3412 CGF.EmitBlock(FinallyEnd.getBlock(), true);
3415 CGBuilderTy::InsertPoint SavedIP = CGF.Builder.saveAndClearIP();
3416 CGF.EmitBlock(FinallyRethrow.getBlock(), true);
3417 if (CGF.HaveInsertPoint()) {
3421 PropagatingExn = CGF.Builder.CreateLoad(PropagatingExnVar);
3426 CGF.Builder.CreateCall(ObjCTypes.getExceptionExtractFn(),
3432 CGF.Builder.CreateCall(ObjCTypes.getExceptionThrowFn(), PropagatingExn)
3434 CGF.Builder.CreateUnreachable();
3437 CGF.Builder.restoreIP(SavedIP);
3440 void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
3445 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
3447 CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
3449 assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
3451 ExceptionAsObject = CGF.ObjCEHValueStack.back();
3454 CGF.Builder.CreateCall(ObjCTypes.getExceptionThrowFn(), ExceptionAsObject)
3456 CGF.Builder.CreateUnreachable();
3459 CGF.Builder.ClearInsertionPoint();
3465 llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
3469 AddrWeakObj = CGF.Builder.CreateBitCast(AddrWeakObj,
3471 llvm::Value *read_weak = CGF.Builder.CreateCall(ObjCTypes.getGcReadWeakFn(),
3473 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
3480 void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
3486 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
3487 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
3488 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
3490 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
3491 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
3492 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignWeakFn(),
3500 void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
3507 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
3508 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
3509 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
3511 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
3512 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
3514 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignGlobalFn(),
3517 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignThreadLocalFn(),
3525 void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
3533 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
3534 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
3535 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
3537 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
3538 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
3539 CGF.Builder.CreateCall3(ObjCTypes.getGcAssignIvarFn(),
3547 void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
3553 src = (Size == 4) ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
3554 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongLongTy);
3555 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
3557 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
3558 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
3559 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignStrongCastFn(),
3564 void CGObjCMac::EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
3568 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, ObjCTypes.Int8PtrTy);
3569 DestPtr = CGF.Builder.CreateBitCast(DestPtr, ObjCTypes.Int8PtrTy);
3570 CGF.Builder.CreateCall3(ObjCTypes.GcMemmoveCollectableFn(),
3577 LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
3584 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
3585 EmitIvarOffset(CGF, ID, Ivar));
3588 llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
5770 CodeGen::CodeGenFunction &CGF,
5776 llvm::Value *Offset = EmitIvarOffset(CGF, ID, Ivar);
5781 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
5786 CodeGen::CodeGenFunction &CGF,
5789 return CGF.Builder.CreateLoad(ObjCIvarOffsetVariable(Interface, Ivar),"ivar");
5816 CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
5830 arg0 = CGF.Builder.CreateBitCast(arg0, ObjCTypes.ObjectPtrTy);
5857 nullReturn.init(CGF, arg0);
5904 nullReturn.init(CGF, arg0);
5911 CGF.Builder.CreateBitCast(messageRef, ObjCTypes.MessageRefPtrTy);
5917 llvm::Value *callee = CGF.Builder.CreateStructGEP(mref, 0);
5918 callee = CGF.Builder.CreateLoad(callee, "msgSend_fn");
5920 callee = CGF.Builder.CreateBitCast(callee, MSI.MessengerType);
5922 RValue result = CGF.EmitCall(MSI.CallInfo, callee, returnSlot, args);
5923 return nullReturn.complete(CGF, result, resultType, formalArgs,
5929 CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
5938 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
5939 Receiver, CGF.getContext().getObjCIdType(),
5941 : EmitMessageSend(CGF, Return, ResultType,
5942 EmitSelector(CGF.Builder, Sel),
5943 Receiver, CGF.getContext().getObjCIdType(),
6059 CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
6073 CGF.CreateTempAlloca(ObjCTypes.SuperTy, "objc_super");
6076 CGF.Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy);
6077 CGF.Builder.CreateStore(ReceiverAsObject,
6078 CGF.Builder.CreateStructGEP(ObjCSuper, 0));
6086 Target = EmitClassRef(CGF.Builder, Class);
6087 Target = CGF.Builder.CreateStructGEP(Target, 0);
6088 Target = CGF.Builder.CreateLoad(Target);
6090 Target = EmitMetaClassRef(CGF.Builder, Class);
6092 Target = EmitSuperClassRef(CGF.Builder, Class);
6097 CGM.getTypes().ConvertType(CGF.getContext().getObjCClassType());
6098 Target = CGF.Builder.CreateBitCast(Target, ClassTy);
6099 CGF.Builder.CreateStore(Target,
6100 CGF.Builder.CreateStructGEP(ObjCSuper, 1));
6103 ? EmitVTableMessageSend(CGF, Return, ResultType, Sel,
6106 : EmitMessageSend(CGF, Return, ResultType,
6107 EmitSelector(CGF.Builder, Sel),
6140 void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
6148 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
6149 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
6150 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
6152 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
6153 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
6154 CGF.Builder.CreateCall3(ObjCTypes.getGcAssignIvarFn(),
6163 CodeGen::CodeGenFunction &CGF,
6169 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
6170 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
6171 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
6173 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
6174 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
6175 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignStrongCastFn(),
6181 CodeGen::CodeGenFunction &CGF,
6185 SrcPtr = CGF.Builder.CreateBitCast(SrcPtr, ObjCTypes.Int8PtrTy);
6186 DestPtr = CGF.Builder.CreateBitCast(DestPtr, ObjCTypes.Int8PtrTy);
6187 CGF.Builder.CreateCall3(ObjCTypes.GcMemmoveCollectableFn(),
6196 CodeGen::CodeGenFunction &CGF,
6200 AddrWeakObj = CGF.Builder.CreateBitCast(AddrWeakObj, ObjCTypes.PtrObjectPtrTy);
6201 llvm::Value *read_weak = CGF.Builder.CreateCall(ObjCTypes.getGcReadWeakFn(),
6203 read_weak = CGF.Builder.CreateBitCast(read_weak, DestTy);
6210 void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
6216 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
6217 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
6218 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
6220 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
6221 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
6222 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignWeakFn(),
6230 void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
6237 src = (Size == 4 ? CGF.Builder.CreateBitCast(src, ObjCTypes.IntTy)
6238 : CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy));
6239 src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
6241 src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
6242 dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
6244 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignGlobalFn(),
6247 CGF.Builder.CreateCall2(ObjCTypes.getGcAssignThreadLocalFn(),
6253 CGObjCNonFragileABIMac::EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
6255 EmitAtSynchronizedStmt(CGF, S,
6285 void CGObjCNonFragileABIMac::EmitTryStmt(CodeGen::CodeGenFunction &CGF,
6287 EmitTryCatchStmt(CGF, S,
6294 void CGObjCNonFragileABIMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
6297 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
6298 Exception = CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy);
6299 CGF.EmitCallOrInvoke(ObjCTypes.getExceptionThrowFn(), Exception)
6302 CGF.EmitCallOrInvoke(ObjCTypes.getExceptionRethrowFn())
6306 CGF.Builder.CreateUnreachable();
6307 CGF.Builder.ClearInsertionPoint();