• Home
  • Raw
  • Download

Lines Matching refs:llvm

51   llvm::LLVMContext &VMContext;
61 llvm::Constant *getMessageSendFn() const { in getMessageSendFn()
64 llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy }; in getMessageSendFn()
66 CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendFn()
69 llvm::AttributeSet::get(CGM.getLLVMContext(), in getMessageSendFn()
70 llvm::AttributeSet::FunctionIndex, in getMessageSendFn()
71 llvm::Attribute::NonLazyBind)); in getMessageSendFn()
79 llvm::Constant *getMessageSendStretFn() const { in getMessageSendStretFn()
80 llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy }; in getMessageSendStretFn()
81 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.VoidTy, in getMessageSendStretFn()
92 llvm::Constant *getMessageSendFpretFn() const { in getMessageSendFpretFn()
93 llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy }; in getMessageSendFpretFn()
94 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.DoubleTy, in getMessageSendFpretFn()
105 llvm::Constant *getMessageSendFp2retFn() const { in getMessageSendFp2retFn()
106 llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy }; in getMessageSendFp2retFn()
107 llvm::Type *longDoubleType = llvm::Type::getX86_FP80Ty(VMContext); in getMessageSendFp2retFn()
108 llvm::Type *resultType = in getMessageSendFp2retFn()
109 llvm::StructType::get(longDoubleType, longDoubleType, nullptr); in getMessageSendFp2retFn()
111 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(resultType, in getMessageSendFp2retFn()
121 llvm::Constant *getMessageSendSuperFn() const { in getMessageSendSuperFn()
122 llvm::Type *params[] = { SuperPtrTy, SelectorPtrTy }; in getMessageSendSuperFn()
123 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendSuperFn()
132 llvm::Constant *getMessageSendSuperFn2() const { in getMessageSendSuperFn2()
133 llvm::Type *params[] = { SuperPtrTy, SelectorPtrTy }; in getMessageSendSuperFn2()
134 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendSuperFn2()
143 llvm::Constant *getMessageSendSuperStretFn() const { in getMessageSendSuperStretFn()
144 llvm::Type *params[] = { Int8PtrTy, SuperPtrTy, SelectorPtrTy }; in getMessageSendSuperStretFn()
146 llvm::FunctionType::get(CGM.VoidTy, params, true), in getMessageSendSuperStretFn()
154 llvm::Constant *getMessageSendSuperStretFn2() const { in getMessageSendSuperStretFn2()
155 llvm::Type *params[] = { Int8PtrTy, SuperPtrTy, SelectorPtrTy }; in getMessageSendSuperStretFn2()
157 llvm::FunctionType::get(CGM.VoidTy, params, true), in getMessageSendSuperStretFn2()
161 llvm::Constant *getMessageSendSuperFpretFn() const { in getMessageSendSuperFpretFn()
166 llvm::Constant *getMessageSendSuperFpretFn2() const { in getMessageSendSuperFpretFn2()
175 llvm::Type *ShortTy, *IntTy, *LongTy, *LongLongTy;
176 llvm::Type *Int8PtrTy, *Int8PtrPtrTy;
177 llvm::Type *IvarOffsetVarTy;
180 llvm::Type *ObjectPtrTy;
183 llvm::Type *PtrObjectPtrTy;
186 llvm::Type *SelectorPtrTy;
191 llvm::Type *ExternalProtocolPtrTy;
194 llvm::Type *getExternalProtocolPtrTy() { in getExternalProtocolPtrTy()
200 llvm::Type *T = Types.ConvertType(Ctx.getObjCProtoType()); in getExternalProtocolPtrTy()
201 ExternalProtocolPtrTy = llvm::PointerType::getUnqual(T); in getExternalProtocolPtrTy()
213 llvm::StructType *SuperTy;
215 llvm::Type *SuperPtrTy;
219 llvm::StructType *PropertyTy;
223 llvm::StructType *PropertyListTy;
225 llvm::Type *PropertyListPtrTy;
228 llvm::StructType *MethodTy;
231 llvm::Type *CacheTy;
233 llvm::Type *CachePtrTy;
235 llvm::Constant *getGetPropertyFn() { in getGetPropertyFn()
244 llvm::FunctionType *FTy = in getGetPropertyFn()
250 llvm::Constant *getSetPropertyFn() { in getSetPropertyFn()
263 llvm::FunctionType *FTy = in getSetPropertyFn()
269 llvm::Constant *getOptimizedSetPropertyFn(bool atomic, bool copy) { in getOptimizedSetPropertyFn()
288 llvm::FunctionType *FTy = in getOptimizedSetPropertyFn()
304 llvm::Constant *getCopyStructFn() { in getCopyStructFn()
314 llvm::FunctionType *FTy = in getCopyStructFn()
324 llvm::Constant *getCppAtomicObjectFunction() { in getCppAtomicObjectFunction()
332 llvm::FunctionType *FTy = in getCppAtomicObjectFunction()
338 llvm::Constant *getEnumerationMutationFn() { in getEnumerationMutationFn()
344 llvm::FunctionType *FTy = in getEnumerationMutationFn()
350 llvm::Constant *getLookUpClassFn() { in getLookUpClassFn()
357 llvm::FunctionType *FTy = in getLookUpClassFn()
365 llvm::Constant *getGcReadWeakFn() { in getGcReadWeakFn()
367 llvm::Type *args[] = { ObjectPtrTy->getPointerTo() }; in getGcReadWeakFn()
368 llvm::FunctionType *FTy = in getGcReadWeakFn()
369 llvm::FunctionType::get(ObjectPtrTy, args, false); in getGcReadWeakFn()
374 llvm::Constant *getGcAssignWeakFn() { in getGcAssignWeakFn()
376 llvm::Type *args[] = { ObjectPtrTy, ObjectPtrTy->getPointerTo() }; in getGcAssignWeakFn()
377 llvm::FunctionType *FTy = in getGcAssignWeakFn()
378 llvm::FunctionType::get(ObjectPtrTy, args, false); in getGcAssignWeakFn()
383 llvm::Constant *getGcAssignGlobalFn() { in getGcAssignGlobalFn()
385 llvm::Type *args[] = { ObjectPtrTy, ObjectPtrTy->getPointerTo() }; in getGcAssignGlobalFn()
386 llvm::FunctionType *FTy = in getGcAssignGlobalFn()
387 llvm::FunctionType::get(ObjectPtrTy, args, false); in getGcAssignGlobalFn()
392 llvm::Constant *getGcAssignThreadLocalFn() { in getGcAssignThreadLocalFn()
394 llvm::Type *args[] = { ObjectPtrTy, ObjectPtrTy->getPointerTo() }; in getGcAssignThreadLocalFn()
395 llvm::FunctionType *FTy = in getGcAssignThreadLocalFn()
396 llvm::FunctionType::get(ObjectPtrTy, args, false); in getGcAssignThreadLocalFn()
401 llvm::Constant *getGcAssignIvarFn() { in getGcAssignIvarFn()
403 llvm::Type *args[] = { ObjectPtrTy, ObjectPtrTy->getPointerTo(), in getGcAssignIvarFn()
405 llvm::FunctionType *FTy = in getGcAssignIvarFn()
406 llvm::FunctionType::get(ObjectPtrTy, args, false); in getGcAssignIvarFn()
411 llvm::Constant *GcMemmoveCollectableFn() { in GcMemmoveCollectableFn()
413 llvm::Type *args[] = { Int8PtrTy, Int8PtrTy, LongTy }; in GcMemmoveCollectableFn()
414 llvm::FunctionType *FTy = llvm::FunctionType::get(Int8PtrTy, args, false); in GcMemmoveCollectableFn()
419 llvm::Constant *getGcAssignStrongCastFn() { in getGcAssignStrongCastFn()
421 llvm::Type *args[] = { ObjectPtrTy, ObjectPtrTy->getPointerTo() }; in getGcAssignStrongCastFn()
422 llvm::FunctionType *FTy = in getGcAssignStrongCastFn()
423 llvm::FunctionType::get(ObjectPtrTy, args, false); in getGcAssignStrongCastFn()
428 llvm::Constant *getExceptionThrowFn() { in getExceptionThrowFn()
430 llvm::Type *args[] = { ObjectPtrTy }; in getExceptionThrowFn()
431 llvm::FunctionType *FTy = in getExceptionThrowFn()
432 llvm::FunctionType::get(CGM.VoidTy, args, false); in getExceptionThrowFn()
437 llvm::Constant *getExceptionRethrowFn() { in getExceptionRethrowFn()
439 llvm::FunctionType *FTy = llvm::FunctionType::get(CGM.VoidTy, false); in getExceptionRethrowFn()
444 llvm::Constant *getSyncEnterFn() { in getSyncEnterFn()
446 llvm::Type *args[] = { ObjectPtrTy }; in getSyncEnterFn()
447 llvm::FunctionType *FTy = in getSyncEnterFn()
448 llvm::FunctionType::get(CGM.IntTy, args, false); in getSyncEnterFn()
453 llvm::Constant *getSyncExitFn() { in getSyncExitFn()
455 llvm::Type *args[] = { ObjectPtrTy }; in getSyncExitFn()
456 llvm::FunctionType *FTy = in getSyncExitFn()
457 llvm::FunctionType::get(CGM.IntTy, args, false); in getSyncExitFn()
461 llvm::Constant *getSendFn(bool IsSuper) const { in getSendFn()
465 llvm::Constant *getSendFn2(bool IsSuper) const { in getSendFn2()
469 llvm::Constant *getSendStretFn(bool IsSuper) const { in getSendStretFn()
473 llvm::Constant *getSendStretFn2(bool IsSuper) const { in getSendStretFn2()
477 llvm::Constant *getSendFpretFn(bool IsSuper) const { in getSendFpretFn()
481 llvm::Constant *getSendFpretFn2(bool IsSuper) const { in getSendFpretFn2()
485 llvm::Constant *getSendFp2retFn(bool IsSuper) const { in getSendFp2retFn()
489 llvm::Constant *getSendFp2RetFn2(bool IsSuper) const { in getSendFp2RetFn2()
501 llvm::StructType *SymtabTy;
503 llvm::Type *SymtabPtrTy;
505 llvm::StructType *ModuleTy;
508 llvm::StructType *ProtocolTy;
510 llvm::Type *ProtocolPtrTy;
513 llvm::StructType *ProtocolExtensionTy;
516 llvm::Type *ProtocolExtensionPtrTy;
519 llvm::StructType *MethodDescriptionTy;
522 llvm::StructType *MethodDescriptionListTy;
525 llvm::Type *MethodDescriptionListPtrTy;
527 llvm::StructType *ProtocolListTy;
529 llvm::Type *ProtocolListPtrTy;
531 llvm::StructType *CategoryTy;
533 llvm::StructType *ClassTy;
535 llvm::Type *ClassPtrTy;
537 llvm::StructType *ClassExtensionTy;
539 llvm::Type *ClassExtensionPtrTy;
541 llvm::StructType *IvarTy;
543 llvm::Type *IvarListTy;
545 llvm::Type *IvarListPtrTy;
547 llvm::Type *MethodListTy;
549 llvm::Type *MethodListPtrTy;
552 llvm::Type *ExceptionDataTy;
555 llvm::Constant *getExceptionTryEnterFn() { in getExceptionTryEnterFn()
556 llvm::Type *params[] = { ExceptionDataTy->getPointerTo() }; in getExceptionTryEnterFn()
558 llvm::FunctionType::get(CGM.VoidTy, params, false), in getExceptionTryEnterFn()
563 llvm::Constant *getExceptionTryExitFn() { in getExceptionTryExitFn()
564 llvm::Type *params[] = { ExceptionDataTy->getPointerTo() }; in getExceptionTryExitFn()
566 llvm::FunctionType::get(CGM.VoidTy, params, false), in getExceptionTryExitFn()
571 llvm::Constant *getExceptionExtractFn() { in getExceptionExtractFn()
572 llvm::Type *params[] = { ExceptionDataTy->getPointerTo() }; in getExceptionExtractFn()
573 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getExceptionExtractFn()
579 llvm::Constant *getExceptionMatchFn() { in getExceptionMatchFn()
580 llvm::Type *params[] = { ClassPtrTy, ObjectPtrTy }; in getExceptionMatchFn()
582 llvm::FunctionType::get(CGM.Int32Ty, params, false), in getExceptionMatchFn()
587 llvm::Constant *getSetJmpFn() { in getSetJmpFn()
589 llvm::Type *params[] = { CGM.Int32Ty->getPointerTo() }; in getSetJmpFn()
591 CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.Int32Ty, in getSetJmpFn()
594 llvm::AttributeSet::get(CGM.getLLVMContext(), in getSetJmpFn()
595 llvm::AttributeSet::FunctionIndex, in getSetJmpFn()
596 llvm::Attribute::NonLazyBind)); in getSetJmpFn()
608 llvm::StructType *MethodListnfABITy;
611 llvm::Type *MethodListnfABIPtrTy;
614 llvm::StructType *ProtocolnfABITy;
617 llvm::Type *ProtocolnfABIPtrTy;
620 llvm::StructType *ProtocolListnfABITy;
623 llvm::Type *ProtocolListnfABIPtrTy;
626 llvm::StructType *ClassnfABITy;
629 llvm::Type *ClassnfABIPtrTy;
632 llvm::StructType *IvarnfABITy;
635 llvm::StructType *IvarListnfABITy;
638 llvm::Type *IvarListnfABIPtrTy;
641 llvm::StructType *ClassRonfABITy;
644 llvm::Type *ImpnfABITy;
647 llvm::StructType *CategorynfABITy;
656 llvm::StructType *MessageRefTy;
661 llvm::Type *MessageRefPtrTy;
670 llvm::StructType *SuperMessageRefTy;
673 llvm::Type *SuperMessageRefPtrTy;
675 llvm::Constant *getMessageSendFixupFn() { in getMessageSendFixupFn()
677 llvm::Type *params[] = { ObjectPtrTy, MessageRefPtrTy }; in getMessageSendFixupFn()
678 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendFixupFn()
683 llvm::Constant *getMessageSendFpretFixupFn() { in getMessageSendFpretFixupFn()
685 llvm::Type *params[] = { ObjectPtrTy, MessageRefPtrTy }; in getMessageSendFpretFixupFn()
686 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendFpretFixupFn()
691 llvm::Constant *getMessageSendStretFixupFn() { in getMessageSendStretFixupFn()
693 llvm::Type *params[] = { ObjectPtrTy, MessageRefPtrTy }; in getMessageSendStretFixupFn()
694 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendStretFixupFn()
699 llvm::Constant *getMessageSendSuper2FixupFn() { in getMessageSendSuper2FixupFn()
702 llvm::Type *params[] = { SuperPtrTy, SuperMessageRefPtrTy }; in getMessageSendSuper2FixupFn()
703 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendSuper2FixupFn()
708 llvm::Constant *getMessageSendSuper2StretFixupFn() { in getMessageSendSuper2StretFixupFn()
711 llvm::Type *params[] = { SuperPtrTy, SuperMessageRefPtrTy }; in getMessageSendSuper2StretFixupFn()
712 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(ObjectPtrTy, in getMessageSendSuper2StretFixupFn()
717 llvm::Constant *getObjCEndCatchFn() { in getObjCEndCatchFn()
718 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(CGM.VoidTy, false), in getObjCEndCatchFn()
723 llvm::Constant *getObjCBeginCatchFn() { in getObjCBeginCatchFn()
724 llvm::Type *params[] = { Int8PtrTy }; in getObjCBeginCatchFn()
725 return CGM.CreateRuntimeFunction(llvm::FunctionType::get(Int8PtrTy, in getObjCBeginCatchFn()
730 llvm::StructType *EHTypeTy;
731 llvm::Type *EHTypePtrTy;
815 llvm::LLVMContext &VMContext;
824 llvm::SetVector<IdentifierInfo*> LazySymbols;
830 llvm::SetVector<IdentifierInfo*> DefinedSymbols;
833 llvm::StringMap<llvm::GlobalVariable*> ClassNames;
836 llvm::DenseMap<Selector, llvm::GlobalVariable*> MethodVarNames;
839 llvm::SmallSetVector<std::string, 16> DefinedCategoryNames;
843 llvm::StringMap<llvm::GlobalVariable*> MethodVarTypes;
847 llvm::DenseMap<const ObjCMethodDecl*, llvm::Function*> MethodDefinitions;
850 llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> PropertyNames;
853 llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> ClassReferences;
856 llvm::DenseMap<Selector, llvm::GlobalVariable*> SelectorReferences;
861 llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> Protocols;
865 llvm::DenseSet<IdentifierInfo*> DefinedProtocols;
868 SmallVector<llvm::GlobalValue*, 16> DefinedClasses;
874 SmallVector<llvm::GlobalValue*, 16> DefinedNonLazyClasses;
877 SmallVector<llvm::GlobalValue*, 16> DefinedCategories;
880 SmallVector<llvm::GlobalValue*, 16> DefinedNonLazyCategories;
890 llvm::Constant *GetMethodVarName(Selector Sel);
891 llvm::Constant *GetMethodVarName(IdentifierInfo *Ident);
897 llvm::Constant *GetMethodVarType(const ObjCMethodDecl *D,
899 llvm::Constant *GetMethodVarType(const FieldDecl *D);
903 llvm::Constant *GetPropertyName(IdentifierInfo *Ident);
906 llvm::Constant *GetPropertyTypeString(const ObjCPropertyDecl *PD,
912 llvm::Constant *GetClassName(StringRef RuntimeName);
914 llvm::Function *GetMethodDefinition(const ObjCMethodDecl *MD);
923 llvm::Constant *BuildIvarLayout(const ObjCImplementationDecl *OI,
929 llvm::Constant *BuildStrongIvarLayout(const ObjCImplementationDecl *OI, in BuildStrongIvarLayout()
935 llvm::Constant *BuildWeakIvarLayout(const ObjCImplementationDecl *OI, in BuildWeakIvarLayout()
953 void BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
961 llvm::Constant *getBitmapBlockLayout(bool ComputeByrefLayout);
965 llvm::Constant *GetIvarLayoutName(IdentifierInfo *Ident,
970 llvm::Constant *EmitPropertyList(Twine Name,
978 llvm::Constant *EmitProtocolMethodTypes(Twine Name,
979 ArrayRef<llvm::Constant*> MethodTypes,
984 llvm::SmallPtrSet<const IdentifierInfo*, 16> &PropertySet,
985 SmallVectorImpl<llvm::Constant*> &Properties,
994 llvm::Constant *GetProtocolRef(const ObjCProtocolDecl *PD);
998 llvm::Value *EmitClassRefViaRuntime(CodeGenFunction &CGF,
1017 llvm::GlobalVariable *CreateMetadataVar(Twine Name, llvm::Constant *Init,
1025 llvm::Value *Sel,
1026 llvm::Value *Arg0,
1048 llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD,
1056 virtual llvm::Constant *GetOrEmitProtocol(const ObjCProtocolDecl *PD)=0;
1062 virtual llvm::Constant *GetOrEmitProtocolRef(const ObjCProtocolDecl *PD)=0;
1063 llvm::Constant *BuildGCBlockLayout(CodeGen::CodeGenModule &CGM,
1065 llvm::Constant *BuildRCBlockLayout(CodeGen::CodeGenModule &CGM,
1068 llvm::Constant *BuildByrefLayout(CodeGen::CodeGenModule &CGM,
1082 llvm::Constant *EmitModuleSymbols();
1091 llvm::Constant *EmitClassExtension(const ObjCImplementationDecl *ID,
1098 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1101 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1104 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1107 llvm::Value *EmitSuperClassRef(const ObjCInterfaceDecl *ID);
1114 llvm::Constant *EmitIvarList(const ObjCImplementationDecl *ID,
1120 llvm::Constant *EmitMetaClassRef(const ObjCInterfaceDecl *ID);
1124 llvm::Constant *EmitMetaClass(const ObjCImplementationDecl *ID,
1125 llvm::Constant *Protocols,
1126 ArrayRef<llvm::Constant*> Methods);
1128 llvm::Constant *GetMethodConstant(const ObjCMethodDecl *MD);
1130 llvm::Constant *GetMethodDescriptionConstant(const ObjCMethodDecl *MD);
1134 llvm::Constant *EmitMethodList(Twine Name, StringRef Section,
1135 ArrayRef<llvm::Constant *> Methods);
1148 llvm::Constant *EmitMethodDescList(Twine Name, StringRef Section,
1149 ArrayRef<llvm::Constant *> Methods);
1154 llvm::Constant *GetOrEmitProtocol(const ObjCProtocolDecl *PD) override;
1160 llvm::Constant *GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) override;
1166 llvm::Constant *
1168 ArrayRef<llvm::Constant*> OptInstanceMethods,
1169 ArrayRef<llvm::Constant*> OptClassMethods,
1170 ArrayRef<llvm::Constant*> MethodTypesExt);
1174 llvm::Constant *EmitProtocolList(Twine Name,
1180 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1186 llvm::Function *ModuleInitFunction() override;
1191 Selector Sel, llvm::Value *Receiver,
1200 bool isCategoryImpl, llvm::Value *Receiver,
1204 llvm::Value *GetClass(CodeGenFunction &CGF,
1207 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override;
1212 llvm::Value *GetSelector(CodeGenFunction &CGF,
1215 llvm::Constant *GetEHType(QualType T) override;
1223 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1226 llvm::Constant *GetPropertyGetFunction() override;
1227 llvm::Constant *GetPropertySetFunction() override;
1228 llvm::Constant *GetOptimizedPropertySetFunction(bool atomic,
1230 llvm::Constant *GetGetStructFunction() override;
1231 llvm::Constant *GetSetStructFunction() override;
1232 llvm::Constant *GetCppAtomicObjectGetFunction() override;
1233 llvm::Constant *GetCppAtomicObjectSetFunction() override;
1234 llvm::Constant *EnumerationMutationFunction() override;
1243 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1246 llvm::Value *src, Address dst) override;
1248 llvm::Value *src, Address dest,
1251 llvm::Value *src, Address dest,
1252 llvm::Value *ivarOffset) override;
1254 llvm::Value *src, Address dest) override;
1257 llvm::Value *size) override;
1260 llvm::Value *BaseValue, const ObjCIvarDecl *Ivar,
1262 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1268 llvm::GlobalVariable *GetClassGlobal(StringRef Name, in GetClassGlobal()
1277 llvm::GlobalVariable* ObjCEmptyCacheVar;
1278 llvm::GlobalVariable* ObjCEmptyVtableVar;
1281 llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> SuperClassReferences;
1284 llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> MetaClassReferences;
1287 llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*> EHTypeReferences;
1291 llvm::DenseSet<Selector> VTableDispatchMethods;
1294 std::vector<llvm::GlobalValue*> DefinedMetaClasses;
1306 void AddModuleClassList(ArrayRef<llvm::GlobalValue *> Container,
1309 llvm::GlobalVariable * BuildClassRoTInitializer(unsigned flags,
1313 llvm::GlobalVariable * BuildClassMetaData(const std::string &ClassName,
1314 llvm::Constant *IsAGV,
1315 llvm::Constant *SuperClassGV,
1316 llvm::Constant *ClassRoGV,
1320 llvm::Constant *GetMethodConstant(const ObjCMethodDecl *MD);
1322 llvm::Constant *GetMethodDescriptionConstant(const ObjCMethodDecl *MD);
1326 llvm::Constant *EmitMethodList(Twine Name, StringRef Section,
1327 ArrayRef<llvm::Constant *> Methods);
1333 llvm::Constant *EmitIvarList(const ObjCImplementationDecl *ID);
1335 llvm::Constant *EmitIvarOffsetVar(const ObjCInterfaceDecl *ID,
1342 llvm::Constant *GetOrEmitProtocol(const ObjCProtocolDecl *PD) override;
1348 llvm::Constant *GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) override;
1352 llvm::Constant *EmitProtocolList(Twine Name,
1360 llvm::Value *Receiver,
1368 llvm::GlobalVariable *GetClassGlobal(StringRef Name,
1373 llvm::Value *EmitClassRef(CodeGenFunction &CGF,
1376 llvm::Value *EmitClassRefFromId(CodeGenFunction &CGF,
1380 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
1384 llvm::Value *EmitSuperClassRef(CodeGenFunction &CGF,
1389 llvm::Value *EmitMetaClassRef(CodeGenFunction &CGF,
1395 llvm::GlobalVariable * ObjCIvarOffsetVariable(
1401 llvm::Value *EmitSelector(CodeGenFunction &CGF, Selector Sel);
1406 llvm::Constant *GetInterfaceEHType(const ObjCInterfaceDecl *ID,
1455 llvm::Function *ModuleInitFunction() override;
1460 llvm::Value *Receiver,
1469 bool isCategoryImpl, llvm::Value *Receiver,
1473 llvm::Value *GetClass(CodeGenFunction &CGF,
1476 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel) override in GetSelector()
1483 llvm::Value *GetSelector(CodeGenFunction &CGF, in GetSelector()
1493 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
1496 llvm::Constant *GetEHType(QualType T) override;
1498 llvm::Constant *GetPropertyGetFunction() override { in GetPropertyGetFunction()
1501 llvm::Constant *GetPropertySetFunction() override { in GetPropertySetFunction()
1505 llvm::Constant *GetOptimizedPropertySetFunction(bool atomic, in GetOptimizedPropertySetFunction()
1510 llvm::Constant *GetSetStructFunction() override { in GetSetStructFunction()
1514 llvm::Constant *GetGetStructFunction() override { in GetGetStructFunction()
1518 llvm::Constant *GetCppAtomicObjectSetFunction() override { in GetCppAtomicObjectSetFunction()
1522 llvm::Constant *GetCppAtomicObjectGetFunction() override { in GetCppAtomicObjectGetFunction()
1526 llvm::Constant *EnumerationMutationFunction() override { in EnumerationMutationFunction()
1536 llvm::Value * EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
1539 llvm::Value *src, Address edst) override;
1541 llvm::Value *src, Address dest,
1544 llvm::Value *src, Address dest,
1545 llvm::Value *ivarOffset) override;
1547 llvm::Value *src, Address dest) override;
1550 llvm::Value *size) override;
1552 llvm::Value *BaseValue, const ObjCIvarDecl *Ivar,
1554 llvm::Value *EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
1562 llvm::BasicBlock *NullBB;
1566 void init(CodeGenFunction &CGF, llvm::Value *receiver) { in init()
1569 llvm::BasicBlock *callBB = CGF.createBasicBlock("msgSend.call"); in init()
1575 llvm::Value *isNull = CGF.Builder.CreateIsNull(receiver); in init()
1592 llvm::BasicBlock *contBB = nullptr; in complete()
1595 llvm::BasicBlock *callBB = CGF.Builder.GetInsertBlock(); in complete()
1632 llvm::Constant *null = CGF.CGM.EmitNullConstant(resultType); in complete()
1639 llvm::PHINode *phi = CGF.Builder.CreatePHI(null->getType(), 2); in complete()
1661 llvm::Type *scalarTy = callResult.first->getType(); in complete()
1662 llvm::Constant *scalarZero = llvm::Constant::getNullValue(scalarTy); in complete()
1665 llvm::PHINode *real = CGF.Builder.CreatePHI(scalarTy, 2); in complete()
1668 llvm::PHINode *imag = CGF.Builder.CreatePHI(scalarTy, 2); in complete()
1680 static llvm::Constant *getConstantGEP(llvm::LLVMContext &VMContext, in getConstantGEP()
1681 llvm::GlobalVariable *C, unsigned idx0, in getConstantGEP()
1683 llvm::Value *Idxs[] = { in getConstantGEP()
1684 llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), idx0), in getConstantGEP()
1685 llvm::ConstantInt::get(llvm::Type::getInt32Ty(VMContext), idx1) in getConstantGEP()
1687 return llvm::ConstantExpr::getGetElementPtr(C->getValueType(), C, Idxs); in getConstantGEP()
1711 llvm::Value *CGObjCMac::GetClass(CodeGenFunction &CGF, in GetClass()
1717 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, Selector Sel) { in GetSelector()
1723 llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, const ObjCMethodDecl in GetSelector()
1728 llvm::Constant *CGObjCMac::GetEHType(QualType T) { in GetEHType()
1785 llvm::Value *Receiver, in GenerateMessageSendSuper()
1794 llvm::Value *ReceiverAsObject = in GenerateMessageSendSuper()
1801 llvm::Value *Target; in GenerateMessageSendSuper()
1814 llvm::Constant *MetaClassPtr = EmitMetaClassRef(Class); in GenerateMessageSendSuper()
1815 llvm::Value *SuperPtr = in GenerateMessageSendSuper()
1817 llvm::Value *Super = in GenerateMessageSendSuper()
1824 llvm::Value *ClassPtr = EmitSuperClassRef(Class); in GenerateMessageSendSuper()
1830 llvm::Type *ClassTy = in GenerateMessageSendSuper()
1846 llvm::Value *Receiver, in GenerateMessageSend()
1869 llvm::Value *Sel, in EmitMessageSend()
1870 llvm::Value *Arg0, in EmitMessageSend()
1910 if (auto LI = dyn_cast<llvm::LoadInst>(Arg0->stripPointerCasts())) { in EmitMessageSend()
1911 llvm::Value *SelfAddr = CGF.GetAddrOfLocalVar(Self).getPointer(); in EmitMessageSend()
1921 llvm::Constant *Fn = nullptr; in EmitMessageSend()
1954 llvm::Instruction *CallSite; in EmitMessageSend()
1955 Fn = llvm::ConstantExpr::getBitCast(Fn, MSI.MessengerType); in EmitMessageSend()
1962 llvm::CallSite(CallSite).setDoesNotReturn(); in EmitMessageSend()
2036 llvm::SmallVector<IvarInfo, 8> IvarsInfo;
2060 llvm::Constant *buildBitmap(CGObjCCommonMac &CGObjC,
2061 llvm::SmallVectorImpl<unsigned char> &buffer);
2075 llvm::Constant *CGObjCCommonMac::BuildGCBlockLayout(CodeGenModule &CGM, in BuildGCBlockLayout()
2078 llvm::Constant *nullPtr = llvm::Constant::getNullValue(CGM.Int8PtrTy); in BuildGCBlockLayout()
2090 llvm::SmallVector<unsigned char, 32> buffer; in BuildGCBlockLayout()
2091 llvm::Constant *C = builder.buildBitmap(*this, buffer); in BuildGCBlockLayout()
2195 void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout, in BuildRCRecordLayout()
2325 llvm::Type *Ty = CGM.getTypes().ConvertType(QualType(RT, 0)); in BuildRCBlockVarRecordLayout()
2326 const llvm::StructLayout *RecLayout = in BuildRCBlockVarRecordLayout()
2327 CGM.getDataLayout().getStructLayout(cast<llvm::StructType>(Ty)); in BuildRCBlockVarRecordLayout()
2438 llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) { in getBitmapBlockLayout()
2439 llvm::Constant *nullPtr = llvm::Constant::getNullValue(CGM.Int8PtrTy); in getBitmapBlockLayout()
2448 llvm::array_pod_sort(RunSkipBlockVars.begin(), RunSkipBlockVars.end()); in getBitmapBlockLayout()
2527 return llvm::ConstantInt::get(CGM.IntPtrTy, Result); in getBitmapBlockLayout()
2579 llvm::GlobalVariable *Entry = CreateMetadataVar( in getBitmapBlockLayout()
2581 llvm::ConstantDataArray::getString(VMContext, BitMap, false), in getBitmapBlockLayout()
2586 llvm::Constant *CGObjCCommonMac::BuildRCBlockLayout(CodeGenModule &CGM, in BuildRCBlockLayout()
2600 const llvm::StructLayout *layout = in BuildRCBlockLayout()
2639 llvm::Constant *CGObjCCommonMac::BuildByrefLayout(CodeGen::CodeGenModule &CGM, in BuildByrefLayout()
2648 llvm::Constant *Result = getBitmapBlockLayout(true); in BuildByrefLayout()
2649 if (isa<llvm::ConstantInt>(Result)) in BuildByrefLayout()
2650 Result = llvm::ConstantExpr::getIntToPtr(Result, CGM.Int8PtrTy); in BuildByrefLayout()
2653 llvm::Constant *nullPtr = llvm::Constant::getNullValue(CGM.Int8PtrTy); in BuildByrefLayout()
2657 llvm::Value *CGObjCMac::GenerateProtocolRef(CodeGenFunction &CGF, in GenerateProtocolRef()
2663 return llvm::ConstantExpr::getBitCast(GetProtocolRef(PD), in GenerateProtocolRef()
2679 llvm::Constant *CGObjCCommonMac::GetProtocolRef(const ObjCProtocolDecl *PD) { in GetProtocolRef()
2686 llvm::Value *CGObjCCommonMac::EmitClassRefViaRuntime( in EmitClassRefViaRuntime()
2690 llvm::Constant *lookUpClassFn = ObjCTypes.getLookUpClassFn(); in EmitClassRefViaRuntime()
2692 llvm::Value *className = in EmitClassRefViaRuntime()
2700 llvm::CallInst *call = CGF.Builder.CreateCall(lookUpClassFn, className); in EmitClassRefViaRuntime()
2717 llvm::Constant *CGObjCMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) { in GetOrEmitProtocol()
2718 llvm::GlobalVariable *Entry = Protocols[PD->getIdentifier()]; in GetOrEmitProtocol()
2733 std::vector<llvm::Constant*> InstanceMethods, ClassMethods; in GetOrEmitProtocol()
2734 std::vector<llvm::Constant*> OptInstanceMethods, OptClassMethods; in GetOrEmitProtocol()
2735 std::vector<llvm::Constant*> MethodTypesExt, OptMethodTypesExt; in GetOrEmitProtocol()
2737 llvm::Constant *C = GetMethodDescriptionConstant(MD); in GetOrEmitProtocol()
2751 llvm::Constant *C = GetMethodDescriptionConstant(MD); in GetOrEmitProtocol()
2767 llvm::Constant *Values[] = { in GetOrEmitProtocol()
2779 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ProtocolTy, in GetOrEmitProtocol()
2787 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolTy, in GetOrEmitProtocol()
2788 false, llvm::GlobalValue::PrivateLinkage, in GetOrEmitProtocol()
2801 llvm::Constant *CGObjCMac::GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) { in GetOrEmitProtocolRef()
2802 llvm::GlobalVariable *&Entry = Protocols[PD->getIdentifier()]; in GetOrEmitProtocolRef()
2808 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolTy, in GetOrEmitProtocolRef()
2809 false, llvm::GlobalValue::PrivateLinkage, in GetOrEmitProtocolRef()
2829 llvm::Constant *
2831 ArrayRef<llvm::Constant*> OptInstanceMethods, in EmitProtocolExtension()
2832 ArrayRef<llvm::Constant*> OptClassMethods, in EmitProtocolExtension()
2833 ArrayRef<llvm::Constant*> MethodTypesExt) { in EmitProtocolExtension()
2836 llvm::Constant *Values[] = { in EmitProtocolExtension()
2837 llvm::ConstantInt::get(ObjCTypes.IntTy, Size), in EmitProtocolExtension()
2855 return llvm::Constant::getNullValue(ObjCTypes.ProtocolExtensionPtrTy); in EmitProtocolExtension()
2857 llvm::Constant *Init = in EmitProtocolExtension()
2858 llvm::ConstantStruct::get(ObjCTypes.ProtocolExtensionTy, Values); in EmitProtocolExtension()
2872 llvm::Constant *
2876 SmallVector<llvm::Constant *, 16> ProtocolRefs; in EmitProtocolList()
2883 return llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); in EmitProtocolList()
2886 ProtocolRefs.push_back(llvm::Constant::getNullValue(ObjCTypes.ProtocolPtrTy)); in EmitProtocolList()
2888 llvm::Constant *Values[3]; in EmitProtocolList()
2890 Values[0] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); in EmitProtocolList()
2891 Values[1] = llvm::ConstantInt::get(ObjCTypes.LongTy, in EmitProtocolList()
2894 llvm::ConstantArray::get(llvm::ArrayType::get(ObjCTypes.ProtocolPtrTy, in EmitProtocolList()
2898 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitProtocolList()
2899 llvm::GlobalVariable *GV = in EmitProtocolList()
2902 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.ProtocolListPtrTy); in EmitProtocolList()
2906 PushProtocolProperties(llvm::SmallPtrSet<const IdentifierInfo*,16> &PropertySet, in PushProtocolProperties()
2907 SmallVectorImpl<llvm::Constant *> &Properties, in PushProtocolProperties()
2921 llvm::Constant *Prop[] = { in PushProtocolProperties()
2925 Properties.push_back(llvm::ConstantStruct::get(ObjCTypes.PropertyTy, Prop)); in PushProtocolProperties()
2941 llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name, in EmitPropertyList()
2949 const llvm::Triple &Triple = CGM.getTarget().getTriple(); in EmitPropertyList()
2952 return llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); in EmitPropertyList()
2955 SmallVector<llvm::Constant *, 16> Properties; in EmitPropertyList()
2956 llvm::SmallPtrSet<const IdentifierInfo*, 16> PropertySet; in EmitPropertyList()
2959 llvm::Constant *Prop[] = {GetPropertyName(PD->getIdentifier()), in EmitPropertyList()
2961 Properties.push_back(llvm::ConstantStruct::get(ObjCTypes.PropertyTy, Prop)); in EmitPropertyList()
2995 return llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); in EmitPropertyList()
2999 llvm::Constant *Values[3]; in EmitPropertyList()
3000 Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, PropertySize); in EmitPropertyList()
3001 Values[1] = llvm::ConstantInt::get(ObjCTypes.IntTy, Properties.size()); in EmitPropertyList()
3002 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.PropertyTy, in EmitPropertyList()
3004 Values[2] = llvm::ConstantArray::get(AT, Properties); in EmitPropertyList()
3005 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitPropertyList()
3007 llvm::GlobalVariable *GV = in EmitPropertyList()
3013 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.PropertyListPtrTy); in EmitPropertyList()
3016 llvm::Constant *
3018 ArrayRef<llvm::Constant*> MethodTypes, in EmitProtocolMethodTypes()
3022 return llvm::Constant::getNullValue(ObjCTypes.Int8PtrPtrTy); in EmitProtocolMethodTypes()
3024 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.Int8PtrTy, in EmitProtocolMethodTypes()
3026 llvm::Constant *Init = llvm::ConstantArray::get(AT, MethodTypes); in EmitProtocolMethodTypes()
3028 llvm::GlobalVariable *GV = CreateMetadataVar( in EmitProtocolMethodTypes()
3031 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.Int8PtrPtrTy); in EmitProtocolMethodTypes()
3040 llvm::Constant *
3042 llvm::Constant *Desc[] = { in GetMethodDescriptionConstant()
3043 llvm::ConstantExpr::getBitCast(GetMethodVarName(MD->getSelector()), in GetMethodDescriptionConstant()
3050 return llvm::ConstantStruct::get(ObjCTypes.MethodDescriptionTy, in GetMethodDescriptionConstant()
3054 llvm::Constant *
3056 ArrayRef<llvm::Constant *> Methods) { in EmitMethodDescList()
3059 return llvm::Constant::getNullValue(ObjCTypes.MethodDescriptionListPtrTy); in EmitMethodDescList()
3061 llvm::Constant *Values[2]; in EmitMethodDescList()
3062 Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Methods.size()); in EmitMethodDescList()
3063 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.MethodDescriptionTy, in EmitMethodDescList()
3065 Values[1] = llvm::ConstantArray::get(AT, Methods); in EmitMethodDescList()
3066 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitMethodDescList()
3068 llvm::GlobalVariable *GV = in EmitMethodDescList()
3070 return llvm::ConstantExpr::getBitCast(GV, in EmitMethodDescList()
3098 llvm::raw_svector_ostream(ExtName) << Interface->getName() << '_' in GenerateCategory()
3101 SmallVector<llvm::Constant *, 16> InstanceMethods, ClassMethods; in GenerateCategory()
3110 llvm::Constant *Values[8]; in GenerateCategory()
3125 Values[4] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); in GenerateCategory()
3127 Values[5] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in GenerateCategory()
3136 Values[6] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); in GenerateCategory()
3137 Values[7] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); in GenerateCategory()
3140 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.CategoryTy, in GenerateCategory()
3143 llvm::GlobalVariable *GV = in GenerateCategory()
3263 llvm::Constant *Protocols = in GenerateClass()
3285 SmallVector<llvm::Constant *, 16> InstanceMethods, ClassMethods; in GenerateClass()
3299 if (llvm::Constant *C = GetMethodConstant(MD)) in GenerateClass()
3302 if (llvm::Constant *C = GetMethodConstant(MD)) in GenerateClass()
3307 llvm::Constant *Values[12]; in GenerateClass()
3314 llvm::ConstantExpr::getBitCast(GetClassName(Super->getObjCRuntimeNameAsString()), in GenerateClass()
3317 Values[ 1] = llvm::Constant::getNullValue(ObjCTypes.ClassPtrTy); in GenerateClass()
3321 Values[ 3] = llvm::ConstantInt::get(ObjCTypes.LongTy, 0); in GenerateClass()
3322 Values[ 4] = llvm::ConstantInt::get(ObjCTypes.LongTy, Flags); in GenerateClass()
3323 Values[ 5] = llvm::ConstantInt::get(ObjCTypes.LongTy, Size.getQuantity()); in GenerateClass()
3329 Values[ 8] = llvm::Constant::getNullValue(ObjCTypes.CachePtrTy); in GenerateClass()
3334 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassTy, in GenerateClass()
3340 llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name, true); in GenerateClass()
3356 llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID, in EmitMetaClass()
3357 llvm::Constant *Protocols, in EmitMetaClass()
3358 ArrayRef<llvm::Constant*> Methods) { in EmitMetaClass()
3365 llvm::Constant *Values[12]; in EmitMetaClass()
3371 llvm::ConstantExpr::getBitCast(GetClassName(Root->getObjCRuntimeNameAsString()), in EmitMetaClass()
3378 llvm::ConstantExpr::getBitCast(GetClassName(Super->getObjCRuntimeNameAsString()), in EmitMetaClass()
3381 Values[ 1] = llvm::Constant::getNullValue(ObjCTypes.ClassPtrTy); in EmitMetaClass()
3385 Values[ 3] = llvm::ConstantInt::get(ObjCTypes.LongTy, 0); in EmitMetaClass()
3386 Values[ 4] = llvm::ConstantInt::get(ObjCTypes.LongTy, Flags); in EmitMetaClass()
3387 Values[ 5] = llvm::ConstantInt::get(ObjCTypes.LongTy, Size); in EmitMetaClass()
3393 Values[ 8] = llvm::Constant::getNullValue(ObjCTypes.CachePtrTy); in EmitMetaClass()
3396 Values[10] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); in EmitMetaClass()
3400 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassTy, in EmitMetaClass()
3407 llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name, true); in EmitMetaClass()
3413 GV = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassTy, false, in EmitMetaClass()
3414 llvm::GlobalValue::PrivateLinkage, in EmitMetaClass()
3424 llvm::Constant *CGObjCMac::EmitMetaClassRef(const ObjCInterfaceDecl *ID) { in EmitMetaClassRef()
3435 llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name, true); in EmitMetaClassRef()
3437 GV = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassTy, false, in EmitMetaClassRef()
3438 llvm::GlobalValue::PrivateLinkage, nullptr, in EmitMetaClassRef()
3446 llvm::Value *CGObjCMac::EmitSuperClassRef(const ObjCInterfaceDecl *ID) { in EmitSuperClassRef()
3448 llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name, true); in EmitSuperClassRef()
3451 GV = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassTy, false, in EmitSuperClassRef()
3452 llvm::GlobalValue::PrivateLinkage, nullptr, in EmitSuperClassRef()
3471 llvm::Constant *
3478 llvm::Constant *Values[3]; in EmitClassExtension()
3479 Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in EmitClassExtension()
3481 llvm::Type *PtrTy = CGM.Int8PtrTy; in EmitClassExtension()
3482 Values[1] = llvm::Constant::getNullValue(PtrTy); in EmitClassExtension()
3495 return llvm::Constant::getNullValue(ObjCTypes.ClassExtensionPtrTy); in EmitClassExtension()
3497 llvm::Constant *Init = in EmitClassExtension()
3498 llvm::ConstantStruct::get(ObjCTypes.ClassExtensionTy, Values); in EmitClassExtension()
3516 llvm::Constant *CGObjCMac::EmitIvarList(const ObjCImplementationDecl *ID, in EmitIvarList()
3518 std::vector<llvm::Constant*> Ivars; in EmitIvarList()
3526 return llvm::Constant::getNullValue(ObjCTypes.IvarListPtrTy); in EmitIvarList()
3535 llvm::Constant *Ivar[] = { in EmitIvarList()
3538 llvm::ConstantInt::get(ObjCTypes.IntTy, in EmitIvarList()
3541 Ivars.push_back(llvm::ConstantStruct::get(ObjCTypes.IvarTy, Ivar)); in EmitIvarList()
3546 return llvm::Constant::getNullValue(ObjCTypes.IvarListPtrTy); in EmitIvarList()
3548 llvm::Constant *Values[2]; in EmitIvarList()
3549 Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Ivars.size()); in EmitIvarList()
3550 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.IvarTy, in EmitIvarList()
3552 Values[1] = llvm::ConstantArray::get(AT, Ivars); in EmitIvarList()
3553 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitIvarList()
3555 llvm::GlobalVariable *GV; in EmitIvarList()
3565 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.IvarListPtrTy); in EmitIvarList()
3585 llvm::Constant *CGObjCMac::GetMethodConstant(const ObjCMethodDecl *MD) { in GetMethodConstant()
3586 llvm::Function *Fn = GetMethodDefinition(MD); in GetMethodConstant()
3590 llvm::Constant *Method[] = { in GetMethodConstant()
3591 llvm::ConstantExpr::getBitCast(GetMethodVarName(MD->getSelector()), in GetMethodConstant()
3594 llvm::ConstantExpr::getBitCast(Fn, ObjCTypes.Int8PtrTy) in GetMethodConstant()
3596 return llvm::ConstantStruct::get(ObjCTypes.MethodTy, Method); in GetMethodConstant()
3599 llvm::Constant *CGObjCMac::EmitMethodList(Twine Name, StringRef Section, in EmitMethodList()
3600 ArrayRef<llvm::Constant *> Methods) { in EmitMethodList()
3603 return llvm::Constant::getNullValue(ObjCTypes.MethodListPtrTy); in EmitMethodList()
3605 llvm::Constant *Values[3]; in EmitMethodList()
3606 Values[0] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); in EmitMethodList()
3607 Values[1] = llvm::ConstantInt::get(ObjCTypes.IntTy, Methods.size()); in EmitMethodList()
3608 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.MethodTy, in EmitMethodList()
3610 Values[2] = llvm::ConstantArray::get(AT, Methods); in EmitMethodList()
3611 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitMethodList()
3613 llvm::GlobalVariable *GV = in EmitMethodList()
3615 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.MethodListPtrTy); in EmitMethodList()
3618 llvm::Function *CGObjCCommonMac::GenerateMethod(const ObjCMethodDecl *OMD, in GenerateMethod()
3624 llvm::FunctionType *MethodTy = in GenerateMethod()
3626 llvm::Function *Method = in GenerateMethod()
3627 llvm::Function::Create(MethodTy, in GenerateMethod()
3628 llvm::GlobalValue::InternalLinkage, in GenerateMethod()
3636 llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name, in CreateMetadataVar()
3637 llvm::Constant *Init, in CreateMetadataVar()
3641 llvm::Type *Ty = Init->getType(); in CreateMetadataVar()
3642 llvm::GlobalVariable *GV = in CreateMetadataVar()
3643 new llvm::GlobalVariable(CGM.getModule(), Ty, false, in CreateMetadataVar()
3644 llvm::GlobalValue::PrivateLinkage, Init, Name); in CreateMetadataVar()
3653 llvm::Function *CGObjCMac::ModuleInitFunction() { in ModuleInitFunction()
3659 llvm::Constant *CGObjCMac::GetPropertyGetFunction() { in GetPropertyGetFunction()
3663 llvm::Constant *CGObjCMac::GetPropertySetFunction() { in GetPropertySetFunction()
3667 llvm::Constant *CGObjCMac::GetOptimizedPropertySetFunction(bool atomic, in GetOptimizedPropertySetFunction()
3672 llvm::Constant *CGObjCMac::GetGetStructFunction() { in GetGetStructFunction()
3676 llvm::Constant *CGObjCMac::GetSetStructFunction() { in GetSetStructFunction()
3680 llvm::Constant *CGObjCMac::GetCppAtomicObjectGetFunction() { in GetCppAtomicObjectGetFunction()
3684 llvm::Constant *CGObjCMac::GetCppAtomicObjectSetFunction() { in GetCppAtomicObjectSetFunction()
3688 llvm::Constant *CGObjCMac::EnumerationMutationFunction() { in EnumerationMutationFunction()
3719 llvm::BasicBlock *FinallyCallExit = in Emit()
3721 llvm::BasicBlock *FinallyNoCallExit = in Emit()
3740 llvm::Value *CurCleanupDest = in Emit()
3756 llvm::Value *SyncArg = CGF.Builder.CreateLoad(SyncArgSlot); in Emit()
3764 SmallVector<llvm::Value*, 20> Locals;
3765 llvm::DenseSet<llvm::BasicBlock*> BlocksBeforeTry;
3767 llvm::InlineAsm *ReadHazard;
3768 llvm::InlineAsm *WriteHazard;
3770 llvm::FunctionType *GetAsmFnType();
3794 for (llvm::Function::iterator in FragileHazards()
3798 llvm::FunctionType *AsmFnTy = GetAsmFnType(); in FragileHazards()
3812 ReadHazard = llvm::InlineAsm::get(AsmFnTy, "", Constraint, true, false); in FragileHazards()
3826 WriteHazard = llvm::InlineAsm::get(AsmFnTy, "", Constraint, true, false); in FragileHazards()
3839 llvm::CallInst *call = Builder.CreateCall(ReadHazard, Locals); in emitReadHazard()
3852 for (llvm::Function::iterator in emitHazardsInNewBlocks()
3854 llvm::BasicBlock &BB = *FI; in emitHazardsInNewBlocks()
3858 for (llvm::BasicBlock::iterator in emitHazardsInNewBlocks()
3860 llvm::Instruction &I = *BI; in emitHazardsInNewBlocks()
3864 if (!isa<llvm::CallInst>(I) && !isa<llvm::InvokeInst>(I)) continue; in emitHazardsInNewBlocks()
3865 if (isa<llvm::IntrinsicInst>(I)) in emitHazardsInNewBlocks()
3870 llvm::CallSite CS(&I); in emitHazardsInNewBlocks()
3884 static void addIfPresent(llvm::DenseSet<llvm::Value*> &S, llvm::Value *V) { in addIfPresent()
3888 static void addIfPresent(llvm::DenseSet<llvm::Value*> &S, Address V) { in addIfPresent()
3894 llvm::DenseSet<llvm::Value*> AllocasToIgnore; in collectLocals()
3900 llvm::BasicBlock &Entry = CGF.CurFn->getEntryBlock(); in collectLocals()
3901 for (llvm::BasicBlock::iterator in collectLocals()
3903 if (isa<llvm::AllocaInst>(*I) && !AllocasToIgnore.count(&*I)) in collectLocals()
3907 llvm::FunctionType *FragileHazards::GetAsmFnType() { in GetAsmFnType()
3908 SmallVector<llvm::Type *, 16> tys(Locals.size()); in GetAsmFnType()
3911 return llvm::FunctionType::get(CGF.VoidTy, tys, false); in GetAsmFnType()
4047 llvm::Value *SyncArg = in EmitTryOrSynchronizedStmt()
4099 llvm::Constant *Zero = llvm::ConstantInt::get(CGF.Builder.getInt32Ty(), 0); in EmitTryOrSynchronizedStmt()
4100 llvm::Value *GEPIndexes[] = { Zero, Zero, Zero }; in EmitTryOrSynchronizedStmt()
4101 llvm::Value *SetJmpBuffer = CGF.Builder.CreateGEP( in EmitTryOrSynchronizedStmt()
4104 llvm::CallInst *SetJmpResult = CGF.EmitNounwindRuntimeCall( in EmitTryOrSynchronizedStmt()
4110 llvm::BasicBlock *TryBlock = CGF.createBasicBlock("try"); in EmitTryOrSynchronizedStmt()
4111 llvm::BasicBlock *TryHandler = CGF.createBasicBlock("try.handler"); in EmitTryOrSynchronizedStmt()
4112 llvm::Value *DidCatch = in EmitTryOrSynchronizedStmt()
4141 llvm::CallInst *Caught = in EmitTryOrSynchronizedStmt()
4153 llvm::BasicBlock *CatchBlock = nullptr; in EmitTryOrSynchronizedStmt()
4154 llvm::BasicBlock *CatchHandler = nullptr; in EmitTryOrSynchronizedStmt()
4168 llvm::CallInst *SetJmpResult = in EmitTryOrSynchronizedStmt()
4173 llvm::Value *Threw = in EmitTryOrSynchronizedStmt()
4238 llvm::Value *Class = EmitClassRef(CGF, IDecl); in EmitTryOrSynchronizedStmt()
4240 llvm::Value *matchArgs[] = { Class, Caught }; in EmitTryOrSynchronizedStmt()
4241 llvm::CallInst *Match = in EmitTryOrSynchronizedStmt()
4245 llvm::BasicBlock *MatchedBlock = CGF.createBasicBlock("match"); in EmitTryOrSynchronizedStmt()
4246 llvm::BasicBlock *NextCatchBlock = CGF.createBasicBlock("catch.next"); in EmitTryOrSynchronizedStmt()
4262 llvm::Value *Tmp = in EmitTryOrSynchronizedStmt()
4299 llvm::CallInst *NewCaught = in EmitTryOrSynchronizedStmt()
4325 llvm::Value *PropagatingExn; in EmitTryOrSynchronizedStmt()
4331 llvm::CallInst *Caught = in EmitTryOrSynchronizedStmt()
4348 llvm::Value *ExceptionAsObject; in EmitThrowStmt()
4351 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr); in EmitThrowStmt()
4372 llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF, in EmitObjCWeakRead()
4374 llvm::Type* DestTy = AddrWeakObj.getElementType(); in EmitObjCWeakRead()
4377 llvm::Value *read_weak = in EmitObjCWeakRead()
4388 llvm::Value *src, Address dst) { in EmitObjCWeakAssign()
4389 llvm::Type * SrcTy = src->getType(); in EmitObjCWeakAssign()
4390 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCWeakAssign()
4399 llvm::Value *args[] = { src, dst.getPointer() }; in EmitObjCWeakAssign()
4408 llvm::Value *src, Address dst, in EmitObjCGlobalAssign()
4410 llvm::Type * SrcTy = src->getType(); in EmitObjCGlobalAssign()
4411 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCGlobalAssign()
4420 llvm::Value *args[] = { src, dst.getPointer() }; in EmitObjCGlobalAssign()
4433 llvm::Value *src, Address dst, in EmitObjCIvarAssign()
4434 llvm::Value *ivarOffset) { in EmitObjCIvarAssign()
4436 llvm::Type * SrcTy = src->getType(); in EmitObjCIvarAssign()
4437 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCIvarAssign()
4446 llvm::Value *args[] = { src, dst.getPointer(), ivarOffset }; in EmitObjCIvarAssign()
4454 llvm::Value *src, Address dst) { in EmitObjCStrongCastAssign()
4455 llvm::Type * SrcTy = src->getType(); in EmitObjCStrongCastAssign()
4456 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCStrongCastAssign()
4465 llvm::Value *args[] = { src, dst.getPointer() }; in EmitObjCStrongCastAssign()
4473 llvm::Value *size) { in EmitGCMemmoveCollectable()
4476 llvm::Value *args[] = { DestPtr.getPointer(), SrcPtr.getPointer(), size }; in EmitGCMemmoveCollectable()
4484 llvm::Value *BaseValue, in EmitObjCValueForIvar()
4493 llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF, in EmitIvarOffset()
4497 return llvm::ConstantInt::get( in EmitIvarOffset()
4533 llvm::Module &Mod = CGM.getModule(); in EmitImageInfo()
4536 Mod.addModuleFlag(llvm::Module::Error, "Objective-C Version", ObjCABI); in EmitImageInfo()
4537 Mod.addModuleFlag(llvm::Module::Error, "Objective-C Image Info Version", in EmitImageInfo()
4539 Mod.addModuleFlag(llvm::Module::Error, "Objective-C Image Info Section", in EmitImageInfo()
4540 llvm::MDString::get(VMContext,Section)); in EmitImageInfo()
4544 Mod.addModuleFlag(llvm::Module::Override, in EmitImageInfo()
4548 Mod.addModuleFlag(llvm::Module::Error, in EmitImageInfo()
4554 Mod.addModuleFlag(llvm::Module::Error, "Objective-C GC Only", in EmitImageInfo()
4558 llvm::Metadata *Ops[2] = { in EmitImageInfo()
4559 llvm::MDString::get(VMContext, "Objective-C Garbage Collection"), in EmitImageInfo()
4560 llvm::ConstantAsMetadata::get(llvm::ConstantInt::get( in EmitImageInfo()
4561 llvm::Type::getInt32Ty(VMContext), eImageInfo_GarbageCollected))}; in EmitImageInfo()
4562 Mod.addModuleFlag(llvm::Module::Require, "Objective-C GC Only", in EmitImageInfo()
4563 llvm::MDNode::get(VMContext, Ops)); in EmitImageInfo()
4568 const llvm::Triple &Triple = CGM.getTarget().getTriple(); in EmitImageInfo()
4570 (Triple.getArch() == llvm::Triple::x86 || in EmitImageInfo()
4571 Triple.getArch() == llvm::Triple::x86_64)) in EmitImageInfo()
4572 Mod.addModuleFlag(llvm::Module::Error, "Objective-C Is Simulated", in EmitImageInfo()
4576 Mod.addModuleFlag(llvm::Module::Error, "Objective-C Class Properties", in EmitImageInfo()
4593 llvm::Constant *Values[] = { in EmitModuleInfo()
4594 llvm::ConstantInt::get(ObjCTypes.LongTy, ModuleVersion), in EmitModuleInfo()
4595 llvm::ConstantInt::get(ObjCTypes.LongTy, Size), in EmitModuleInfo()
4601 llvm::ConstantStruct::get(ObjCTypes.ModuleTy, Values), in EmitModuleInfo()
4606 llvm::Constant *CGObjCMac::EmitModuleSymbols() { in EmitModuleSymbols()
4612 return llvm::Constant::getNullValue(ObjCTypes.SymtabPtrTy); in EmitModuleSymbols()
4614 llvm::Constant *Values[5]; in EmitModuleSymbols()
4615 Values[0] = llvm::ConstantInt::get(ObjCTypes.LongTy, 0); in EmitModuleSymbols()
4616 Values[1] = llvm::Constant::getNullValue(ObjCTypes.SelectorPtrTy); in EmitModuleSymbols()
4617 Values[2] = llvm::ConstantInt::get(ObjCTypes.ShortTy, NumClasses); in EmitModuleSymbols()
4618 Values[3] = llvm::ConstantInt::get(ObjCTypes.ShortTy, NumCategories); in EmitModuleSymbols()
4622 SmallVector<llvm::Constant*, 8> Symbols(NumClasses + NumCategories); in EmitModuleSymbols()
4629 DefinedClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage); in EmitModuleSymbols()
4631 Symbols[i] = llvm::ConstantExpr::getBitCast(DefinedClasses[i], in EmitModuleSymbols()
4636 llvm::ConstantExpr::getBitCast(DefinedCategories[i], in EmitModuleSymbols()
4640 llvm::ConstantArray::get(llvm::ArrayType::get(ObjCTypes.Int8PtrTy, in EmitModuleSymbols()
4644 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitModuleSymbols()
4646 llvm::GlobalVariable *GV = CreateMetadataVar( in EmitModuleSymbols()
4649 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.SymtabPtrTy); in EmitModuleSymbols()
4652 llvm::Value *CGObjCMac::EmitClassRefFromId(CodeGenFunction &CGF, in EmitClassRefFromId()
4656 llvm::GlobalVariable *&Entry = ClassReferences[II]; in EmitClassRefFromId()
4659 llvm::Constant *Casted = in EmitClassRefFromId()
4660 llvm::ConstantExpr::getBitCast(GetClassName(II->getName()), in EmitClassRefFromId()
4671 llvm::Value *CGObjCMac::EmitClassRef(CodeGenFunction &CGF, in EmitClassRef()
4681 llvm::Value *CGObjCMac::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) { in EmitNSAutoreleasePoolClassRef()
4686 llvm::Value *CGObjCMac::EmitSelector(CodeGenFunction &CGF, Selector Sel) { in EmitSelector()
4693 llvm::GlobalVariable *&Entry = SelectorReferences[Sel]; in EmitSelectorAddr()
4695 llvm::Constant *Casted = in EmitSelectorAddr()
4696 llvm::ConstantExpr::getBitCast(GetMethodVarName(Sel), in EmitSelectorAddr()
4707 llvm::Constant *CGObjCCommonMac::GetClassName(StringRef RuntimeName) { in GetClassName()
4708 llvm::GlobalVariable *&Entry = ClassNames[RuntimeName]; in GetClassName()
4712 llvm::ConstantDataArray::getString(VMContext, RuntimeName), in GetClassName()
4719 llvm::Function *CGObjCCommonMac::GetMethodDefinition(const ObjCMethodDecl *MD) { in GetMethodDefinition()
4720 llvm::DenseMap<const ObjCMethodDecl*, llvm::Function*>::iterator in GetMethodDefinition()
4730 llvm::Constant *CGObjCCommonMac::GetIvarLayoutName(IdentifierInfo *Ident, in GetIvarLayoutName()
4732 return llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); in GetIvarLayoutName()
4830 llvm::Constant *IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC, in buildBitmap()
4831 llvm::SmallVectorImpl<unsigned char> &buffer) { in buildBitmap()
4844 llvm::array_pod_sort(IvarsInfo.begin(), IvarsInfo.end()); in buildBitmap()
4947 return llvm::ConstantPointerNull::get(CGM.Int8PtrTy); in buildBitmap()
4965 llvm::GlobalVariable *Entry = CGObjC.CreateMetadataVar( in buildBitmap()
4967 llvm::ConstantDataArray::get(CGM.getLLVMContext(), buffer), in buildBitmap()
4990 llvm::Constant *
4996 llvm::Type *PtrTy = CGM.Int8PtrTy; in BuildIvarLayout()
5000 return llvm::Constant::getNullValue(PtrTy); in BuildIvarLayout()
5039 return llvm::Constant::getNullValue(PtrTy); in BuildIvarLayout()
5049 return llvm::Constant::getNullValue(PtrTy); in BuildIvarLayout()
5051 llvm::SmallVector<unsigned char, 4> buffer; in BuildIvarLayout()
5052 llvm::Constant *C = builder.buildBitmap(*this, buffer); in BuildIvarLayout()
5063 llvm::Constant *CGObjCCommonMac::GetMethodVarName(Selector Sel) { in GetMethodVarName()
5064 llvm::GlobalVariable *&Entry = MethodVarNames[Sel]; in GetMethodVarName()
5070 llvm::ConstantDataArray::getString(VMContext, Sel.getAsString()), in GetMethodVarName()
5079 llvm::Constant *CGObjCCommonMac::GetMethodVarName(IdentifierInfo *ID) { in GetMethodVarName()
5083 llvm::Constant *CGObjCCommonMac::GetMethodVarType(const FieldDecl *Field) { in GetMethodVarType()
5087 llvm::GlobalVariable *&Entry = MethodVarTypes[TypeStr]; in GetMethodVarType()
5092 llvm::ConstantDataArray::getString(VMContext, TypeStr), in GetMethodVarType()
5100 llvm::Constant *CGObjCCommonMac::GetMethodVarType(const ObjCMethodDecl *D, in GetMethodVarType()
5106 llvm::GlobalVariable *&Entry = MethodVarTypes[TypeStr]; in GetMethodVarType()
5111 llvm::ConstantDataArray::getString(VMContext, TypeStr), in GetMethodVarType()
5120 llvm::Constant *CGObjCCommonMac::GetPropertyName(IdentifierInfo *Ident) { in GetPropertyName()
5121 llvm::GlobalVariable *&Entry = PropertyNames[Ident]; in GetPropertyName()
5126 llvm::ConstantDataArray::getString(VMContext, Ident->getName()), in GetPropertyName()
5134 llvm::Constant *
5145 llvm::raw_svector_ostream OS(Name); in GetNameForMethod()
5160 for (llvm::DenseMap<IdentifierInfo*, llvm::GlobalVariable*>::iterator in FinishModule()
5165 llvm::Constant *Values[5]; in FinishModule()
5166 Values[0] = llvm::Constant::getNullValue(ObjCTypes.ProtocolExtensionPtrTy); in FinishModule()
5168 Values[2] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListPtrTy); in FinishModule()
5170 llvm::Constant::getNullValue(ObjCTypes.MethodDescriptionListPtrTy); in FinishModule()
5171 I->second->setInitializer(llvm::ConstantStruct::get(ObjCTypes.ProtocolTy, in FinishModule()
5187 llvm::raw_svector_ostream OS(Asm); in FinishModule()
5188 for (llvm::SetVector<IdentifierInfo*>::iterator I = DefinedSymbols.begin(), in FinishModule()
5192 for (llvm::SetVector<IdentifierInfo*>::iterator I = LazySymbols.begin(), in FinishModule()
5229 if (CGM.getTarget().getTriple().getArch() == llvm::Triple::aarch64) in ObjCCommonTypesHelper()
5235 PtrObjectPtrTy = llvm::PointerType::getUnqual(ObjectPtrTy); in ObjCCommonTypesHelper()
5265 SuperTy = cast<llvm::StructType>(Types.ConvertType(SuperCTy)); in ObjCCommonTypesHelper()
5266 SuperPtrTy = llvm::PointerType::getUnqual(SuperTy); in ObjCCommonTypesHelper()
5272 PropertyTy = llvm::StructType::create("struct._prop_t", in ObjCCommonTypesHelper()
5281 llvm::StructType::create("struct._prop_list_t", IntTy, IntTy, in ObjCCommonTypesHelper()
5282 llvm::ArrayType::get(PropertyTy, 0), nullptr); in ObjCCommonTypesHelper()
5284 PropertyListPtrTy = llvm::PointerType::getUnqual(PropertyListTy); in ObjCCommonTypesHelper()
5291 MethodTy = llvm::StructType::create("struct._objc_method", in ObjCCommonTypesHelper()
5296 CacheTy = llvm::StructType::create(VMContext, "struct._objc_cache"); in ObjCCommonTypesHelper()
5297 CachePtrTy = llvm::PointerType::getUnqual(CacheTy); in ObjCCommonTypesHelper()
5307 llvm::StructType::create("struct._objc_method_description", in ObjCTypesHelper()
5314 MethodDescriptionListTy = llvm::StructType::create( in ObjCTypesHelper()
5316 llvm::ArrayType::get(MethodDescriptionTy, 0), nullptr); in ObjCTypesHelper()
5320 llvm::PointerType::getUnqual(MethodDescriptionListTy); in ObjCTypesHelper()
5333 llvm::StructType::create("struct._objc_protocol_extension", in ObjCTypesHelper()
5339 ProtocolExtensionPtrTy = llvm::PointerType::getUnqual(ProtocolExtensionTy); in ObjCTypesHelper()
5344 llvm::StructType::create(VMContext, "struct._objc_protocol"); in ObjCTypesHelper()
5347 llvm::StructType::create(VMContext, "struct._objc_protocol_list"); in ObjCTypesHelper()
5348 ProtocolListTy->setBody(llvm::PointerType::getUnqual(ProtocolListTy), in ObjCTypesHelper()
5350 llvm::ArrayType::get(ProtocolTy, 0), in ObjCTypesHelper()
5361 llvm::PointerType::getUnqual(ProtocolListTy), in ObjCTypesHelper()
5367 ProtocolListPtrTy = llvm::PointerType::getUnqual(ProtocolListTy); in ObjCTypesHelper()
5369 ProtocolPtrTy = llvm::PointerType::getUnqual(ProtocolTy); in ObjCTypesHelper()
5378 IvarTy = llvm::StructType::create("struct._objc_ivar", in ObjCTypesHelper()
5383 llvm::StructType::create(VMContext, "struct._objc_ivar_list"); in ObjCTypesHelper()
5384 IvarListPtrTy = llvm::PointerType::getUnqual(IvarListTy); in ObjCTypesHelper()
5388 llvm::StructType::create(VMContext, "struct._objc_method_list"); in ObjCTypesHelper()
5389 MethodListPtrTy = llvm::PointerType::getUnqual(MethodListTy); in ObjCTypesHelper()
5393 llvm::StructType::create("struct._objc_class_extension", in ObjCTypesHelper()
5395 ClassExtensionPtrTy = llvm::PointerType::getUnqual(ClassExtensionTy); in ObjCTypesHelper()
5397 ClassTy = llvm::StructType::create(VMContext, "struct._objc_class"); in ObjCTypesHelper()
5413 ClassTy->setBody(llvm::PointerType::getUnqual(ClassTy), in ObjCTypesHelper()
5414 llvm::PointerType::getUnqual(ClassTy), in ObjCTypesHelper()
5427 ClassPtrTy = llvm::PointerType::getUnqual(ClassTy); in ObjCTypesHelper()
5440 llvm::StructType::create("struct._objc_category", in ObjCTypesHelper()
5456 llvm::StructType::create("struct._objc_symtab", in ObjCTypesHelper()
5458 llvm::ArrayType::get(Int8PtrTy, 0), nullptr); in ObjCTypesHelper()
5459 SymtabPtrTy = llvm::PointerType::getUnqual(SymtabTy); in ObjCTypesHelper()
5468 llvm::StructType::create("struct._objc_module", in ObjCTypesHelper()
5477 llvm::Type *StackPtrTy = llvm::ArrayType::get(CGM.Int8PtrTy, 4); in ObjCTypesHelper()
5480 llvm::StructType::create("struct._objc_exception_data", in ObjCTypesHelper()
5481 llvm::ArrayType::get(CGM.Int32Ty,SetJmpBufferSize), in ObjCTypesHelper()
5493 llvm::StructType::create("struct.__method_list_t", IntTy, IntTy, in ObjCNonFragileABITypesHelper()
5494 llvm::ArrayType::get(MethodTy, 0), nullptr); in ObjCNonFragileABITypesHelper()
5496 MethodListnfABIPtrTy = llvm::PointerType::getUnqual(MethodListnfABITy); in ObjCNonFragileABITypesHelper()
5516 llvm::StructType::create(VMContext, "struct._objc_protocol_list"); in ObjCNonFragileABITypesHelper()
5519 llvm::StructType::create("struct._protocol_t", ObjectPtrTy, Int8PtrTy, in ObjCNonFragileABITypesHelper()
5520 llvm::PointerType::getUnqual(ProtocolListnfABITy), in ObjCNonFragileABITypesHelper()
5528 ProtocolnfABIPtrTy = llvm::PointerType::getUnqual(ProtocolnfABITy); in ObjCNonFragileABITypesHelper()
5535 llvm::ArrayType::get(ProtocolnfABIPtrTy, 0), in ObjCNonFragileABITypesHelper()
5539 ProtocolListnfABIPtrTy = llvm::PointerType::getUnqual(ProtocolListnfABITy); in ObjCNonFragileABITypesHelper()
5548 IvarnfABITy = llvm::StructType::create( in ObjCNonFragileABITypesHelper()
5549 "struct._ivar_t", llvm::PointerType::getUnqual(IvarOffsetVarTy), in ObjCNonFragileABITypesHelper()
5558 llvm::StructType::create("struct._ivar_list_t", IntTy, IntTy, in ObjCNonFragileABITypesHelper()
5559 llvm::ArrayType::get(IvarnfABITy, 0), nullptr); in ObjCNonFragileABITypesHelper()
5561 IvarListnfABIPtrTy = llvm::PointerType::getUnqual(IvarListnfABITy); in ObjCNonFragileABITypesHelper()
5578 ClassRonfABITy = llvm::StructType::create("struct._class_ro_t", in ObjCNonFragileABITypesHelper()
5587 llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy }; in ObjCNonFragileABITypesHelper()
5588 ImpnfABITy = llvm::FunctionType::get(ObjectPtrTy, params, false) in ObjCNonFragileABITypesHelper()
5599 ClassnfABITy = llvm::StructType::create(VMContext, "struct._class_t"); in ObjCNonFragileABITypesHelper()
5600 ClassnfABITy->setBody(llvm::PointerType::getUnqual(ClassnfABITy), in ObjCNonFragileABITypesHelper()
5601 llvm::PointerType::getUnqual(ClassnfABITy), in ObjCNonFragileABITypesHelper()
5603 llvm::PointerType::getUnqual(ImpnfABITy), in ObjCNonFragileABITypesHelper()
5604 llvm::PointerType::getUnqual(ClassRonfABITy), in ObjCNonFragileABITypesHelper()
5608 ClassnfABIPtrTy = llvm::PointerType::getUnqual(ClassnfABITy); in ObjCNonFragileABITypesHelper()
5620 CategorynfABITy = llvm::StructType::create("struct._category_t", in ObjCNonFragileABITypesHelper()
5655 MessageRefTy = cast<llvm::StructType>(Types.ConvertType(MessageRefCTy)); in ObjCNonFragileABITypesHelper()
5658 MessageRefPtrTy = llvm::PointerType::getUnqual(MessageRefTy); in ObjCNonFragileABITypesHelper()
5666 llvm::StructType::create("struct._super_message_ref_t", in ObjCNonFragileABITypesHelper()
5670 SuperMessageRefPtrTy = llvm::PointerType::getUnqual(SuperMessageRefTy); in ObjCNonFragileABITypesHelper()
5679 llvm::StructType::create("struct._objc_typeinfo", in ObjCNonFragileABITypesHelper()
5680 llvm::PointerType::getUnqual(Int8PtrTy), in ObjCNonFragileABITypesHelper()
5682 EHTypePtrTy = llvm::PointerType::getUnqual(EHTypeTy); in ObjCNonFragileABITypesHelper()
5685 llvm::Function *CGObjCNonFragileABIMac::ModuleInitFunction() { in ModuleInitFunction()
5692 ArrayRef<llvm::GlobalValue *> Container, StringRef SymbolName, in AddModuleClassList()
5699 SmallVector<llvm::Constant*, 8> Symbols(NumClasses); in AddModuleClassList()
5701 Symbols[i] = llvm::ConstantExpr::getBitCast(Container[i], in AddModuleClassList()
5703 llvm::Constant *Init = in AddModuleClassList()
5704 llvm::ConstantArray::get(llvm::ArrayType::get(ObjCTypes.Int8PtrTy, in AddModuleClassList()
5708 llvm::GlobalVariable *GV = in AddModuleClassList()
5709 new llvm::GlobalVariable(CGM.getModule(), Init->getType(), false, in AddModuleClassList()
5710 llvm::GlobalValue::PrivateLinkage, in AddModuleClassList()
5730 DefinedClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage); in FinishNonFragileABIModule()
5731 DefinedMetaClasses[i]->setLinkage(llvm::GlobalVariable::ExternalLinkage); in FinishNonFragileABIModule()
5828 llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer( in BuildClassRoTInitializer()
5834 llvm::Constant *Values[10]; // 11 for 64bit targets! in BuildClassRoTInitializer()
5845 Values[ 0] = llvm::ConstantInt::get(ObjCTypes.IntTy, flags); in BuildClassRoTInitializer()
5846 Values[ 1] = llvm::ConstantInt::get(ObjCTypes.IntTy, InstanceStart); in BuildClassRoTInitializer()
5847 Values[ 2] = llvm::ConstantInt::get(ObjCTypes.IntTy, InstanceSize); in BuildClassRoTInitializer()
5854 std::vector<llvm::Constant*> Methods; in BuildClassRoTInitializer()
5874 if (llvm::Constant *C = GetMethodConstant(MD)) in BuildClassRoTInitializer()
5877 if (llvm::Constant *C = GetMethodConstant(MD)) in BuildClassRoTInitializer()
5893 Values[ 7] = llvm::Constant::getNullValue(ObjCTypes.IvarListnfABIPtrTy); in BuildClassRoTInitializer()
5906 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassRonfABITy, in BuildClassRoTInitializer()
5908 llvm::GlobalVariable *CLASS_RO_GV = in BuildClassRoTInitializer()
5909 new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassRonfABITy, false, in BuildClassRoTInitializer()
5910 llvm::GlobalValue::PrivateLinkage, in BuildClassRoTInitializer()
5932 llvm::GlobalVariable *CGObjCNonFragileABIMac::BuildClassMetaData( in BuildClassMetaData()
5933 const std::string &ClassName, llvm::Constant *IsAGV, llvm::Constant *SuperClassGV, in BuildClassMetaData()
5934 llvm::Constant *ClassRoGV, bool HiddenVisibility, bool Weak) { in BuildClassMetaData()
5935 llvm::Constant *Values[] = { in BuildClassMetaData()
5943 Values[1] = llvm::Constant::getNullValue(ObjCTypes.ClassnfABIPtrTy); in BuildClassMetaData()
5945 Values[3] = llvm::Constant::getNullValue( in BuildClassMetaData()
5946 llvm::PointerType::getUnqual(ObjCTypes.ImpnfABITy)); in BuildClassMetaData()
5947 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassnfABITy, in BuildClassMetaData()
5949 llvm::GlobalVariable *GV = GetClassGlobal(ClassName, Weak); in BuildClassMetaData()
5955 GV->setVisibility(llvm::GlobalValue::HiddenVisibility); in BuildClassMetaData()
5983 ObjCEmptyCacheVar = new llvm::GlobalVariable( in GenerateClass()
5985 llvm::GlobalValue::ExternalLinkage, nullptr, "_objc_empty_cache"); in GenerateClass()
5988 const llvm::Triple &Triple = CGM.getTarget().getTriple(); in GenerateClass()
5990 ObjCEmptyVtableVar = new llvm::GlobalVariable( in GenerateClass()
5992 llvm::GlobalValue::ExternalLinkage, nullptr, "_objc_empty_vtable"); in GenerateClass()
6001 llvm::SmallString<64> ObjCMetaClassName(getMetaclassSymbolPrefix()); in GenerateClass()
6002 llvm::SmallString<64> ObjCClassName(getClassSymbolPrefix()); in GenerateClass()
6003 llvm::SmallString<64> TClassName; in GenerateClass()
6005 llvm::GlobalVariable *SuperClassGV, *IsAGV; in GenerateClass()
6049 llvm::GlobalVariable *CLASS_RO_GV = BuildClassRoTInitializer(flags, in GenerateClass()
6054 llvm::GlobalVariable *MetaTClass = BuildClassMetaData( in GenerateClass()
6099 llvm::GlobalVariable *ClassMD = in GenerateClass()
6125 llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF, in GenerateProtocolRef()
6131 llvm::Constant *Init = in GenerateProtocolRef()
6132 llvm::ConstantExpr::getBitCast(GetOrEmitProtocol(PD), in GenerateProtocolRef()
6140 llvm::GlobalVariable *PTGV = CGM.getModule().getGlobalVariable(ProtocolName); in GenerateProtocolRef()
6143 PTGV = new llvm::GlobalVariable( in GenerateProtocolRef()
6146 llvm::GlobalValue::WeakAnyLinkage, in GenerateProtocolRef()
6150 PTGV->setVisibility(llvm::GlobalValue::HiddenVisibility); in GenerateProtocolRef()
6172 llvm::SmallString<64> ExtCatName(Prefix); in GenerateCategory()
6177 llvm::SmallString<64> ExtClassName(getClassSymbolPrefix()); in GenerateCategory()
6180 llvm::Constant *Values[8]; in GenerateCategory()
6183 llvm::GlobalVariable *ClassGV = in GenerateCategory()
6187 std::vector<llvm::Constant*> Methods; in GenerateCategory()
6188 llvm::SmallString<64> MethodListName(Prefix); in GenerateCategory()
6221 llvm::raw_svector_ostream(ExtName) << Interface->getObjCRuntimeNameAsString() << "_$_" in GenerateCategory()
6233 Values[4] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListnfABIPtrTy); in GenerateCategory()
6234 Values[5] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); in GenerateCategory()
6235 Values[6] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy); in GenerateCategory()
6239 Values[7] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in GenerateCategory()
6241 llvm::Constant *Init = in GenerateCategory()
6242 llvm::ConstantStruct::get(ObjCTypes.CategorynfABITy, in GenerateCategory()
6244 llvm::GlobalVariable *GCATV in GenerateCategory()
6245 = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.CategorynfABITy, in GenerateCategory()
6247 llvm::GlobalValue::PrivateLinkage, in GenerateCategory()
6266 llvm::Constant *CGObjCNonFragileABIMac::GetMethodConstant( in GetMethodConstant()
6268 llvm::Function *Fn = GetMethodDefinition(MD); in GetMethodConstant()
6272 llvm::Constant *Method[] = { in GetMethodConstant()
6273 llvm::ConstantExpr::getBitCast(GetMethodVarName(MD->getSelector()), in GetMethodConstant()
6276 llvm::ConstantExpr::getBitCast(Fn, ObjCTypes.Int8PtrTy) in GetMethodConstant()
6278 return llvm::ConstantStruct::get(ObjCTypes.MethodTy, Method); in GetMethodConstant()
6288 llvm::Constant *
6290 ArrayRef<llvm::Constant *> Methods) { in EmitMethodList()
6293 return llvm::Constant::getNullValue(ObjCTypes.MethodListnfABIPtrTy); in EmitMethodList()
6295 llvm::Constant *Values[3]; in EmitMethodList()
6298 Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in EmitMethodList()
6300 Values[1] = llvm::ConstantInt::get(ObjCTypes.IntTy, Methods.size()); in EmitMethodList()
6301 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.MethodTy, in EmitMethodList()
6303 Values[2] = llvm::ConstantArray::get(AT, Methods); in EmitMethodList()
6304 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitMethodList()
6306 llvm::GlobalVariable *GV = in EmitMethodList()
6307 new llvm::GlobalVariable(CGM.getModule(), Init->getType(), false, in EmitMethodList()
6308 llvm::GlobalValue::PrivateLinkage, Init, Name); in EmitMethodList()
6312 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.MethodListnfABIPtrTy); in EmitMethodList()
6317 llvm::GlobalVariable *
6322 llvm::SmallString<64> Name("OBJC_IVAR_$_"); in ObjCIvarOffsetVariable()
6326 llvm::GlobalVariable *IvarOffsetGV = in ObjCIvarOffsetVariable()
6329 IvarOffsetGV = new llvm::GlobalVariable( in ObjCIvarOffsetVariable()
6331 llvm::GlobalValue::ExternalLinkage, nullptr, Name.str()); in ObjCIvarOffsetVariable()
6335 llvm::Constant *
6339 llvm::GlobalVariable *IvarOffsetGV = ObjCIvarOffsetVariable(ID, Ivar); in EmitIvarOffsetVar()
6341 llvm::ConstantInt::get(ObjCTypes.IvarOffsetVarTy, Offset)); in EmitIvarOffsetVar()
6350 IvarOffsetGV->setVisibility(llvm::GlobalValue::HiddenVisibility); in EmitIvarOffsetVar()
6352 IvarOffsetGV->setVisibility(llvm::GlobalValue::DefaultVisibility); in EmitIvarOffsetVar()
6374 llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList( in EmitIvarList()
6377 std::vector<llvm::Constant*> Ivars; in EmitIvarList()
6389 llvm::Constant *Ivar[5]; in EmitIvarList()
6394 llvm::Type *FieldTy = in EmitIvarList()
6399 Align = llvm::Log2_32(Align); in EmitIvarList()
6400 Ivar[3] = llvm::ConstantInt::get(ObjCTypes.IntTy, Align); in EmitIvarList()
6406 Ivar[4] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in EmitIvarList()
6407 Ivars.push_back(llvm::ConstantStruct::get(ObjCTypes.IvarnfABITy, Ivar)); in EmitIvarList()
6411 return llvm::Constant::getNullValue(ObjCTypes.IvarListnfABIPtrTy); in EmitIvarList()
6413 llvm::Constant *Values[3]; in EmitIvarList()
6415 Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in EmitIvarList()
6416 Values[1] = llvm::ConstantInt::get(ObjCTypes.IntTy, Ivars.size()); in EmitIvarList()
6417 llvm::ArrayType *AT = llvm::ArrayType::get(ObjCTypes.IvarnfABITy, in EmitIvarList()
6419 Values[2] = llvm::ConstantArray::get(AT, Ivars); in EmitIvarList()
6420 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitIvarList()
6422 llvm::GlobalVariable *GV = in EmitIvarList()
6423 new llvm::GlobalVariable(CGM.getModule(), Init->getType(), false, in EmitIvarList()
6424 llvm::GlobalValue::PrivateLinkage, in EmitIvarList()
6432 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.IvarListnfABIPtrTy); in EmitIvarList()
6435 llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef( in GetOrEmitProtocolRef()
6437 llvm::GlobalVariable *&Entry = Protocols[PD->getIdentifier()]; in GetOrEmitProtocolRef()
6444 new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy, in GetOrEmitProtocolRef()
6445 false, llvm::GlobalValue::ExternalLinkage, in GetOrEmitProtocolRef()
6472 llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol( in GetOrEmitProtocol()
6474 llvm::GlobalVariable *Entry = Protocols[PD->getIdentifier()]; in GetOrEmitProtocol()
6485 std::vector<llvm::Constant*> InstanceMethods, ClassMethods; in GetOrEmitProtocol()
6486 std::vector<llvm::Constant*> OptInstanceMethods, OptClassMethods; in GetOrEmitProtocol()
6487 std::vector<llvm::Constant*> MethodTypesExt, OptMethodTypesExt; in GetOrEmitProtocol()
6489 llvm::Constant *C = GetMethodDescriptionConstant(MD); in GetOrEmitProtocol()
6503 llvm::Constant *C = GetMethodDescriptionConstant(MD); in GetOrEmitProtocol()
6519 llvm::Constant *Values[13]; in GetOrEmitProtocol()
6521 Values[0] = llvm::Constant::getNullValue(ObjCTypes.ObjectPtrTy); in GetOrEmitProtocol()
6548 Values[8] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size); in GetOrEmitProtocol()
6549 Values[9] = llvm::Constant::getNullValue(ObjCTypes.IntTy); in GetOrEmitProtocol()
6554 Values[11] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); in GetOrEmitProtocol()
6560 llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ProtocolnfABITy, in GetOrEmitProtocol()
6565 Entry->setLinkage(llvm::GlobalValue::WeakAnyLinkage); in GetOrEmitProtocol()
6569 new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy, in GetOrEmitProtocol()
6570 false, llvm::GlobalValue::WeakAnyLinkage, Init, in GetOrEmitProtocol()
6577 Entry->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetOrEmitProtocol()
6582 llvm::GlobalVariable *PTGV = in GetOrEmitProtocol()
6583 new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABIPtrTy, in GetOrEmitProtocol()
6584 false, llvm::GlobalValue::WeakAnyLinkage, Entry, in GetOrEmitProtocol()
6589 PTGV->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetOrEmitProtocol()
6602 llvm::Constant *
6606 SmallVector<llvm::Constant *, 16> ProtocolRefs; in EmitProtocolList()
6610 return llvm::Constant::getNullValue(ObjCTypes.ProtocolListnfABIPtrTy); in EmitProtocolList()
6615 llvm::GlobalVariable *GV = in EmitProtocolList()
6618 return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.ProtocolListnfABIPtrTy); in EmitProtocolList()
6624 ProtocolRefs.push_back(llvm::Constant::getNullValue( in EmitProtocolList()
6627 llvm::Constant *Values[2]; in EmitProtocolList()
6629 llvm::ConstantInt::get(ObjCTypes.LongTy, ProtocolRefs.size() - 1); in EmitProtocolList()
6631 llvm::ConstantArray::get(llvm::ArrayType::get(ObjCTypes.ProtocolnfABIPtrTy, in EmitProtocolList()
6635 llvm::Constant *Init = llvm::ConstantStruct::getAnon(Values); in EmitProtocolList()
6636 GV = new llvm::GlobalVariable(CGM.getModule(), Init->getType(), false, in EmitProtocolList()
6637 llvm::GlobalValue::PrivateLinkage, in EmitProtocolList()
6643 return llvm::ConstantExpr::getBitCast(GV, in EmitProtocolList()
6654 llvm::Constant *
6656 llvm::Constant *Desc[3]; in GetMethodDescriptionConstant()
6658 llvm::ConstantExpr::getBitCast(GetMethodVarName(MD->getSelector()), in GetMethodDescriptionConstant()
6665 Desc[2] = llvm::Constant::getNullValue(ObjCTypes.Int8PtrTy); in GetMethodDescriptionConstant()
6666 return llvm::ConstantStruct::get(ObjCTypes.MethodTy, Desc); in GetMethodDescriptionConstant()
6678 llvm::Value *BaseValue, in EmitObjCValueForIvar()
6682 llvm::Value *Offset = EmitIvarOffset(CGF, ID, Ivar); in EmitObjCValueForIvar()
6687 llvm::Value *CGObjCNonFragileABIMac::EmitIvarOffset( in EmitIvarOffset()
6691 llvm::Value *IvarOffsetValue = ObjCIvarOffsetVariable(Interface, Ivar); in EmitIvarOffset()
6695 cast<llvm::LoadInst>(IvarOffsetValue) in EmitIvarOffset()
6697 llvm::MDNode::get(VMContext, None)); in EmitIvarOffset()
6736 llvm::Value *arg0, in EmitVTableMessageSend()
6766 llvm::Constant *fn = nullptr; in EmitVTableMessageSend()
6796 llvm::GlobalVariable *messageRef in EmitVTableMessageSend()
6800 llvm::Constant *values[] = { fn, GetMethodVarName(selector) }; in EmitVTableMessageSend()
6801 llvm::Constant *init = llvm::ConstantStruct::getAnon(values); in EmitVTableMessageSend()
6802 messageRef = new llvm::GlobalVariable(CGM.getModule(), in EmitVTableMessageSend()
6805 llvm::GlobalValue::WeakAnyLinkage, in EmitVTableMessageSend()
6808 messageRef->setVisibility(llvm::GlobalValue::HiddenVisibility); in EmitVTableMessageSend()
6834 llvm::Value *callee = CGF.Builder.CreateLoad(calleeAddr, "msgSend_fn"); in EmitVTableMessageSend()
6849 llvm::Value *Receiver, in GenerateMessageSend()
6863 llvm::GlobalVariable *
6865 llvm::GlobalValue::LinkageTypes L = in GetClassGlobal()
6866 Weak ? llvm::GlobalValue::ExternalWeakLinkage in GetClassGlobal()
6867 : llvm::GlobalValue::ExternalLinkage; in GetClassGlobal()
6869 llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name); in GetClassGlobal()
6872 GV = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassnfABITy, in GetClassGlobal()
6879 llvm::Value *CGObjCNonFragileABIMac::EmitClassRefFromId(CodeGenFunction &CGF, in EmitClassRefFromId()
6884 llvm::GlobalVariable *&Entry = ClassReferences[II]; in EmitClassRefFromId()
6889 llvm::GlobalVariable *ClassGV = GetClassGlobal(ClassName, Weak); in EmitClassRefFromId()
6890 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassnfABIPtrTy, in EmitClassRefFromId()
6891 false, llvm::GlobalValue::PrivateLinkage, in EmitClassRefFromId()
6900 llvm::Value *CGObjCNonFragileABIMac::EmitClassRef(CodeGenFunction &CGF, in EmitClassRef()
6910 llvm::Value *CGObjCNonFragileABIMac::EmitNSAutoreleasePoolClassRef( in EmitNSAutoreleasePoolClassRef()
6916 llvm::Value *
6920 llvm::GlobalVariable *&Entry = SuperClassReferences[ID->getIdentifier()]; in EmitSuperClassRef()
6923 llvm::SmallString<64> ClassName(getClassSymbolPrefix()); in EmitSuperClassRef()
6925 llvm::GlobalVariable *ClassGV = GetClassGlobal(ClassName.str(), in EmitSuperClassRef()
6927 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassnfABIPtrTy, in EmitSuperClassRef()
6928 false, llvm::GlobalValue::PrivateLinkage, in EmitSuperClassRef()
6940 llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(CodeGenFunction &CGF, in EmitMetaClassRef()
6944 llvm::GlobalVariable * &Entry = MetaClassReferences[ID->getIdentifier()]; in EmitMetaClassRef()
6946 llvm::SmallString<64> MetaClassName(getMetaclassSymbolPrefix()); in EmitMetaClassRef()
6948 llvm::GlobalVariable *MetaClassGV = in EmitMetaClassRef()
6951 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ClassnfABIPtrTy, in EmitMetaClassRef()
6952 false, llvm::GlobalValue::PrivateLinkage, in EmitMetaClassRef()
6965 llvm::Value *CGObjCNonFragileABIMac::GetClass(CodeGenFunction &CGF, in GetClass()
6968 llvm::SmallString<64> ClassName(getClassSymbolPrefix()); in GetClass()
6970 llvm::GlobalVariable *ClassGV = GetClassGlobal(ClassName.str(), true); in GetClass()
6988 llvm::Value *Receiver, in GenerateMessageSendSuper()
6999 llvm::Value *ReceiverAsObject = in GenerateMessageSendSuper()
7006 llvm::Value *Target; in GenerateMessageSendSuper()
7014 llvm::Type *ClassTy = in GenerateMessageSendSuper()
7030 llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CodeGenFunction &CGF, in EmitSelector()
7034 llvm::LoadInst* LI = CGF.Builder.CreateLoad(Addr); in EmitSelector()
7036 llvm::MDNode::get(VMContext, None)); in EmitSelector()
7042 llvm::GlobalVariable *&Entry = SelectorReferences[Sel]; in EmitSelectorAddr()
7046 llvm::Constant *Casted = in EmitSelectorAddr()
7047 llvm::ConstantExpr::getBitCast(GetMethodVarName(Sel), in EmitSelectorAddr()
7049 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.SelectorPtrTy, in EmitSelectorAddr()
7050 false, llvm::GlobalValue::PrivateLinkage, in EmitSelectorAddr()
7065 llvm::Value *src, in EmitObjCIvarAssign()
7067 llvm::Value *ivarOffset) { in EmitObjCIvarAssign()
7068 llvm::Type * SrcTy = src->getType(); in EmitObjCIvarAssign()
7069 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCIvarAssign()
7078 llvm::Value *args[] = { src, dst.getPointer(), ivarOffset }; in EmitObjCIvarAssign()
7087 llvm::Value *src, Address dst) { in EmitObjCStrongCastAssign()
7088 llvm::Type * SrcTy = src->getType(); in EmitObjCStrongCastAssign()
7089 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCStrongCastAssign()
7098 llvm::Value *args[] = { src, dst.getPointer() }; in EmitObjCStrongCastAssign()
7107 llvm::Value *Size) { in EmitGCMemmoveCollectable()
7110 llvm::Value *args[] = { DestPtr.getPointer(), SrcPtr.getPointer(), Size }; in EmitGCMemmoveCollectable()
7117 llvm::Value * CGObjCNonFragileABIMac::EmitObjCWeakRead( in EmitObjCWeakRead()
7120 llvm::Type *DestTy = AddrWeakObj.getElementType(); in EmitObjCWeakRead()
7122 llvm::Value *read_weak = in EmitObjCWeakRead()
7133 llvm::Value *src, Address dst) { in EmitObjCWeakAssign()
7134 llvm::Type * SrcTy = src->getType(); in EmitObjCWeakAssign()
7135 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCWeakAssign()
7144 llvm::Value *args[] = { src, dst.getPointer() }; in EmitObjCWeakAssign()
7153 llvm::Value *src, Address dst, in EmitObjCGlobalAssign()
7155 llvm::Type * SrcTy = src->getType(); in EmitObjCGlobalAssign()
7156 if (!isa<llvm::PointerType>(SrcTy)) { in EmitObjCGlobalAssign()
7165 llvm::Value *args[] = { src, dst.getPointer() }; in EmitObjCGlobalAssign()
7178 cast<llvm::Function>(ObjCTypes.getSyncEnterFn()), in EmitSynchronizedStmt()
7179 cast<llvm::Function>(ObjCTypes.getSyncExitFn())); in EmitSynchronizedStmt()
7182 llvm::Constant *
7187 llvm::Constant *IDEHType = in GetEHType()
7191 new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, in GetEHType()
7193 llvm::GlobalValue::ExternalLinkage, in GetEHType()
7210 cast<llvm::Function>(ObjCTypes.getObjCBeginCatchFn()), in EmitTryStmt()
7211 cast<llvm::Function>(ObjCTypes.getObjCEndCatchFn()), in EmitTryStmt()
7212 cast<llvm::Function>(ObjCTypes.getExceptionRethrowFn())); in EmitTryStmt()
7220 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr); in EmitThrowStmt()
7234 llvm::Constant *
7237 llvm::GlobalVariable * &Entry = EHTypeReferences[ID->getIdentifier()]; in GetInterfaceEHType()
7249 new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false, in GetInterfaceEHType()
7250 llvm::GlobalValue::ExternalLinkage, in GetInterfaceEHType()
7259 llvm::SmallString<64> ClassName(getClassSymbolPrefix()); in GetInterfaceEHType()
7262 llvm::GlobalVariable *VTableGV = in GetInterfaceEHType()
7265 VTableGV = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.Int8PtrTy, in GetInterfaceEHType()
7267 llvm::GlobalValue::ExternalLinkage, in GetInterfaceEHType()
7270 llvm::Value *VTableIdx = llvm::ConstantInt::get(CGM.Int32Ty, 2); in GetInterfaceEHType()
7272 llvm::Constant *Values[] = { in GetInterfaceEHType()
7273 llvm::ConstantExpr::getGetElementPtr(VTableGV->getValueType(), VTableGV, in GetInterfaceEHType()
7277 llvm::Constant *Init = in GetInterfaceEHType()
7278 llvm::ConstantStruct::get(ObjCTypes.EHTypeTy, Values); in GetInterfaceEHType()
7280 llvm::GlobalValue::LinkageTypes L = ForDefinition in GetInterfaceEHType()
7281 ? llvm::GlobalValue::ExternalLinkage in GetInterfaceEHType()
7282 : llvm::GlobalValue::WeakAnyLinkage; in GetInterfaceEHType()
7286 llvm::SmallString<64> EHTYPEName("OBJC_EHTYPE_$_"); in GetInterfaceEHType()
7288 Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false, in GetInterfaceEHType()
7296 Entry->setVisibility(llvm::GlobalValue::HiddenVisibility); in GetInterfaceEHType()