Lines Matching defs:CGF
509 virtual llvm::Value *GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
529 virtual llvm::Value *GetClassNamed(CodeGenFunction &CGF,
535 virtual llvm::Value *LookupIMP(CodeGenFunction &CGF,
544 virtual llvm::Value *LookupIMPSuper(CodeGenFunction &CGF,
569 GenerateMessageSend(CodeGenFunction &CGF, ReturnValueSlot Return,
575 GenerateMessageSendSuper(CodeGenFunction &CGF, ReturnValueSlot Return,
581 llvm::Value *GetClass(CodeGenFunction &CGF,
583 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
584 Address GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) override;
585 llvm::Value *GetSelector(CodeGenFunction &CGF,
603 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
609 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
630 void EmitTryStmt(CodeGenFunction &CGF,
632 void EmitSynchronizedStmt(CodeGenFunction &CGF,
634 void EmitThrowStmt(CodeGenFunction &CGF,
637 llvm::Value * EmitObjCWeakRead(CodeGenFunction &CGF,
639 void EmitObjCWeakAssign(CodeGenFunction &CGF,
641 void EmitObjCGlobalAssign(CodeGenFunction &CGF,
644 void EmitObjCIvarAssign(CodeGenFunction &CGF, llvm::Value *src,
646 void EmitObjCStrongCastAssign(CodeGenFunction &CGF,
648 void EmitGCMemmoveCollectable(CodeGenFunction &CGF, Address DestPtr,
651 LValue EmitObjCValueForIvar(CodeGenFunction &CGF, QualType ObjectTy,
654 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF,
657 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
690 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver,
693 CGBuilderTy &Builder = CGF.Builder;
697 llvm::CallBase *imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFn, args);
702 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
704 CGBuilderTy &Builder = CGF.Builder;
706 EnforceType(Builder, ObjCSuper.emitRawPointer(CGF), PtrToObjCSuperTy),
708 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFn, lookupArgs);
755 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver,
758 CGBuilderTy &Builder = CGF.Builder;
763 CGF.CreateTempAlloca(Receiver->getType(), CGF.getPointerAlign());
768 if (isa<ObjCMethodDecl>(CGF.CurCodeDecl)) {
769 self = CGF.LoadObjCSelf();
777 0, llvm::Attribute::getWithCaptureInfo(CGF.getLLVMContext(),
784 llvm::CallBase *slot = CGF.EmitRuntimeCallOrInvoke(LookupFn, args);
791 CGF.getPointerAlign());
799 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
802 CGBuilderTy &Builder = CGF.Builder;
803 llvm::Value *lookupArgs[] = {ObjCSuper.emitRawPointer(CGF), cmd};
806 CGF.EmitNounwindRuntimeCall(SlotLookupSuperFn, lookupArgs);
811 CGF.getPointerAlign());
1220 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
1223 CGBuilderTy &Builder = CGF.Builder;
1225 CGObjCGNU::EnforceType(Builder, ObjCSuper.emitRawPointer(CGF),
1228 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFn, lookupArgs);
1278 llvm::Value *GetClassNamed(CodeGenFunction &CGF,
1281 return CGF.Builder.CreateLoad(
1332 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1352 return CGF.Builder.CreateAlignedLoad(ProtocolPtrTy, Ref,
1446 llvm::Value *GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
1700 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF,
1717 CGF.Builder.CreateAlignedLoad(IntTy, IvarOffsetPointer, Align);
1719 Offset = CGF.Builder.CreateZExtOrBitCast(Offset, PtrDiffTy);
2033 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
2036 auto &Builder = CGF.Builder;
2038 auto selfAddr = CGF.GetAddrOfLocalVar(OMD->getSelfDecl());
2070 CGF.createBasicBlock("objc_direct_method.self_is_nil");
2072 CGF.createBasicBlock("objc_direct_method.cont");
2082 CGF.EmitBlock(SelfIsNilBlock);
2088 CGF.EmitNullInitialization(CGF.ReturnValue, retTy);
2090 CGF.EmitBranchThroughCleanup(CGF.ReturnBlock);
2094 CGF.EmitBlock(ContBlock);
2115 CGF.createBasicBlock("objc_direct_method.class_uninitialized");
2117 CGF.createBasicBlock("objc_direct_method.class_initialized");
2121 CGF.EmitBlock(notInitializedBlock);
2123 CGF.EmitRuntimeCall(SentInitializeFn, selfValue);
2125 CGF.EmitBlock(initializedBlock);
2133 CGF.EmitVarDecl(*OMD->getCmdDecl());
2134 Builder.CreateStore(GetSelector(CGF, OMD),
2135 CGF.GetAddrOfLocalVar(OMD->getCmdDecl()));
2178 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver,
2181 CGBuilderTy &Builder = CGF.Builder;
2188 imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFnSRet, args);
2190 imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFn, args);
2196 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper,
2198 CGBuilderTy &Builder = CGF.Builder;
2200 EnforceType(Builder, ObjCSuper.emitRawPointer(CGF), PtrToObjCSuperTy),
2205 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFnSRet, lookupArgs);
2207 return CGF.EmitNounwindRuntimeCall(MsgLookupSuperFn, lookupArgs);
2210 llvm::Value *GetClassNamed(CodeGenFunction &CGF, const std::string &Name,
2213 return CGObjCGNU::GetClassNamed(CGF, Name, isWeak);
2421 llvm::Value *CGObjCGNU::GetClassNamed(CodeGenFunction &CGF,
2436 return CGF.EmitNounwindRuntimeCall(ClassLookupFn, ClassName);
2441 llvm::Value *CGObjCGNU::GetClass(CodeGenFunction &CGF,
2444 GetClassNamed(CGF, OID->getNameAsString(), OID->isWeakImported());
2450 llvm::Value *CGObjCGNU::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) {
2451 auto *Value = GetClassNamed(CGF, "NSAutoreleasePool", false);
2454 IdentifierInfo &II = CGF.CGM.getContext().Idents.get("NSAutoreleasePool");
2469 llvm::Value *CGObjCGNU::GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
2492 Address CGObjCGNU::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) {
2493 llvm::Value *SelValue = GetSelector(CGF, Sel);
2497 Address tmp = CGF.CreateTempAlloca(SelValue->getType(),
2498 CGF.getPointerAlign());
2499 CGF.Builder.CreateStore(SelValue, tmp);
2503 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, Selector Sel) {
2504 return GetTypedSelector(CGF, Sel, std::string());
2507 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF,
2510 return GetTypedSelector(CGF, Method->getSelector(), SelTypes);
2643 CGObjCGNU::GenerateMessageSendSuper(CodeGenFunction &CGF,
2653 CGBuilderTy &Builder = CGF.Builder;
2664 llvm::Value *cmd = GetSelector(CGF, Sel);
2668 ActualArgs.add(RValue::get(cmd), CGF.getContext().getObjCSelType());
2676 ReceiverClass = GetClassNamed(CGF,
2683 Builder.CreateAlignedLoad(IdTy, ReceiverClass, CGF.getPointerAlign());
2728 Builder.CreateAlignedLoad(IdTy, ReceiverClass, CGF.getPointerAlign());
2734 Address ObjCSuper = CGF.CreateTempAlloca(ObjCSuperTy,
2735 CGF.getPointerAlign());
2741 llvm::Value *imp = LookupIMPSuper(CGF, ObjCSuper, cmd, MSI);
2754 RValue msgRet = CGF.EmitCall(MSI.CallInfo, callee, Return, ActualArgs, &call);
2761 CGObjCGNU::GenerateMessageSend(CodeGenFunction &CGF,
2769 CGBuilderTy &Builder = CGF.Builder;
2788 cmd = GetSelector(CGF, Method);
2790 cmd = GetSelector(CGF, Sel);
2806 ActualArgs.add(RValue::get(cmd), CGF.getContext().getObjCSelType());
2834 if (!canMessageReceiverBeNull(CGF, Method, /*IsSuper*/ false,
2872 requiresExplicitZeroResult && CGF.hasAggregateEvaluationKind(ResultType);
2883 llvm::BasicBlock *messageBB = CGF.createBasicBlock("msgSend");
2884 continueBB = CGF.createBasicBlock("continue");
2890 nilCleanupBB = CGF.createBasicBlock("nilReceiverCleanup");
2899 CGF.EmitBlock(messageBB);
2914 imp = LookupIMP(CGF, Receiver, cmd, node, MSI);
2950 RValue msgRet = CGF.EmitCall(MSI.CallInfo, callee, Return, ActualArgs, &call);
2955 llvm::BasicBlock *nonNilPathBB = CGF.Builder.GetInsertBlock();
2956 CGF.Builder.CreateBr(continueBB);
2960 CGF.EmitBlock(nilCleanupBB);
2963 destroyCalleeDestroyedArguments(CGF, Method, CallArgs);
2969 CGF.EmitNullInitialization(addr, ResultType);
2972 nilPathBB = CGF.Builder.GetInsertBlock();
2973 CGF.Builder.CreateBr(continueBB);
2977 CGF.EmitBlock(continueBB);
3268 llvm::Value *CGObjCGNU::GenerateProtocolRef(CodeGenFunction &CGF,
3273 return CGF.Builder.CreateBitCast(protocol, llvm::PointerType::getUnqual(T));
4120 void CGObjCGNU::GenerateDirectMethodPrologue(CodeGenFunction &CGF,
4160 void CGObjCGNU::EmitSynchronizedStmt(CodeGenFunction &CGF,
4162 EmitAtSynchronizedStmt(CGF, S, SyncEnterFn, SyncExitFn);
4166 void CGObjCGNU::EmitTryStmt(CodeGenFunction &CGF,
4179 EmitTryCatchStmt(CGF, S, EnterCatchFn, ExitCatchFn, ExceptionReThrowFn);
4182 void CGObjCGNU::EmitThrowStmt(CodeGenFunction &CGF,
4189 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr);
4192 assert((!CGF.ObjCEHValueStack.empty() && CGF.ObjCEHValueStack.back()) &&
4194 ExceptionAsObject = CGF.ObjCEHValueStack.back();
4205 llvm::CallBase *Throw = CGF.EmitRuntimeCallOrInvoke(ExceptionReThrowFn);
4208 ExceptionAsObject = CGF.Builder.CreateBitCast(ExceptionAsObject, IdTy);
4210 CGF.EmitRuntimeCallOrInvoke(ExceptionThrowFn, ExceptionAsObject);
4213 CGF.Builder.CreateUnreachable();
4215 CGF.Builder.ClearInsertionPoint();
4218 llvm::Value * CGObjCGNU::EmitObjCWeakRead(CodeGenFunction &CGF,
4220 CGBuilderTy &B = CGF.Builder;
4222 WeakReadFn, EnforceType(B, AddrWeakObj.emitRawPointer(CGF), PtrToIdTy));
4225 void CGObjCGNU::EmitObjCWeakAssign(CodeGenFunction &CGF,
4227 CGBuilderTy &B = CGF.Builder;
4229 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), PtrToIdTy);
4233 void CGObjCGNU::EmitObjCGlobalAssign(CodeGenFunction &CGF,
4236 CGBuilderTy &B = CGF.Builder;
4238 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), PtrToIdTy);
4244 void CGObjCGNU::EmitObjCIvarAssign(CodeGenFunction &CGF,
4247 CGBuilderTy &B = CGF.Builder;
4249 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), IdTy);
4253 void CGObjCGNU::EmitObjCStrongCastAssign(CodeGenFunction &CGF,
4255 CGBuilderTy &B = CGF.Builder;
4257 llvm::Value *dstVal = EnforceType(B, dst.emitRawPointer(CGF), PtrToIdTy);
4261 void CGObjCGNU::EmitGCMemmoveCollectable(CodeGenFunction &CGF,
4265 CGBuilderTy &B = CGF.Builder;
4266 llvm::Value *DestPtrVal = EnforceType(B, DestPtr.emitRawPointer(CGF), PtrTy);
4267 llvm::Value *SrcPtrVal = EnforceType(B, SrcPtr.emitRawPointer(CGF), PtrTy);
4287 LValue CGObjCGNU::EmitObjCValueForIvar(CodeGenFunction &CGF,
4294 return EmitValueForIvarAtOffset(CGF, ID, BaseValue, Ivar, CVRQualifiers,
4295 EmitIvarOffset(CGF, ID, Ivar));
4314 llvm::Value *CGObjCGNU::EmitIvarOffset(CodeGenFunction &CGF,
4324 CGF.CGM.getTarget().getTriple().isKnownWindowsMSVCEnvironment())
4325 return CGF.Builder.CreateZExtOrBitCast(
4326 CGF.Builder.CreateAlignedLoad(
4328 CGF.Builder.CreateAlignedLoad(
4331 CGF.getPointerAlign(), "ivar"),
4345 Offset = CGF.Builder.CreateAlignedLoad(IntTy, Offset, Align);
4347 Offset = CGF.Builder.CreateZExtOrBitCast(Offset, PtrDiffTy);
4350 uint64_t Offset = ComputeIvarBaseOffset(CGF.CGM, Interface, Ivar);