Lines Matching defs:CGF
510 virtual llvm::Value *GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
530 virtual llvm::Value *GetClassNamed(CodeGenFunction &CGF,
536 virtual llvm::Value *LookupIMP(CodeGenFunction &CGF,
545 virtual llvm::Value *LookupIMPSuper(CodeGenFunction &CGF,
570 GenerateMessageSend(CodeGenFunction &CGF, ReturnValueSlot Return,
576 GenerateMessageSendSuper(CodeGenFunction &CGF, ReturnValueSlot Return,
582 llvm::Value *GetClass(CodeGenFunction &CGF,
584 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
585 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override;
586 llvm::Value *GetSelector(CodeGenFunction &CGF,
604 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
610 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
631 void EmitTryStmt(CodeGenFunction &CGF,
633 void EmitSynchronizedStmt(CodeGenFunction &CGF,
635 void EmitThrowStmt(CodeGenFunction &CGF,
638 llvm::Value * EmitObjCWeakRead(CodeGenFunction &CGF,
640 void EmitObjCWeakAssign(CodeGenFunction &CGF,
642 void EmitObjCGlobalAssign(CodeGenFunction &CGF,
645 void EmitObjCIvarAssign(CodeGenFunction &CGF, llvm::Value *src,
647 void EmitObjCStrongCastAssign(CodeGenFunction &CGF,
649 void EmitGCMemmoveCollectable(CodeGenFunction &CGF, Address DestPtr,
652 LValue EmitObjCValueForIvar(CodeGenFunction &CGF, QualType ObjectTy,
655 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF,
658 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
691 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver,
694 CGBuilderTy &Builder = CGF.Builder;
698 llvm::CallBase *imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFn, args);
703 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
705 CGBuilderTy &Builder = CGF.Builder;
707 EnforceType(Builder, ObjCSuper.emitRawPointer(CGF), PtrToObjCSuperTy),
709 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFn, lookupArgs);
756 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver,
759 CGBuilderTy &Builder = CGF.Builder;
764 CGF.CreateTempAlloca(Receiver->getType(), CGF.getPointerAlign());
769 if (isa<ObjCMethodDecl>(CGF.CurCodeDecl)) {
770 self = CGF.LoadObjCSelf();
783 llvm::CallBase *slot = CGF.EmitRuntimeCallOrInvoke(LookupFn, args);
790 CGF.getPointerAlign());
798 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
801 CGBuilderTy &Builder = CGF.Builder;
802 llvm::Value *lookupArgs[] = {ObjCSuper.emitRawPointer(CGF), cmd};
805 CGF.EmitNounwindRuntimeCall(SlotLookupSuperFn, lookupArgs);
810 CGF.getPointerAlign());
1219 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
1222 CGBuilderTy &Builder = CGF.Builder;
1224 CGObjCGNU::EnforceType(Builder, ObjCSuper.emitRawPointer(CGF),
1227 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFn, lookupArgs);
1277 llvm::Value *GetClassNamed(CodeGenFunction &CGF,
1280 return CGF.Builder.CreateLoad(
1331 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1351 return CGF.Builder.CreateAlignedLoad(ProtocolPtrTy, Ref,
1445 llvm::Value *GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
1699 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF,
1709 CGF.Builder.CreateAlignedLoad(IntTy, IvarOffsetPointer, Align);
1711 Offset = CGF.Builder.CreateZExtOrBitCast(Offset, PtrDiffTy);
2025 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
2028 auto &Builder = CGF.Builder;
2030 auto selfAddr = CGF.GetAddrOfLocalVar(OMD->getSelfDecl());
2062 CGF.createBasicBlock("objc_direct_method.self_is_nil");
2064 CGF.createBasicBlock("objc_direct_method.cont");
2074 CGF.EmitBlock(SelfIsNilBlock);
2080 CGF.EmitNullInitialization(CGF.ReturnValue, retTy);
2082 CGF.EmitBranchThroughCleanup(CGF.ReturnBlock);
2086 CGF.EmitBlock(ContBlock);
2102 CGF.createBasicBlock("objc_direct_method.class_uninitialized");
2104 CGF.createBasicBlock("objc_direct_method.class_initialized");
2108 CGF.EmitBlock(notInitializedBlock);
2110 CGF.EmitRuntimeCall(SentInitializeFn, selfValue);
2112 CGF.EmitBlock(initializedBlock);
2120 CGF.EmitVarDecl(*OMD->getCmdDecl());
2121 Builder.CreateStore(GetSelector(CGF, OMD),
2122 CGF.GetAddrOfLocalVar(OMD->getCmdDecl()));
2165 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver,
2168 CGBuilderTy &Builder = CGF.Builder;
2175 imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFnSRet, args);
2177 imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFn, args);
2183 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
2185 CGBuilderTy &Builder = CGF.Builder;
2187 EnforceType(Builder, ObjCSuper.emitRawPointer(CGF), PtrToObjCSuperTy),
2192 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFnSRet, lookupArgs);
2194 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFn, lookupArgs);
2197 llvm::Value *GetClassNamed(CodeGenFunction &CGF, const std::string &Name,
2200 return CGObjCGNU::GetClassNamed(CGF, Name, isWeak);
2408 llvm::Value *CGObjCGNU::GetClassNamed(CodeGenFunction &CGF,
2423 return CGF.EmitNounwindRuntimeCall(ClassLookupFn, ClassName);
2428 llvm::Value *CGObjCGNU::GetClass(CodeGenFunction &CGF,
2431 GetClassNamed(CGF, OID->getNameAsString(), OID->isWeakImported());
2437 llvm::Value *CGObjCGNU::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
2438 auto *Value = GetClassNamed(CGF, "NSAutoreleasePool", false);
2441 IdentifierInfo &II = CGF.CGM.getContext().Idents.get("NSAutoreleasePool");
2456 llvm::Value *CGObjCGNU::GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
2479 Address CGObjCGNU::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) {
2480 llvm::Value *SelValue = GetSelector(CGF, Sel);
2484 Address tmp = CGF.CreateTempAlloca(SelValue->getType(),
2485 CGF.getPointerAlign());
2486 CGF.Builder.CreateStore(SelValue, tmp);
2490 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, Selector Sel) {
2491 return GetTypedSelector(CGF, Sel, std::string());
2494 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF,
2497 return GetTypedSelector(CGF, Method->getSelector(), SelTypes);
2630 CGObjCGNU::GenerateMessageSendSuper(CodeGenFunction &CGF,
2640 CGBuilderTy &Builder = CGF.Builder;
2651 llvm::Value *cmd = GetSelector(CGF, Sel);
2655 ActualArgs.add(RValue::get(cmd), CGF.getContext().getObjCSelType());
2663 ReceiverClass = GetClassNamed(CGF,
2670 Builder.CreateAlignedLoad(IdTy, ReceiverClass, CGF.getPointerAlign());
2715 Builder.CreateAlignedLoad(IdTy, ReceiverClass, CGF.getPointerAlign());
2721 Address ObjCSuper = CGF.CreateTempAlloca(ObjCSuperTy,
2722 CGF.getPointerAlign());
2728 llvm::Value *imp = LookupIMPSuper(CGF, ObjCSuper, cmd, MSI);
2741 RValue msgRet = CGF.EmitCall(MSI.CallInfo, callee, Return, ActualArgs, &call);
2748 CGObjCGNU::GenerateMessageSend(CodeGenFunction &CGF,
2756 CGBuilderTy &Builder = CGF.Builder;
2775 cmd = GetSelector(CGF, Method);
2777 cmd = GetSelector(CGF, Sel);
2793 ActualArgs.add(RValue::get(cmd), CGF.getContext().getObjCSelType());
2821 if (!canMessageReceiverBeNull(CGF, Method, /*IsSuper*/ false,
2859 requiresExplicitZeroResult && CGF.hasAggregateEvaluationKind(ResultType);
2870 llvm::BasicBlock *messageBB = CGF.createBasicBlock("msgSend");
2871 continueBB = CGF.createBasicBlock("continue");
2877 nilCleanupBB = CGF.createBasicBlock("nilReceiverCleanup");
2886 CGF.EmitBlock(messageBB);
2901 imp = LookupIMP(CGF, Receiver, cmd, node, MSI);
2937 RValue msgRet = CGF.EmitCall(MSI.CallInfo, callee, Return, ActualArgs, &call);
2942 llvm::BasicBlock *nonNilPathBB = CGF.Builder.GetInsertBlock();
2943 CGF.Builder.CreateBr(continueBB);
2947 CGF.EmitBlock(nilCleanupBB);
2950 destroyCalleeDestroyedArguments(CGF, Method, CallArgs);
2956 CGF.EmitNullInitialization(addr, ResultType);
2959 nilPathBB = CGF.Builder.GetInsertBlock();
2960 CGF.Builder.CreateBr(continueBB);
2964 CGF.EmitBlock(continueBB);
3256 llvm::Value *CGObjCGNU::GenerateProtocolRef(CodeGenFunction &CGF,
3261 return CGF.Builder.CreateBitCast(protocol, llvm::PointerType::getUnqual(T));
4108 void CGObjCGNU::GenerateDirectMethodPrologue(CodeGenFunction &CGF,
4148 void CGObjCGNU::EmitSynchronizedStmt(CodeGenFunction &CGF,
4150 EmitAtSynchronizedStmt(CGF, S, SyncEnterFn, SyncExitFn);
4154 void CGObjCGNU::EmitTryStmt(CodeGenFunction &CGF,
4167 EmitTryCatchStmt(CGF, S, EnterCatchFn, ExitCatchFn, ExceptionReThrowFn);
4170 void CGObjCGNU::EmitThrowStmt(CodeGenFunction &CGF,
4177 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
4180 assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
4182 ExceptionAsObject = CGF.ObjCEHValueStack.back();
4193 llvm::CallBase *Throw = CGF.EmitRuntimeCallOrInvoke(ExceptionReThrowFn);
4196 ExceptionAsObject = CGF.Builder.CreateBitCast(ExceptionAsObject, IdTy);
4198 CGF.EmitRuntimeCallOrInvoke(ExceptionThrowFn, ExceptionAsObject);
4201 CGF.Builder.CreateUnreachable();
4203 CGF.Builder.ClearInsertionPoint();
4206 llvm::Value * CGObjCGNU::EmitObjCWeakRead(CodeGenFunction &CGF,
4208 CGBuilderTy &B = CGF.Builder;
4210 WeakReadFn, EnforceType(B, AddrWeakObj.emitRawPointer(CGF), PtrToIdTy));
4213 void CGObjCGNU::EmitObjCWeakAssign(CodeGenFunction &CGF,
4215 CGBuilderTy &B = CGF.Builder;
4217 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), PtrToIdTy);
4221 void CGObjCGNU::EmitObjCGlobalAssign(CodeGenFunction &CGF,
4224 CGBuilderTy &B = CGF.Builder;
4226 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), PtrToIdTy);
4232 void CGObjCGNU::EmitObjCIvarAssign(CodeGenFunction &CGF,
4235 CGBuilderTy &B = CGF.Builder;
4237 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), IdTy);
4241 void CGObjCGNU::EmitObjCStrongCastAssign(CodeGenFunction &CGF,
4243 CGBuilderTy &B = CGF.Builder;
4245 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), PtrToIdTy);
4249 void CGObjCGNU::EmitGCMemmoveCollectable(CodeGenFunction &CGF,
4253 CGBuilderTy &B = CGF.Builder;
4254 llvm::Value *DestPtrVal = EnforceType(B, DestPtr.emitRawPointer(CGF), PtrTy);
4255 llvm::Value *SrcPtrVal = EnforceType(B, SrcPtr.emitRawPointer(CGF), PtrTy);
4275 LValue CGObjCGNU::EmitObjCValueForIvar(CodeGenFunction &CGF,
4282 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
4283 EmitIvarOffset(CGF, ID, Ivar));
4302 llvm::Value *CGObjCGNU::EmitIvarOffset(CodeGenFunction &CGF,
4312 CGF.CGM.getTarget().getTriple().isKnownWindowsMSVCEnvironment())
4313 return CGF.Builder.CreateZExtOrBitCast(
4314 CGF.Builder.CreateAlignedLoad(
4316 CGF.Builder.CreateAlignedLoad(
4319 CGF.getPointerAlign(), "ivar"),
4333 Offset = CGF.Builder.CreateAlignedLoad(IntTy, Offset, Align);
4335 Offset = CGF.Builder.CreateZExtOrBitCast(Offset, PtrDiffTy);
4338 uint64_t Offset = ComputeIvarBaseOffset(CGF.CGM, Interface, Ivar);