Lines Matching refs:llvm
50 llvm::FunctionType *FTy;
52 llvm::FunctionCallee Function;
64 void init(CodeGenModule *Mod, const char *name, llvm::Type *RetTy, in init()
70 SmallVector<llvm::Type *, 8> ArgTys({Types...}); in init()
71 FTy = llvm::FunctionType::get(RetTy, ArgTys, false); in init()
74 FTy = llvm::FunctionType::get(RetTy, None, false); in init()
78 llvm::FunctionType *getType() { return FTy; } in getType()
82 operator llvm::FunctionCallee() { in operator llvm::FunctionCallee()
99 llvm::Module &TheModule;
102 llvm::StructType *ObjCSuperTy;
105 llvm::PointerType *PtrToObjCSuperTy;
109 llvm::PointerType *SelectorTy;
112 llvm::IntegerType *Int8Ty;
115 llvm::PointerType *PtrToInt8Ty;
117 llvm::StructType *ProtocolTy;
119 llvm::PointerType *ProtocolPtrTy;
125 llvm::PointerType *IMPTy;
130 llvm::PointerType *IdTy;
133 llvm::PointerType *PtrToIdTy;
138 llvm::IntegerType *IntTy;
142 llvm::PointerType *PtrTy;
146 llvm::IntegerType *LongTy;
148 llvm::IntegerType *SizeTy;
150 llvm::IntegerType *IntPtrTy;
152 llvm::IntegerType *PtrDiffTy;
155 llvm::PointerType *PtrToIntTy;
157 llvm::Type *BoolTy;
159 llvm::IntegerType *Int32Ty;
161 llvm::IntegerType *Int64Ty;
163 llvm::StructType *PropertyMetadataTy;
195 llvm::Constant *MakeConstantString(StringRef Str, const char *Name = "") { in MakeConstantString()
198 return llvm::ConstantExpr::getGetElementPtr(Array.getElementType(), in MakeConstantString()
206 llvm::Constant *ExportUniqueString(const std::string &Str, in ExportUniqueString()
212 llvm::Constant *value = llvm::ConstantDataArray::getString(VMContext,Str); in ExportUniqueString()
213 auto *GV = new llvm::GlobalVariable(TheModule, value->getType(), true, in ExportUniqueString()
214 llvm::GlobalValue::LinkOnceODRLinkage, value, name); in ExportUniqueString()
217 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); in ExportUniqueString()
220 return llvm::ConstantExpr::getGetElementPtr(ConstStr->getValueType(), in ExportUniqueString()
225 llvm::Constant *MakePropertyEncodingString(const ObjCPropertyDecl *PD, in MakePropertyEncodingString()
271 virtual llvm::Constant *GenerateCategoryProtocolList(const
279 llvm::DataLayout td(&TheModule); in PushPropertyListHeader()
300 llvm::Constant *TypeEncoding = MakeConstantString(TypeStr); in PushProperty()
316 llvm::Value* EnforceType(CGBuilderTy &B, llvm::Value *V, llvm::Type *Ty) { in EnforceType()
320 Address EnforceType(CGBuilderTy &B, Address V, llvm::Type *Ty) { in EnforceType()
326 llvm::Constant *Zeros[2];
328 llvm::Constant *NULLPtr;
330 llvm::LLVMContext &VMContext;
338 llvm::GlobalAlias *ClassPtrAlias;
343 llvm::GlobalAlias *MetaClassPtrAlias;
345 std::vector<llvm::Constant*> Classes;
347 std::vector<llvm::Constant*> Categories;
350 std::vector<llvm::Constant*> ConstantStrings;
354 llvm::StringMap<llvm::Constant*> ObjCStrings;
356 llvm::StringMap<llvm::Constant*> ExistingProtocols;
362 typedef std::pair<std::string, llvm::GlobalAlias*> TypedSelector;
366 typedef llvm::DenseMap<Selector, SmallVector<TypedSelector, 2> >
435 virtual llvm::Constant *GenerateIvarList(ArrayRef<llvm::Constant *> IvarNames,
436 ArrayRef<llvm::Constant *> IvarTypes,
437 ArrayRef<llvm::Constant *> IvarOffsets,
438 ArrayRef<llvm::Constant *> IvarAlign,
446 llvm::Constant *GenerateMethodList(StringRef ClassName,
454 virtual llvm::Constant *GenerateEmptyProtocol(StringRef ProtocolName);
458 llvm::Constant *GeneratePropertyList(const Decl *Container,
465 llvm::Constant *GenerateProtocolList(ArrayRef<std::string> Protocols);
474 llvm::Constant *GenerateClassStructure(
475 llvm::Constant *MetaClass,
476 llvm::Constant *SuperClass,
479 llvm::Constant *Version,
480 llvm::Constant *InstanceSize,
481 llvm::Constant *IVars,
482 llvm::Constant *Methods,
483 llvm::Constant *Protocols,
484 llvm::Constant *IvarOffsets,
485 llvm::Constant *Properties,
486 llvm::Constant *StrongIvarBitmap,
487 llvm::Constant *WeakIvarBitmap,
492 virtual llvm::Constant *GenerateProtocolMethodList(
496 void EmitProtocolMethodList(T &&Methods, llvm::Constant *&Required, in EmitProtocolMethodList()
497 llvm::Constant *&Optional) { in EmitProtocolMethodList()
511 virtual llvm::Value *GetTypedSelector(CodeGenFunction &CGF, Selector Sel,
524 llvm::GlobalVariable *ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
531 virtual llvm::Value *GetClassNamed(CodeGenFunction &CGF,
537 virtual llvm::Value *LookupIMP(CodeGenFunction &CGF,
538 llvm::Value *&Receiver,
539 llvm::Value *cmd,
540 llvm::MDNode *node,
546 virtual llvm::Value *LookupIMPSuper(CodeGenFunction &CGF,
548 llvm::Value *cmd,
562 llvm::Constant *MakeBitField(ArrayRef<bool> bits);
573 llvm::Value *Receiver, const CallArgList &CallArgs,
580 bool isCategoryImpl, llvm::Value *Receiver,
583 llvm::Value *GetClass(CodeGenFunction &CGF,
585 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
587 llvm::Value *GetSelector(CodeGenFunction &CGF,
589 virtual llvm::Constant *GetConstantSelector(Selector Sel, in GetConstantSelector()
593 llvm::Constant *GetConstantSelector(const ObjCMethodDecl *M) { in GetConstantSelector()
597 llvm::Constant *GetEHType(QualType T) override;
599 llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD,
601 void GenerateDirectMethodPrologue(CodeGenFunction &CGF, llvm::Function *Fn,
607 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
611 virtual llvm::Constant *GenerateProtocolRef(const ObjCProtocolDecl *PD);
613 llvm::Constant *GetOrEmitProtocol(const ObjCProtocolDecl *PD) override { in GetOrEmitProtocol()
617 llvm::Function *ModuleInitFunction() override;
618 llvm::FunctionCallee GetPropertyGetFunction() override;
619 llvm::FunctionCallee GetPropertySetFunction() override;
620 llvm::FunctionCallee GetOptimizedPropertySetFunction(bool atomic,
622 llvm::FunctionCallee GetSetStructFunction() override;
623 llvm::FunctionCallee GetGetStructFunction() override;
624 llvm::FunctionCallee GetCppAtomicObjectGetFunction() override;
625 llvm::FunctionCallee GetCppAtomicObjectSetFunction() override;
626 llvm::FunctionCallee EnumerationMutationFunction() override;
635 llvm::Value * EmitObjCWeakRead(CodeGenFunction &CGF,
638 llvm::Value *src, Address dst) override;
640 llvm::Value *src, Address dest,
642 void EmitObjCIvarAssign(CodeGenFunction &CGF, llvm::Value *src,
643 Address dest, llvm::Value *ivarOffset) override;
645 llvm::Value *src, Address dest) override;
648 llvm::Value *Size) override;
650 llvm::Value *BaseValue, const ObjCIvarDecl *Ivar,
652 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF,
655 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
656 llvm::Constant *BuildGCBlockLayout(CodeGenModule &CGM, in BuildGCBlockLayout()
660 llvm::Constant *BuildRCBlockLayout(CodeGenModule &CGM, in BuildRCBlockLayout()
665 llvm::Constant *BuildByrefLayout(CodeGenModule &CGM, QualType T) override { in BuildByrefLayout()
688 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver, in LookupIMP()
689 llvm::Value *cmd, llvm::MDNode *node, in LookupIMP()
692 llvm::Value *args[] = { in LookupIMP()
695 llvm::CallBase *imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFn, args); in LookupIMP()
700 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper, in LookupIMPSuper()
701 llvm::Value *cmd, MessageSendInfo &MSI) override { in LookupIMPSuper()
703 llvm::Value *lookupArgs[] = {EnforceType(Builder, ObjCSuper, in LookupIMPSuper()
744 llvm::Type *SlotTy;
746 llvm::Type *SlotStructTy;
749 llvm::Constant *GetEHType(QualType T) override;
752 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver, in LookupIMP()
753 llvm::Value *cmd, llvm::MDNode *node, in LookupIMP()
756 llvm::FunctionCallee LookupFn = SlotLookupFn; in LookupIMP()
763 llvm::Value *self; in LookupIMP()
768 self = llvm::ConstantPointerNull::get(IdTy); in LookupIMP()
772 if (auto *LookupFn2 = dyn_cast<llvm::Function>(LookupFn.getCallee())) in LookupIMP()
773 LookupFn2->addParamAttr(0, llvm::Attribute::NoCapture); in LookupIMP()
775 llvm::Value *args[] = { in LookupIMP()
779 llvm::CallBase *slot = CGF.EmitRuntimeCallOrInvoke(LookupFn, args); in LookupIMP()
784 llvm::Value *imp = Builder.CreateAlignedLoad( in LookupIMP()
794 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper, in LookupIMPSuper()
795 llvm::Value *cmd, in LookupIMPSuper()
798 llvm::Value *lookupArgs[] = {ObjCSuper.getPointer(), cmd}; in LookupIMPSuper()
800 llvm::CallInst *slot = in LookupIMPSuper()
816 SlotStructTy = llvm::StructType::get(PtrTy, PtrTy, PtrTy, IntTy, IMPTy); in CGObjCGNUstep()
817 SlotTy = llvm::PointerType::getUnqual(SlotStructTy); in CGObjCGNUstep()
826 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
830 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
839 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
847 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
866 llvm::FunctionCallee GetCppAtomicObjectGetFunction() override { in GetCppAtomicObjectGetFunction()
874 llvm::FunctionCallee GetCppAtomicObjectSetFunction() override { in GetCppAtomicObjectSetFunction()
882 llvm::FunctionCallee GetOptimizedPropertySetFunction(bool atomic, in GetOptimizedPropertySetFunction()
948 typedef std::pair<std::string, std::pair<llvm::GlobalVariable*, int>>
963 ArrayRef<llvm::Value*> Args) { in CallRuntimeFunction()
964 SmallVector<llvm::Type *,8> Types; in CallRuntimeFunction()
967 llvm::FunctionType *FT = llvm::FunctionType::get(B.getVoidTy(), Types, in CallRuntimeFunction()
969 llvm::FunctionCallee Fn = CGM.CreateRuntimeFunction(FT, FunctionName); in CallRuntimeFunction()
979 llvm::StringMap<llvm::Constant*>::iterator old = ObjCStrings.find(Str); in GenerateConstantString()
1000 auto *ObjCStr = llvm::ConstantExpr::getIntToPtr( in GenerateConstantString()
1001 llvm::ConstantInt::get(Int64Ty, str), IdTy); in GenerateConstantString()
1012 llvm::Constant *isa = TheModule.getNamedGlobal(Sym); in GenerateConstantString()
1015 isa = new llvm::GlobalVariable(TheModule, IdTy, /* isConstant */false, in GenerateConstantString()
1016 llvm::GlobalValue::ExternalLinkage, nullptr, Sym); in GenerateConstantString()
1018 cast<llvm::GlobalValue>(isa)->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass); in GenerateConstantString()
1021 isa = llvm::ConstantExpr::getBitCast(isa, PtrToIdTy); in GenerateConstantString()
1049 SmallVector<llvm::UTF16, 128> ToBuf(NumU8CodeUnits + 1); in GenerateConstantString()
1050 const llvm::UTF8 *FromPtr = (const llvm::UTF8 *)Str.data(); in GenerateConstantString()
1051 llvm::UTF16 *ToPtr = &ToBuf[0]; in GenerateConstantString()
1052 (void)llvm::ConvertUTF8toUTF16(&FromPtr, FromPtr + NumU8CodeUnits, in GenerateConstantString()
1053 &ToPtr, ToPtr + NumU8CodeUnits, llvm::strictConversion); in GenerateConstantString()
1066 auto Arr = llvm::makeArrayRef(&ToBuf[0], ToPtr+1); in GenerateConstantString()
1067 auto *C = llvm::ConstantDataArray::get(VMContext, Arr); in GenerateConstantString()
1068 auto *Buffer = new llvm::GlobalVariable(TheModule, C->getType(), in GenerateConstantString()
1069 /*isConstant=*/true, llvm::GlobalValue::PrivateLinkage, C, ".str"); in GenerateConstantString()
1070 Buffer->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global); in GenerateConstantString()
1100 llvm::GlobalVariable *ObjCStrGV = in GenerateConstantString()
1103 Align, false, isNamed ? llvm::GlobalValue::LinkOnceODRLinkage in GenerateConstantString()
1104 : llvm::GlobalValue::PrivateLinkage); in GenerateConstantString()
1108 ObjCStrGV->setVisibility(llvm::GlobalValue::HiddenVisibility); in GenerateConstantString()
1111 std::pair<llvm::GlobalVariable*, int> v{ObjCStrGV, 0}; in GenerateConstantString()
1114 llvm::Constant *ObjCStr = llvm::ConstantExpr::getBitCast(ObjCStrGV, IdTy); in GenerateConstantString()
1155 llvm::Constant *
1162 llvm::StructType *ObjCMethodDescTy = in GenerateProtocolMethodList()
1163 llvm::StructType::get(CGM.getLLVMContext(), in GenerateProtocolMethodList()
1177 llvm::DataLayout td(&TheModule); in GenerateProtocolMethodList()
1192 llvm::Constant *GenerateCategoryProtocolList(const ObjCCategoryDecl *OCD) in GenerateCategoryProtocolList()
1197 SmallVector<llvm::Constant *, 16> Protocols; in GenerateCategoryProtocolList()
1200 llvm::ConstantExpr::getBitCast(GenerateProtocolRef(PI), in GenerateCategoryProtocolList()
1205 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper, in LookupIMPSuper()
1206 llvm::Value *cmd, MessageSendInfo &MSI) override { in LookupIMPSuper()
1209 llvm::Value *lookupArgs[] = {CGObjCGNU::EnforceType(Builder, ObjCSuper, in LookupIMPSuper()
1214 llvm::GlobalVariable *GetClassVar(StringRef Name, bool isWeak=false) { in GetClassVar()
1219 ClassSymbol = new llvm::GlobalVariable(TheModule, in GetClassVar()
1220 IdTy, false, llvm::GlobalValue::ExternalLinkage, in GetClassVar()
1227 ClassSymbol->setInitializer(new llvm::GlobalVariable(TheModule, in GetClassVar()
1228 Int8Ty, false, llvm::GlobalValue::ExternalWeakLinkage, in GetClassVar()
1249 auto Storage = llvm::GlobalValue::DefaultStorageClass; in GetClassVar()
1251 Storage = llvm::GlobalValue::DLLImportStorageClass; in GetClassVar()
1253 Storage = llvm::GlobalValue::DLLExportStorageClass; in GetClassVar()
1255 cast<llvm::GlobalValue>(ClassSymbol)->setDLLStorageClass(Storage); in GetClassVar()
1261 llvm::Value *GetClassNamed(CodeGenFunction &CGF, in GetClassNamed()
1292 llvm::Constant *GenerateIvarList(ArrayRef<llvm::Constant *> IvarNames, in GenerateIvarList()
1293 ArrayRef<llvm::Constant *> IvarTypes, in GenerateIvarList()
1294 ArrayRef<llvm::Constant *> IvarOffsets, in GenerateIvarList()
1295 ArrayRef<llvm::Constant *> IvarAlign, in GenerateIvarList()
1300 llvm::Constant *GenerateEmptyProtocol(StringRef ProtocolName) override { in GenerateEmptyProtocol()
1305 GV = new llvm::GlobalVariable(TheModule, ProtocolTy, false, in GenerateEmptyProtocol()
1306 llvm::GlobalValue::ExternalLinkage, nullptr, Name); in GenerateEmptyProtocol()
1309 return llvm::ConstantExpr::getBitCast(GV, ProtocolPtrTy); in GenerateEmptyProtocol()
1313 llvm::StringMap<llvm::Constant*> ExistingProtocolRefs;
1315 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF, in GenerateProtocolRef()
1326 auto GV = new llvm::GlobalVariable(TheModule, ProtocolPtrTy, in GenerateProtocolRef()
1327 false, llvm::GlobalValue::LinkOnceODRLinkage, in GenerateProtocolRef()
1328 llvm::ConstantExpr::getBitCast(Protocol, ProtocolPtrTy), RefName); in GenerateProtocolRef()
1339 llvm::Constant *GenerateProtocolList(ArrayRef<llvm::Constant*> Protocols) { in GenerateProtocolList()
1340 llvm::ArrayType *ProtocolArrayTy = llvm::ArrayType::get(ProtocolPtrTy, in GenerateProtocolList()
1342 llvm::Constant * ProtocolArray = llvm::ConstantArray::get(ProtocolArrayTy, in GenerateProtocolList()
1350 CGM.getPointerAlign(), false, llvm::GlobalValue::InternalLinkage); in GenerateProtocolList()
1356 llvm::Constant *GenerateProtocolRef(const ObjCProtocolDecl *PD) override { in GenerateProtocolRef()
1375 Protocol = new llvm::GlobalVariable(TheModule, ProtocolTy, in GenerateProtocolRef()
1377 llvm::GlobalValue::ExternalLinkage, nullptr, SymName); in GenerateProtocolRef()
1381 SmallVector<llvm::Constant*, 16> Protocols; in GenerateProtocolRef()
1386 llvm::ConstantExpr::getBitCast(GenerateProtocolRef(PI), in GenerateProtocolRef()
1388 llvm::Constant *ProtocolList = GenerateProtocolList(Protocols); in GenerateProtocolRef()
1391 llvm::Constant *InstanceMethodList, *OptionalInstanceMethodList; in GenerateProtocolRef()
1392 llvm::Constant *ClassMethodList, *OptionalClassMethodList; in GenerateProtocolRef()
1402 ProtocolBuilder.add(llvm::ConstantExpr::getIntToPtr( in GenerateProtocolRef()
1403 llvm::ConstantInt::get(Int32Ty, ProtocolVersion), IdTy)); in GenerateProtocolRef()
1420 CGM.getPointerAlign(), false, llvm::GlobalValue::ExternalLinkage); in GenerateProtocolRef()
1424 OldGV->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(GV, in GenerateProtocolRef()
1432 llvm::Constant *EnforceType(llvm::Constant *Val, llvm::Type *Ty) { in EnforceType()
1435 return llvm::ConstantExpr::getBitCast(Val, Ty); in EnforceType()
1437 llvm::Value *GetTypedSelector(CodeGenFunction &CGF, Selector Sel, in GetTypedSelector()
1441 llvm::Constant *GetTypeString(llvm::StringRef TypeEncoding) { in GetTypeString()
1450 llvm::Constant *Init = llvm::ConstantDataArray::getString(VMContext, in GetTypeString()
1452 auto *GV = new llvm::GlobalVariable(TheModule, Init->getType(), in GetTypeString()
1453 true, llvm::GlobalValue::LinkOnceODRLinkage, Init, TypesVarName); in GetTypeString()
1455 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetTypeString()
1458 return llvm::ConstantExpr::getGetElementPtr(TypesGlobal->getValueType(), in GetTypeString()
1461 llvm::Constant *GetConstantSelector(Selector Sel, in GetConstantSelector()
1480 CGM.getPointerAlign(), false, llvm::GlobalValue::LinkOnceODRLinkage); in GetConstantSelector()
1482 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetConstantSelector()
1487 llvm::StructType *emptyStruct = nullptr;
1496 std::pair<llvm::Constant*,llvm::Constant*>
1500 emptyStruct = llvm::StructType::create(VMContext, ".objc_section_sentinel"); in GetSectionBounds()
1503 auto ZeroInit = llvm::Constant::getNullValue(emptyStruct); in GetSectionBounds()
1505 auto *Sym = new llvm::GlobalVariable(TheModule, emptyStruct, in GetSectionBounds()
1507 llvm::GlobalValue::LinkOnceODRLinkage, ZeroInit, Prefix + in GetSectionBounds()
1509 Sym->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetSectionBounds()
1518 auto *Start = new llvm::GlobalVariable(TheModule, PtrTy, in GetSectionBounds()
1520 llvm::GlobalValue::ExternalLinkage, nullptr, StringRef("__start_") + in GetSectionBounds()
1522 Start->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetSectionBounds()
1523 auto *Stop = new llvm::GlobalVariable(TheModule, PtrTy, in GetSectionBounds()
1525 llvm::GlobalValue::ExternalLinkage, nullptr, StringRef("__stop_") + in GetSectionBounds()
1527 Stop->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetSectionBounds()
1533 llvm::Function *ModuleInitFunction() override { in ModuleInitFunction()
1534 llvm::Function *LoadFunction = llvm::Function::Create( in ModuleInitFunction()
1535 llvm::FunctionType::get(llvm::Type::getVoidTy(VMContext), false), in ModuleInitFunction()
1536 llvm::GlobalValue::LinkOnceODRLinkage, ".objcv2_load_function", in ModuleInitFunction()
1538 LoadFunction->setVisibility(llvm::GlobalValue::HiddenVisibility); in ModuleInitFunction()
1541 llvm::BasicBlock *EntryBB = in ModuleInitFunction()
1542 llvm::BasicBlock::Create(VMContext, "entry", LoadFunction); in ModuleInitFunction()
1555 CGM.getPointerAlign(), false, llvm::GlobalValue::LinkOnceODRLinkage); in ModuleInitFunction()
1556 InitStruct->setVisibility(llvm::GlobalValue::HiddenVisibility); in ModuleInitFunction()
1566 auto *InitVar = new llvm::GlobalVariable(TheModule, LoadFunction->getType(), in ModuleInitFunction()
1567 /*isConstant*/false, llvm::GlobalValue::LinkOnceAnyLinkage, in ModuleInitFunction()
1586 InitVar->setVisibility(llvm::GlobalValue::HiddenVisibility); in ModuleInitFunction()
1590 auto *Cat = cast<llvm::GlobalVariable>(C->stripPointerCasts()); in ModuleInitFunction()
1594 auto createNullGlobal = [&](StringRef Name, ArrayRef<llvm::Constant*> Init, in ModuleInitFunction()
1600 false, llvm::GlobalValue::LinkOnceODRLinkage); in ModuleInitFunction()
1603 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); in ModuleInitFunction()
1639 auto i32Zero = llvm::ConstantInt::get(Int32Ty, 0); in ModuleInitFunction()
1650 auto *Init = llvm::Function::Create(llvm::FunctionType::get(CGM.VoidTy, in ModuleInitFunction()
1651 {}), llvm::GlobalValue::InternalLinkage, ".objc_early_init", in ModuleInitFunction()
1653 llvm::IRBuilder<> b(llvm::BasicBlock::Create(CGM.getLLVMContext(), "entry", in ModuleInitFunction()
1658 llvm::GlobalVariable *GV = lateInit.second.first; in ModuleInitFunction()
1668 auto *InitVar = new llvm::GlobalVariable(CGM.getModule(), Init->getType(), in ModuleInitFunction()
1669 /*isConstant*/true, llvm::GlobalValue::InternalLinkage, in ModuleInitFunction()
1689 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF, in EmitIvarOffset()
1693 llvm::GlobalVariable *IvarOffsetPointer = TheModule.getNamedGlobal(Name); in EmitIvarOffset()
1695 IvarOffsetPointer = new llvm::GlobalVariable(TheModule, IntTy, false, in EmitIvarOffset()
1696 llvm::GlobalValue::ExternalLinkage, nullptr, Name); in EmitIvarOffset()
1698 llvm::Value *Offset = in EmitIvarOffset()
1776 llvm::Constant *SuperClass = nullptr; in GenerateClass()
1782 SuperClass = new llvm::GlobalVariable(TheModule, PtrTy, false, in GenerateClass()
1783 llvm::GlobalValue::ExternalLinkage, nullptr, SuperClassName); in GenerateClass()
1785 auto Storage = llvm::GlobalValue::DefaultStorageClass; in GenerateClass()
1787 Storage = llvm::GlobalValue::DLLImportStorageClass; in GenerateClass()
1789 Storage = llvm::GlobalValue::DLLExportStorageClass; in GenerateClass()
1791 cast<llvm::GlobalValue>(SuperClass)->setDLLStorageClass(Storage); in GenerateClass()
1795 classFields.add(llvm::ConstantExpr::getBitCast(SuperClass, PtrTy)); in GenerateClass()
1822 llvm::DataLayout td(&TheModule); in GenerateClass()
1829 llvm::StructType *ObjCIvarTy = llvm::StructType::get( in GenerateClass()
1853 llvm::Constant *OffsetValue = llvm::ConstantInt::get(IntTy, Offset); in GenerateClass()
1855 llvm::GlobalVariable *OffsetVar = TheModule.getGlobalVariable(OffsetName); in GenerateClass()
1859 OffsetVar = new llvm::GlobalVariable(TheModule, IntTy, in GenerateClass()
1860 false, llvm::GlobalValue::ExternalLinkage, in GenerateClass()
1866 llvm::GlobalValue::HiddenVisibility : in GenerateClass()
1867 llvm::GlobalValue::DefaultVisibility; in GenerateClass()
1875 llvm::Log2_32(Context.getTypeAlignInChars(ivarTy).getQuantity()); in GenerateClass()
1890 llvm::GlobalValue::PrivateLinkage); in GenerateClass()
1927 SmallVector<llvm::Constant *, 16> Protocols; in GenerateClass()
1930 llvm::ConstantExpr::getBitCast(GenerateProtocolRef(I), in GenerateClass()
1943 llvm::GlobalVariable *classStruct = in GenerateClass()
1945 CGM.getPointerAlign(), false, llvm::GlobalValue::ExternalLinkage); in GenerateClass()
1949 classRefSymbol->setInitializer(llvm::ConstantExpr::getBitCast(classStruct, IdTy)); in GenerateClass()
1954 classStruct->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass); in GenerateClass()
1955 …cast<llvm::GlobalValue>(classRefSymbol)->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageCla… in GenerateClass()
1959 std::pair<llvm::GlobalVariable*, int> v{classStruct, 1}; in GenerateClass()
1971 llvm::ConstantExpr::getBitCast(classStruct, IdTy)); in GenerateClass()
1979 llvm::ConstantExpr::getBitCast(classStruct, Placeholder->getType())); in GenerateClass()
1985 llvm::ConstantExpr::getBitCast(metaclass, IdTy)); in GenerateClass()
1991 auto classInitRef = new llvm::GlobalVariable(TheModule, in GenerateClass()
1992 classStruct->getType(), false, llvm::GlobalValue::ExternalLinkage, in GenerateClass()
2012 llvm::StructType::get(CGM.getLLVMContext(), in CGObjCGNUstep2()
2056 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver, in LookupIMP()
2057 llvm::Value *cmd, llvm::MDNode *node, in LookupIMP()
2060 llvm::Value *args[] = { in LookupIMP()
2064 llvm::CallBase *imp; in LookupIMP()
2074 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, Address ObjCSuper, in LookupIMPSuper()
2075 llvm::Value *cmd, MessageSendInfo &MSI) override { in LookupIMPSuper()
2077 llvm::Value *lookupArgs[] = { in LookupIMPSuper()
2087 llvm::Value *GetClassNamed(CodeGenFunction &CGF, const std::string &Name, in GetClassNamed()
2094 llvm::GlobalVariable *ClassSymbol = TheModule.getGlobalVariable(SymbolName); in GetClassNamed()
2096 ClassSymbol = new llvm::GlobalVariable(TheModule, LongTy, false, in GetClassNamed()
2097 llvm::GlobalValue::ExternalLinkage, in GetClassNamed()
2126 llvm::GlobalVariable *ClassSymbol = TheModule.getGlobalVariable(symbolName); in EmitClassRef()
2128 ClassSymbol = new llvm::GlobalVariable(TheModule, LongTy, false, in EmitClassRef()
2129 llvm::GlobalValue::ExternalLinkage, in EmitClassRef()
2132 new llvm::GlobalVariable(TheModule, ClassSymbol->getType(), true, in EmitClassRef()
2133 llvm::GlobalValue::WeakAnyLinkage, ClassSymbol, symbolRef); in EmitClassRef()
2148 IntTy = cast<llvm::IntegerType>( in CGObjCGNU()
2150 LongTy = cast<llvm::IntegerType>( in CGObjCGNU()
2152 SizeTy = cast<llvm::IntegerType>( in CGObjCGNU()
2154 PtrDiffTy = cast<llvm::IntegerType>( in CGObjCGNU()
2158 Int8Ty = llvm::Type::getInt8Ty(VMContext); in CGObjCGNU()
2160 PtrToInt8Ty = llvm::PointerType::getUnqual(Int8Ty); in CGObjCGNU()
2161 ProtocolPtrTy = llvm::PointerType::getUnqual( in CGObjCGNU()
2164 Zeros[0] = llvm::ConstantInt::get(LongTy, 0); in CGObjCGNU()
2166 NULLPtr = llvm::ConstantPointerNull::get(PtrToInt8Ty); in CGObjCGNU()
2172 SelectorTy = cast<llvm::PointerType>(CGM.getTypes().ConvertType(selTy)); in CGObjCGNU()
2175 PtrToIntTy = llvm::PointerType::getUnqual(IntTy); in CGObjCGNU()
2178 Int32Ty = llvm::Type::getInt32Ty(VMContext); in CGObjCGNU()
2179 Int64Ty = llvm::Type::getInt64Ty(VMContext); in CGObjCGNU()
2189 IdTy = cast<llvm::PointerType>(CGM.getTypes().ConvertType(ASTIdTy)); in CGObjCGNU()
2193 PtrToIdTy = llvm::PointerType::getUnqual(IdTy); in CGObjCGNU()
2194 ProtocolTy = llvm::StructType::get(IdTy, in CGObjCGNU()
2216 PropertyMetadataTy = llvm::StructType::get(CGM.getLLVMContext(), { in CGObjCGNU()
2220 ObjCSuperTy = llvm::StructType::get(IdTy, IdTy); in CGObjCGNU()
2221 PtrToObjCSuperTy = llvm::PointerType::getUnqual(ObjCSuperTy); in CGObjCGNU()
2223 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNU()
2250 llvm::Type *IMPArgs[] = { IdTy, SelectorTy }; in CGObjCGNU()
2251 IMPTy = llvm::PointerType::getUnqual(llvm::FunctionType::get(IdTy, IMPArgs, in CGObjCGNU()
2287 llvm::Value *CGObjCGNU::GetClassNamed(CodeGenFunction &CGF, in GetClassNamed()
2289 llvm::Constant *ClassName = MakeConstantString(Name); in GetClassNamed()
2300 llvm::FunctionCallee ClassLookupFn = CGM.CreateRuntimeFunction( in GetClassNamed()
2301 llvm::FunctionType::get(IdTy, PtrToInt8Ty, true), "objc_lookup_class"); in GetClassNamed()
2307 llvm::Value *CGObjCGNU::GetClass(CodeGenFunction &CGF, in GetClass()
2311 if (auto *ClassSymbol = dyn_cast<llvm::GlobalVariable>(Value)) in GetClass()
2316 llvm::Value *CGObjCGNU::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) { in EmitNSAutoreleasePoolClassRef()
2319 if (auto *ClassSymbol = dyn_cast<llvm::GlobalVariable>(Value)) { in EmitNSAutoreleasePoolClassRef()
2335 llvm::Value *CGObjCGNU::GetTypedSelector(CodeGenFunction &CGF, Selector Sel, in GetTypedSelector()
2338 llvm::GlobalAlias *SelValue = nullptr; in GetTypedSelector()
2348 SelValue = llvm::GlobalAlias::create( in GetTypedSelector()
2349 SelectorTy->getElementType(), 0, llvm::GlobalValue::PrivateLinkage, in GetTypedSelector()
2358 llvm::Value *SelValue = GetSelector(CGF, Sel); in GetAddrOfSelector()
2368 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, Selector Sel) { in GetSelector()
2372 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, in GetSelector()
2378 llvm::Constant *CGObjCGNU::GetEHType(QualType T) { in GetEHType()
2399 llvm::Constant *CGObjCGNUstep::GetEHType(QualType T) { in GetEHType()
2412 llvm::Constant *IDEHType = in GetEHType()
2416 new llvm::GlobalVariable(CGM.getModule(), PtrToInt8Ty, in GetEHType()
2418 llvm::GlobalValue::ExternalLinkage, in GetEHType()
2420 return llvm::ConstantExpr::getBitCast(IDEHType, PtrToInt8Ty); in GetEHType()
2434 llvm::Constant *typeinfo = TheModule.getGlobalVariable(typeinfoName); in GetEHType()
2436 return llvm::ConstantExpr::getBitCast(typeinfo, PtrToInt8Ty); in GetEHType()
2446 Vtable = new llvm::GlobalVariable(TheModule, PtrToInt8Ty, true, in GetEHType()
2447 llvm::GlobalValue::ExternalLinkage, in GetEHType()
2450 llvm::Constant *Two = llvm::ConstantInt::get(IntTy, 2); in GetEHType()
2451 auto *BVtable = llvm::ConstantExpr::getBitCast( in GetEHType()
2452 llvm::ConstantExpr::getGetElementPtr(Vtable->getValueType(), Vtable, Two), in GetEHType()
2455 llvm::Constant *typeName = in GetEHType()
2462 llvm::Constant *TI = in GetEHType()
2466 llvm::GlobalValue::LinkOnceODRLinkage); in GetEHType()
2467 return llvm::ConstantExpr::getBitCast(TI, PtrToInt8Ty); in GetEHType()
2477 llvm::StringMap<llvm::Constant*>::iterator old = ObjCStrings.find(Str); in GenerateConstantString()
2488 llvm::Constant *isa = TheModule.getNamedGlobal(Sym); in GenerateConstantString()
2491 isa = new llvm::GlobalVariable(TheModule, IdTy, /* isConstant */false, in GenerateConstantString()
2492 llvm::GlobalValue::ExternalWeakLinkage, nullptr, Sym); in GenerateConstantString()
2494 isa = llvm::ConstantExpr::getBitCast(isa, PtrToIdTy); in GenerateConstantString()
2501 llvm::Constant *ObjCStr = in GenerateConstantString()
2503 ObjCStr = llvm::ConstantExpr::getBitCast(ObjCStr, PtrToInt8Ty); in GenerateConstantString()
2519 llvm::Value *Receiver, in GenerateMessageSendSuper()
2534 llvm::Value *cmd = GetSelector(CGF, Sel); in GenerateMessageSendSuper()
2543 llvm::Value *ReceiverClass = nullptr; in GenerateMessageSendSuper()
2551 llvm::PointerType::getUnqual(IdTy)); in GenerateMessageSendSuper()
2558 llvm::FunctionCallee classLookupFunction = nullptr; in GenerateMessageSendSuper()
2560 classLookupFunction = CGM.CreateRuntimeFunction(llvm::FunctionType::get( in GenerateMessageSendSuper()
2563 classLookupFunction = CGM.CreateRuntimeFunction(llvm::FunctionType::get( in GenerateMessageSendSuper()
2576 MetaClassPtrAlias = llvm::GlobalAlias::create( in GenerateMessageSendSuper()
2577 IdTy->getElementType(), 0, llvm::GlobalValue::InternalLinkage, in GenerateMessageSendSuper()
2583 ClassPtrAlias = llvm::GlobalAlias::create( in GenerateMessageSendSuper()
2584 IdTy->getElementType(), 0, llvm::GlobalValue::InternalLinkage, in GenerateMessageSendSuper()
2591 llvm::Type *CastTy = llvm::StructType::get(IdTy, IdTy); in GenerateMessageSendSuper()
2593 llvm::PointerType::getUnqual(CastTy)); in GenerateMessageSendSuper()
2601 llvm::StructType *ObjCSuperTy = in GenerateMessageSendSuper()
2602 llvm::StructType::get(Receiver->getType(), IdTy); in GenerateMessageSendSuper()
2613 llvm::Value *imp = LookupIMPSuper(CGF, ObjCSuper, cmd, MSI); in GenerateMessageSendSuper()
2616 llvm::Metadata *impMD[] = { in GenerateMessageSendSuper()
2617 llvm::MDString::get(VMContext, Sel.getAsString()), in GenerateMessageSendSuper()
2618 llvm::MDString::get(VMContext, Class->getSuperClass()->getNameAsString()), in GenerateMessageSendSuper()
2619 llvm::ConstantAsMetadata::get(llvm::ConstantInt::get( in GenerateMessageSendSuper()
2620 llvm::Type::getInt1Ty(VMContext), IsClassMessage))}; in GenerateMessageSendSuper()
2621 llvm::MDNode *node = llvm::MDNode::get(VMContext, impMD); in GenerateMessageSendSuper()
2625 llvm::CallBase *call; in GenerateMessageSendSuper()
2637 llvm::Value *Receiver, in GenerateMessageSend()
2668 llvm::BasicBlock *startBB = nullptr; in GenerateMessageSend()
2669 llvm::BasicBlock *messageBB = nullptr; in GenerateMessageSend()
2670 llvm::BasicBlock *continueBB = nullptr; in GenerateMessageSend()
2677 llvm::Value *isNil = Builder.CreateICmpEQ(Receiver, in GenerateMessageSend()
2678 llvm::Constant::getNullValue(Receiver->getType())); in GenerateMessageSend()
2683 IdTy = cast<llvm::PointerType>(CGM.getTypes().ConvertType(ASTIdTy)); in GenerateMessageSend()
2684 llvm::Value *cmd; in GenerateMessageSend()
2692 llvm::Metadata *impMD[] = { in GenerateMessageSend()
2693 llvm::MDString::get(VMContext, Sel.getAsString()), in GenerateMessageSend()
2694 llvm::MDString::get(VMContext, Class ? Class->getNameAsString() : ""), in GenerateMessageSend()
2695 llvm::ConstantAsMetadata::get(llvm::ConstantInt::get( in GenerateMessageSend()
2696 llvm::Type::getInt1Ty(VMContext), Class != nullptr))}; in GenerateMessageSend()
2697 llvm::MDNode *node = llvm::MDNode::get(VMContext, impMD); in GenerateMessageSend()
2707 llvm::Value *imp; in GenerateMessageSend()
2720 CGM.CreateRuntimeFunction(llvm::FunctionType::get(IdTy, IdTy, true), in GenerateMessageSend()
2727 CGM.CreateRuntimeFunction(llvm::FunctionType::get(IdTy, IdTy, true), in GenerateMessageSend()
2732 llvm::FunctionType::get(IdTy, IdTy, true), "objc_msgSend") in GenerateMessageSend()
2742 llvm::CallBase *call; in GenerateMessageSend()
2753 llvm::Value *v = msgRet.getScalarVal(); in GenerateMessageSend()
2754 llvm::PHINode *phi = Builder.CreatePHI(v->getType(), 2); in GenerateMessageSend()
2756 phi->addIncoming(llvm::Constant::getNullValue(v->getType()), startBB); in GenerateMessageSend()
2760 llvm::PHINode *phi = Builder.CreatePHI(v.getType(), 2); in GenerateMessageSend()
2761 llvm::Type *RetTy = v.getElementType(); in GenerateMessageSend()
2763 CGF.InitTempAlloca(NullVal, llvm::Constant::getNullValue(RetTy)); in GenerateMessageSend()
2768 std::pair<llvm::Value*,llvm::Value*> v = msgRet.getComplexVal(); in GenerateMessageSend()
2769 llvm::PHINode *phi = Builder.CreatePHI(v.first->getType(), 2); in GenerateMessageSend()
2771 phi->addIncoming(llvm::Constant::getNullValue(v.first->getType()), in GenerateMessageSend()
2773 llvm::PHINode *phi2 = Builder.CreatePHI(v.second->getType(), 2); in GenerateMessageSend()
2775 phi2->addIncoming(llvm::Constant::getNullValue(v.second->getType()), in GenerateMessageSend()
2785 llvm::Constant *CGObjCGNU::
2800 llvm::StructType *ObjCMethodTy = in GenerateMethodList()
2801 llvm::StructType::get(CGM.getLLVMContext(), { in GenerateMethodList()
2809 llvm::DataLayout td(&TheModule); in GenerateMethodList()
2813 llvm::StructType::get(CGM.getLLVMContext(), { in GenerateMethodList()
2820 llvm::StructType::get(CGM.getLLVMContext(), { in GenerateMethodList()
2829 llvm::Constant *FnPtr = in GenerateMethodList()
2853 llvm::Constant *CGObjCGNU::
2854 GenerateIvarList(ArrayRef<llvm::Constant *> IvarNames, in GenerateIvarList()
2855 ArrayRef<llvm::Constant *> IvarTypes, in GenerateIvarList()
2856 ArrayRef<llvm::Constant *> IvarOffsets, in GenerateIvarList()
2857 ArrayRef<llvm::Constant *> IvarAlign, in GenerateIvarList()
2869 llvm::StructType *ObjCIvarTy = in GenerateIvarList()
2870 llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, IntTy); in GenerateIvarList()
2889 llvm::Constant *CGObjCGNU::GenerateClassStructure( in GenerateClassStructure()
2890 llvm::Constant *MetaClass, in GenerateClassStructure()
2891 llvm::Constant *SuperClass, in GenerateClassStructure()
2894 llvm::Constant *Version, in GenerateClassStructure()
2895 llvm::Constant *InstanceSize, in GenerateClassStructure()
2896 llvm::Constant *IVars, in GenerateClassStructure()
2897 llvm::Constant *Methods, in GenerateClassStructure()
2898 llvm::Constant *Protocols, in GenerateClassStructure()
2899 llvm::Constant *IvarOffsets, in GenerateClassStructure()
2900 llvm::Constant *Properties, in GenerateClassStructure()
2901 llvm::Constant *StrongIvarBitmap, in GenerateClassStructure()
2902 llvm::Constant *WeakIvarBitmap, in GenerateClassStructure()
2911 llvm::StructType *ClassTy = llvm::StructType::get( in GenerateClassStructure()
2951 llvm::DataLayout td(&TheModule); in GenerateClassStructure()
2988 llvm::GlobalVariable *ClassRef = TheModule.getNamedGlobal(ClassSym); in GenerateClassStructure()
2989 llvm::Constant *Class = in GenerateClassStructure()
2991 llvm::GlobalValue::ExternalLinkage); in GenerateClassStructure()
2993 ClassRef->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(Class, in GenerateClassStructure()
3001 llvm::Constant *CGObjCGNU::
3004 llvm::StructType *ObjCMethodDescTy = in GenerateProtocolMethodList()
3005 llvm::StructType::get(CGM.getLLVMContext(), { PtrToInt8Ty, PtrToInt8Ty }); in GenerateProtocolMethodList()
3023 llvm::Constant *
3034 llvm::Constant *protocol = nullptr; in GenerateProtocolList()
3035 llvm::StringMap<llvm::Constant*>::iterator value = in GenerateProtocolList()
3049 llvm::Value *CGObjCGNU::GenerateProtocolRef(CodeGenFunction &CGF, in GenerateProtocolRef()
3052 llvm::Type *T = in GenerateProtocolRef()
3054 return CGF.Builder.CreateBitCast(protocol, llvm::PointerType::getUnqual(T)); in GenerateProtocolRef()
3057 llvm::Constant *CGObjCGNU::GenerateProtocolRef(const ObjCProtocolDecl *PD) { in GenerateProtocolRef()
3058 llvm::Constant *&protocol = ExistingProtocols[PD->getNameAsString()]; in GenerateProtocolRef()
3065 llvm::Constant *
3067 llvm::Constant *ProtocolList = GenerateProtocolList({}); in GenerateEmptyProtocol()
3068 llvm::Constant *MethodList = GenerateProtocolMethodList({}); in GenerateEmptyProtocol()
3069 MethodList = llvm::ConstantExpr::getBitCast(MethodList, PtrToInt8Ty); in GenerateEmptyProtocol()
3077 Elements.add(llvm::ConstantExpr::getIntToPtr( in GenerateEmptyProtocol()
3078 llvm::ConstantInt::get(Int32Ty, ProtocolVersion), IdTy)); in GenerateEmptyProtocol()
3121 llvm::Constant *ProtocolList = GenerateProtocolList(Protocols); in GenerateProtocol()
3122 llvm::Constant *InstanceMethodList = in GenerateProtocol()
3124 llvm::Constant *ClassMethodList = in GenerateProtocol()
3126 llvm::Constant *OptionalInstanceMethodList = in GenerateProtocol()
3128 llvm::Constant *OptionalClassMethodList = in GenerateProtocol()
3137 llvm::Constant *PropertyList = in GenerateProtocol()
3139 llvm::Constant *OptionalPropertyList = in GenerateProtocol()
3149 llvm::ConstantExpr::getIntToPtr( in GenerateProtocol()
3150 llvm::ConstantInt::get(Int32Ty, ProtocolVersion), IdTy)); in GenerateProtocol()
3160 llvm::ConstantExpr::getBitCast( in GenerateProtocol()
3196 Categories.push_back(llvm::ConstantExpr::getBitCast( in GenerateProtocolHolderCategory()
3212 llvm::Constant *CGObjCGNU::MakeBitField(ArrayRef<bool> bits) { in MakeBitField()
3220 return llvm::ConstantInt::get(IntPtrTy, val); in MakeBitField()
3222 SmallVector<llvm::Constant *, 8> values; in MakeBitField()
3230 values.push_back(llvm::ConstantInt::get(Int32Ty, word)); in MakeBitField()
3240 llvm::Constant *GS = in MakeBitField()
3242 llvm::Constant *ptr = llvm::ConstantExpr::getPtrToInt(GS, IntPtrTy); in MakeBitField()
3246 llvm::Constant *CGObjCGNU::GenerateCategoryProtocolList(const in GenerateCategoryProtocolList()
3300 Categories.push_back(llvm::ConstantExpr::getBitCast( in GenerateCategory()
3307 llvm::Constant *CGObjCGNU::GeneratePropertyList(const Decl *Container, in GeneratePropertyList()
3313 llvm::SmallPtrSet<const IdentifierInfo*, 16> PropertySet; in GeneratePropertyList()
3425 symbol->setInitializer(llvm::ConstantInt::get(LongTy, 0)); in GenerateClass()
3427 new llvm::GlobalVariable(TheModule, LongTy, false, in GenerateClass()
3428 llvm::GlobalValue::ExternalLinkage, in GenerateClass()
3429 llvm::ConstantInt::get(LongTy, 0), in GenerateClass()
3438 SmallVector<llvm::Constant*, 16> IvarNames; in GenerateClass()
3439 SmallVector<llvm::Constant*, 16> IvarTypes; in GenerateClass()
3440 SmallVector<llvm::Constant*, 16> IvarOffsets; in GenerateClass()
3441 SmallVector<llvm::Constant*, 16> IvarAligns; in GenerateClass()
3465 IvarAligns.push_back(llvm::ConstantInt::get(IntTy, in GenerateClass()
3473 llvm::Constant *OffsetValue = llvm::ConstantInt::get(IntTy, Offset); in GenerateClass()
3478 llvm::GlobalVariable *OffsetVar = TheModule.getGlobalVariable(OffsetName); in GenerateClass()
3484 OffsetVar->setLinkage(llvm::GlobalValue::ExternalLinkage); in GenerateClass()
3486 OffsetVar = new llvm::GlobalVariable(TheModule, Int32Ty, in GenerateClass()
3487 false, llvm::GlobalValue::ExternalLinkage, in GenerateClass()
3507 llvm::Constant *StrongIvarBitmap = MakeBitField(StrongIvars); in GenerateClass()
3508 llvm::Constant *WeakIvarBitmap = MakeBitField(WeakIvars); in GenerateClass()
3509 llvm::GlobalVariable *IvarOffsetArray = in GenerateClass()
3522 llvm::Constant *Properties = GeneratePropertyList(OID, ClassDecl); in GenerateClass()
3533 llvm::Constant *SuperClass; in GenerateClass()
3537 SuperClass = llvm::ConstantPointerNull::get(PtrToInt8Ty); in GenerateClass()
3540 SmallVector<llvm::Constant*, 1> empty; in GenerateClass()
3542 llvm::Constant *MethodList = GenerateMethodList(ClassName, "", in GenerateClass()
3544 llvm::Constant *ClassMethodList = GenerateMethodList(ClassName, "", in GenerateClass()
3546 llvm::Constant *IvarList = GenerateIvarList(IvarNames, IvarTypes, in GenerateClass()
3558 llvm::Type *IndexTy = Int32Ty; in GenerateClass()
3559 llvm::Constant *offsetPointerIndexes[] = {Zeros[0], in GenerateClass()
3560 llvm::ConstantInt::get(IndexTy, ClassABIVersion > 1 ? 2 : 1), nullptr, in GenerateClass()
3561 llvm::ConstantInt::get(IndexTy, ClassABIVersion > 1 ? 3 : 2) }; in GenerateClass()
3567 offsetPointerIndexes[2] = llvm::ConstantInt::get(IndexTy, ivarIndex); in GenerateClass()
3569 llvm::Constant *offsetValue = llvm::ConstantExpr::getGetElementPtr( in GenerateClass()
3570 cast<llvm::GlobalVariable>(IvarList)->getValueType(), IvarList, in GenerateClass()
3573 llvm::GlobalVariable *offset = TheModule.getNamedGlobal(Name); in GenerateClass()
3579 offset->setLinkage(llvm::GlobalValue::ExternalLinkage); in GenerateClass()
3582 new llvm::GlobalVariable(TheModule, offsetValue->getType(), in GenerateClass()
3583 false, llvm::GlobalValue::ExternalLinkage, offsetValue, Name); in GenerateClass()
3586 llvm::Constant *ZeroPtr = llvm::ConstantInt::get(IntPtrTy, 0); in GenerateClass()
3589 llvm::Constant *MetaClassStruct = GenerateClassStructure( in GenerateClass()
3593 CGM.setGVProperties(cast<llvm::GlobalValue>(MetaClassStruct), in GenerateClass()
3597 llvm::Constant *ClassStruct = GenerateClassStructure( in GenerateClass()
3599 llvm::ConstantInt::get(LongTy, instanceSize), IvarList, MethodList, in GenerateClass()
3602 CGM.setGVProperties(cast<llvm::GlobalValue>(ClassStruct), in GenerateClass()
3608 llvm::ConstantExpr::getBitCast(ClassStruct, IdTy)); in GenerateClass()
3614 llvm::ConstantExpr::getBitCast(MetaClassStruct, IdTy)); in GenerateClass()
3620 ClassStruct = llvm::ConstantExpr::getBitCast(ClassStruct, PtrToInt8Ty); in GenerateClass()
3624 llvm::Function *CGObjCGNU::ModuleInitFunction() { in ModuleInitFunction()
3633 llvm::StructType *selStructTy = in ModuleInitFunction()
3634 dyn_cast<llvm::StructType>(SelectorTy->getElementType()); in ModuleInitFunction()
3635 llvm::Type *selStructPtrTy = SelectorTy; in ModuleInitFunction()
3637 selStructTy = llvm::StructType::get(CGM.getLLVMContext(), in ModuleInitFunction()
3639 selStructPtrTy = llvm::PointerType::getUnqual(selStructTy); in ModuleInitFunction()
3643 llvm::Constant *statics = NULLPtr; in ModuleInitFunction()
3645 llvm::GlobalVariable *fileStatics = [&] { in ModuleInitFunction()
3670 statics = llvm::ConstantExpr::getBitCast(statics, PtrTy); in ModuleInitFunction()
3675 SmallVector<llvm::GlobalAlias*, 16> selectorAliases; in ModuleInitFunction()
3679 llvm::GlobalVariable *selectorList = [&] { in ModuleInitFunction()
3686 llvm::sort(allSelectors); in ModuleInitFunction()
3690 llvm::Constant *selName = ExportUniqueString(selNameStr, ".objc_sel_name"); in ModuleInitFunction()
3693 llvm::Constant *selectorTypeEncoding = NULLPtr; in ModuleInitFunction()
3726 llvm::Constant *idxs[] = { in ModuleInitFunction()
3728 llvm::ConstantInt::get(Int32Ty, i) in ModuleInitFunction()
3731 llvm::Constant *selPtr = llvm::ConstantExpr::getGetElementPtr( in ModuleInitFunction()
3735 selPtr = llvm::ConstantExpr::getBitCast(selPtr, SelectorTy); in ModuleInitFunction()
3740 llvm::GlobalVariable *symtab = [&] { in ModuleInitFunction()
3769 llvm::Constant *module = [&] { in ModuleInitFunction()
3770 llvm::Type *moduleEltTys[] = { in ModuleInitFunction()
3773 llvm::StructType *moduleTy = in ModuleInitFunction()
3774 llvm::StructType::get(CGM.getLLVMContext(), in ModuleInitFunction()
3814 llvm::Function * LoadFunction = llvm::Function::Create( in ModuleInitFunction()
3815 llvm::FunctionType::get(llvm::Type::getVoidTy(VMContext), false), in ModuleInitFunction()
3816 llvm::GlobalValue::InternalLinkage, ".objc_load_function", in ModuleInitFunction()
3818 llvm::BasicBlock *EntryBB = in ModuleInitFunction()
3819 llvm::BasicBlock::Create(VMContext, "entry", LoadFunction); in ModuleInitFunction()
3823 llvm::FunctionType *FT = in ModuleInitFunction()
3824 llvm::FunctionType::get(Builder.getVoidTy(), module->getType(), true); in ModuleInitFunction()
3825 llvm::FunctionCallee Register = in ModuleInitFunction()
3830 llvm::Type *ArgTypes[2] = {PtrTy, PtrToInt8Ty}; in ModuleInitFunction()
3831 llvm::FunctionType *RegisterAliasTy = in ModuleInitFunction()
3832 llvm::FunctionType::get(Builder.getVoidTy(), in ModuleInitFunction()
3834 llvm::Function *RegisterAlias = llvm::Function::Create( in ModuleInitFunction()
3836 llvm::GlobalValue::ExternalWeakLinkage, "class_registerAlias_np", in ModuleInitFunction()
3838 llvm::BasicBlock *AliasBB = in ModuleInitFunction()
3839 llvm::BasicBlock::Create(VMContext, "alias", LoadFunction); in ModuleInitFunction()
3840 llvm::BasicBlock *NoAliasBB = in ModuleInitFunction()
3841 llvm::BasicBlock::Create(VMContext, "no_alias", LoadFunction); in ModuleInitFunction()
3844 llvm::Value *HasRegisterAlias = Builder.CreateICmpNE(RegisterAlias, in ModuleInitFunction()
3845 llvm::Constant::getNullValue(RegisterAlias->getType())); in ModuleInitFunction()
3853 llvm::Constant *TheClass = in ModuleInitFunction()
3856 TheClass = llvm::ConstantExpr::getBitCast(TheClass, PtrTy); in ModuleInitFunction()
3872 llvm::Function *CGObjCGNU::GenerateMethod(const ObjCMethodDecl *OMD, in GenerateMethod()
3875 llvm::FunctionType *MethodTy = in GenerateMethod()
3879 llvm::Function *Method in GenerateMethod()
3880 = llvm::Function::Create(MethodTy, in GenerateMethod()
3881 llvm::GlobalValue::InternalLinkage, in GenerateMethod()
3888 llvm::Function *Fn, in GenerateDirectMethodPrologue()
3894 llvm::FunctionCallee CGObjCGNU::GetPropertyGetFunction() { in GetPropertyGetFunction()
3898 llvm::FunctionCallee CGObjCGNU::GetPropertySetFunction() { in GetPropertySetFunction()
3902 llvm::FunctionCallee CGObjCGNU::GetOptimizedPropertySetFunction(bool atomic, in GetOptimizedPropertySetFunction()
3907 llvm::FunctionCallee CGObjCGNU::GetGetStructFunction() { in GetGetStructFunction()
3911 llvm::FunctionCallee CGObjCGNU::GetSetStructFunction() { in GetSetStructFunction()
3915 llvm::FunctionCallee CGObjCGNU::GetCppAtomicObjectGetFunction() { in GetCppAtomicObjectGetFunction()
3919 llvm::FunctionCallee CGObjCGNU::GetCppAtomicObjectSetFunction() { in GetCppAtomicObjectSetFunction()
3923 llvm::FunctionCallee CGObjCGNU::EnumerationMutationFunction() { in EnumerationMutationFunction()
3952 llvm::Value *ExceptionAsObject; in EmitThrowStmt()
3956 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr); in EmitThrowStmt()
3972 llvm::CallBase *Throw = CGF.EmitRuntimeCallOrInvoke(ExceptionReThrowFn); in EmitThrowStmt()
3977 llvm::CallBase *Throw = in EmitThrowStmt()
3986 llvm::Value * CGObjCGNU::EmitObjCWeakRead(CodeGenFunction &CGF, in EmitObjCWeakRead()
3994 llvm::Value *src, Address dst) { in EmitObjCWeakAssign()
4002 llvm::Value *src, Address dst, in EmitObjCGlobalAssign()
4013 llvm::Value *src, Address dst, in EmitObjCIvarAssign()
4014 llvm::Value *ivarOffset) { in EmitObjCIvarAssign()
4022 llvm::Value *src, Address dst) { in EmitObjCStrongCastAssign()
4032 llvm::Value *Size) { in EmitGCMemmoveCollectable()
4040 llvm::GlobalVariable *CGObjCGNU::ObjCIvarOffsetVariable( in ObjCIvarOffsetVariable()
4047 llvm::GlobalVariable *IvarOffsetPointer = TheModule.getNamedGlobal(Name); in ObjCIvarOffsetVariable()
4049 IvarOffsetPointer = new llvm::GlobalVariable(TheModule, in ObjCIvarOffsetVariable()
4050 llvm::Type::getInt32PtrTy(VMContext), false, in ObjCIvarOffsetVariable()
4051 llvm::GlobalValue::ExternalLinkage, nullptr, Name); in ObjCIvarOffsetVariable()
4057 llvm::Value *BaseValue, in EmitObjCValueForIvar()
4082 llvm::Value *CGObjCGNU::EmitIvarOffset(CodeGenFunction &CGF, in EmitIvarOffset()
4096 llvm::Type::getInt32PtrTy(VMContext), in EmitIvarOffset()
4104 llvm::Value *Offset = TheModule.getGlobalVariable(name); in EmitIvarOffset()
4106 auto GV = new llvm::GlobalVariable(TheModule, IntTy, in EmitIvarOffset()
4107 false, llvm::GlobalValue::LinkOnceAnyLinkage, in EmitIvarOffset()
4108 llvm::Constant::getNullValue(IntTy), name); in EmitIvarOffset()
4118 return llvm::ConstantInt::get(PtrDiffTy, Offset, /*isSigned*/true); in EmitIvarOffset()