Lines Matching refs:llvm
49 std::vector<llvm::Type*> ArgTys;
51 llvm::Constant *Function;
63 llvm::Type *RetTy, ...) { in init()
70 while (llvm::Type *ArgTy = va_arg(Args, llvm::Type*)) in init()
78 operator llvm::Constant*() { in operator llvm::Constant*()
82 llvm::Type *RetTy = ArgTys.back(); in operator llvm::Constant*()
84 llvm::FunctionType *FTy = llvm::FunctionType::get(RetTy, ArgTys, false); in operator llvm::Constant*()
86 cast<llvm::Constant>(CGM->CreateRuntimeFunction(FTy, FunctionName)); in operator llvm::Constant*()
93 operator llvm::Function*() { in operator llvm::Function*()
94 return cast<llvm::Function>((llvm::Constant*)*this); in operator llvm::Function*()
106 llvm::Module &TheModule;
109 llvm::StructType *ObjCSuperTy;
112 llvm::PointerType *PtrToObjCSuperTy;
116 llvm::PointerType *SelectorTy;
119 llvm::IntegerType *Int8Ty;
122 llvm::PointerType *PtrToInt8Ty;
128 llvm::PointerType *IMPTy;
133 llvm::PointerType *IdTy;
136 llvm::PointerType *PtrToIdTy;
141 llvm::IntegerType *IntTy;
145 llvm::PointerType *PtrTy;
149 llvm::IntegerType *LongTy;
151 llvm::IntegerType *SizeTy;
153 llvm::IntegerType *IntPtrTy;
155 llvm::IntegerType *PtrDiffTy;
158 llvm::PointerType *PtrToIntTy;
160 llvm::Type *BoolTy;
162 llvm::IntegerType *Int32Ty;
164 llvm::IntegerType *Int64Ty;
172 llvm::Constant *MakeConstantString(const std::string &Str, in MakeConstantString()
174 llvm::Constant *ConstStr = CGM.GetAddrOfConstantCString(Str, Name.c_str()); in MakeConstantString()
175 return llvm::ConstantExpr::getGetElementPtr(ConstStr, Zeros); in MakeConstantString()
181 llvm::Constant *ExportUniqueString(const std::string &Str, in ExportUniqueString()
184 llvm::Constant *ConstStr = TheModule.getGlobalVariable(name); in ExportUniqueString()
186 llvm::Constant *value = llvm::ConstantDataArray::getString(VMContext,Str); in ExportUniqueString()
187 ConstStr = new llvm::GlobalVariable(TheModule, value->getType(), true, in ExportUniqueString()
188 llvm::GlobalValue::LinkOnceODRLinkage, value, prefix + Str); in ExportUniqueString()
190 return llvm::ConstantExpr::getGetElementPtr(ConstStr, Zeros); in ExportUniqueString()
195 llvm::GlobalVariable *MakeGlobal(llvm::StructType *Ty, in MakeGlobal()
196 ArrayRef<llvm::Constant *> V, in MakeGlobal()
198 llvm::GlobalValue::LinkageTypes linkage in MakeGlobal()
199 =llvm::GlobalValue::InternalLinkage) { in MakeGlobal()
200 llvm::Constant *C = llvm::ConstantStruct::get(Ty, V); in MakeGlobal()
201 return new llvm::GlobalVariable(TheModule, Ty, false, in MakeGlobal()
207 llvm::GlobalVariable *MakeGlobal(llvm::ArrayType *Ty, in MakeGlobal()
208 ArrayRef<llvm::Constant *> V, in MakeGlobal()
210 llvm::GlobalValue::LinkageTypes linkage in MakeGlobal()
211 =llvm::GlobalValue::InternalLinkage) { in MakeGlobal()
212 llvm::Constant *C = llvm::ConstantArray::get(Ty, V); in MakeGlobal()
213 return new llvm::GlobalVariable(TheModule, Ty, false, in MakeGlobal()
218 llvm::GlobalVariable *MakeGlobalArray(llvm::Type *Ty, in MakeGlobalArray()
219 ArrayRef<llvm::Constant *> V, in MakeGlobalArray()
221 llvm::GlobalValue::LinkageTypes linkage in MakeGlobalArray()
222 =llvm::GlobalValue::InternalLinkage) { in MakeGlobalArray()
223 llvm::ArrayType *ArrayTy = llvm::ArrayType::get(Ty, V.size()); in MakeGlobalArray()
227 llvm::Constant *MakePropertyEncodingString(const ObjCPropertyDecl *PD, in MakePropertyEncodingString()
240 return llvm::ConstantExpr::getGetElementPtr( in MakePropertyEncodingString()
246 void PushPropertyAttributes(std::vector<llvm::Constant*> &Fields, in PushPropertyAttributes()
258 Fields.push_back(llvm::ConstantInt::get(Int8Ty, attrs & 0xff)); in PushPropertyAttributes()
268 Fields.push_back(llvm::ConstantInt::get(Int8Ty, attrs & 0xff)); in PushPropertyAttributes()
270 Fields.push_back(llvm::ConstantInt::get(Int8Ty, 0)); in PushPropertyAttributes()
271 Fields.push_back(llvm::ConstantInt::get(Int8Ty, 0)); in PushPropertyAttributes()
276 llvm::Value* EnforceType(CGBuilderTy &B, llvm::Value *V, llvm::Type *Ty) { in EnforceType()
281 llvm::Constant *Zeros[2];
283 llvm::Constant *NULLPtr;
285 llvm::LLVMContext &VMContext;
291 llvm::GlobalAlias *ClassPtrAlias;
296 llvm::GlobalAlias *MetaClassPtrAlias;
298 std::vector<llvm::Constant*> Classes;
300 std::vector<llvm::Constant*> Categories;
303 std::vector<llvm::Constant*> ConstantStrings;
307 llvm::StringMap<llvm::Constant*> ObjCStrings;
309 llvm::StringMap<llvm::Constant*> ExistingProtocols;
315 typedef std::pair<std::string, llvm::GlobalAlias*> TypedSelector;
319 typedef llvm::DenseMap<Selector, SmallVector<TypedSelector, 2> >
386 llvm::Constant *GenerateIvarList(ArrayRef<llvm::Constant *> IvarNames,
387 ArrayRef<llvm::Constant *> IvarTypes,
388 ArrayRef<llvm::Constant *> IvarOffsets);
394 llvm::Constant *GenerateMethodList(const StringRef &ClassName,
397 ArrayRef<llvm::Constant *> MethodTypes,
402 llvm::Constant *GenerateEmptyProtocol(const std::string &ProtocolName);
405 llvm::Constant *GeneratePropertyList(const ObjCImplementationDecl *OID,
407 SmallVectorImpl<llvm::Constant*> &InstanceMethodTypes);
410 llvm::Constant *GenerateProtocolList(ArrayRef<std::string> Protocols);
417 llvm::Constant *GenerateClassStructure(
418 llvm::Constant *MetaClass,
419 llvm::Constant *SuperClass,
422 llvm::Constant *Version,
423 llvm::Constant *InstanceSize,
424 llvm::Constant *IVars,
425 llvm::Constant *Methods,
426 llvm::Constant *Protocols,
427 llvm::Constant *IvarOffsets,
428 llvm::Constant *Properties,
429 llvm::Constant *StrongIvarBitmap,
430 llvm::Constant *WeakIvarBitmap,
434 llvm::Constant *GenerateProtocolMethodList(
435 ArrayRef<llvm::Constant *> MethodNames,
436 ArrayRef<llvm::Constant *> MethodTypes);
439 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel,
442 llvm::GlobalVariable *ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
449 virtual llvm::Value *GetClassNamed(CodeGenFunction &CGF,
454 virtual llvm::Value *LookupIMP(CodeGenFunction &CGF,
455 llvm::Value *&Receiver,
456 llvm::Value *cmd,
457 llvm::MDNode *node,
462 virtual llvm::Value *LookupIMPSuper(CodeGenFunction &CGF,
463 llvm::Value *ObjCSuper,
464 llvm::Value *cmd,
477 llvm::Constant *MakeBitField(ArrayRef<bool> bits);
482 llvm::Constant *GenerateConstantString(const StringLiteral *) override;
487 llvm::Value *Receiver, const CallArgList &CallArgs,
494 bool isCategoryImpl, llvm::Value *Receiver,
497 llvm::Value *GetClass(CodeGenFunction &CGF,
499 llvm::Value *GetSelector(CodeGenFunction &CGF, Selector Sel,
501 llvm::Value *GetSelector(CodeGenFunction &CGF,
503 llvm::Constant *GetEHType(QualType T) override;
505 llvm::Function *GenerateMethod(const ObjCMethodDecl *OMD,
510 llvm::Value *GenerateProtocolRef(CodeGenFunction &CGF,
513 llvm::Function *ModuleInitFunction() override;
514 llvm::Constant *GetPropertyGetFunction() override;
515 llvm::Constant *GetPropertySetFunction() override;
516 llvm::Constant *GetOptimizedPropertySetFunction(bool atomic,
518 llvm::Constant *GetSetStructFunction() override;
519 llvm::Constant *GetGetStructFunction() override;
520 llvm::Constant *GetCppAtomicObjectGetFunction() override;
521 llvm::Constant *GetCppAtomicObjectSetFunction() override;
522 llvm::Constant *EnumerationMutationFunction() override;
531 llvm::Value * EmitObjCWeakRead(CodeGenFunction &CGF,
532 llvm::Value *AddrWeakObj) override;
534 llvm::Value *src, llvm::Value *dst) override;
536 llvm::Value *src, llvm::Value *dest,
538 void EmitObjCIvarAssign(CodeGenFunction &CGF, llvm::Value *src,
539 llvm::Value *dest, llvm::Value *ivarOffset) override;
541 llvm::Value *src, llvm::Value *dest) override;
542 void EmitGCMemmoveCollectable(CodeGenFunction &CGF, llvm::Value *DestPtr,
543 llvm::Value *SrcPtr,
544 llvm::Value *Size) override;
546 llvm::Value *BaseValue, const ObjCIvarDecl *Ivar,
548 llvm::Value *EmitIvarOffset(CodeGenFunction &CGF,
551 llvm::Value *EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) override;
552 llvm::Constant *BuildGCBlockLayout(CodeGenModule &CGM, in BuildGCBlockLayout()
556 llvm::Constant *BuildRCBlockLayout(CodeGenModule &CGM, in BuildRCBlockLayout()
561 llvm::Constant *BuildByrefLayout(CodeGenModule &CGM, QualType T) override { in BuildByrefLayout()
565 llvm::GlobalVariable *GetClassGlobal(const std::string &Name, in GetClassGlobal()
587 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver, in LookupIMP()
588 llvm::Value *cmd, llvm::MDNode *node, in LookupIMP()
591 llvm::Value *args[] = { in LookupIMP()
594 llvm::CallSite imp = CGF.EmitRuntimeCallOrInvoke(MsgLookupFn, args); in LookupIMP()
598 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, llvm::Value *ObjCSuper, in LookupIMPSuper()
599 llvm::Value *cmd, MessageSendInfo &MSI) override { in LookupIMPSuper()
601 llvm::Value *lookupArgs[] = {EnforceType(Builder, ObjCSuper, in LookupIMPSuper()
641 llvm::Type *SlotTy;
643 llvm::Constant *GetEHType(QualType T) override;
645 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver, in LookupIMP()
646 llvm::Value *cmd, llvm::MDNode *node, in LookupIMP()
649 llvm::Function *LookupFn = SlotLookupFn; in LookupIMP()
652 llvm::Value *ReceiverPtr = CGF.CreateTempAlloca(Receiver->getType()); in LookupIMP()
655 llvm::Value *self; in LookupIMP()
660 self = llvm::ConstantPointerNull::get(IdTy); in LookupIMP()
666 llvm::Value *args[] = { in LookupIMP()
670 llvm::CallSite slot = CGF.EmitRuntimeCallOrInvoke(LookupFn, args); in LookupIMP()
675 llvm::Value *imp = in LookupIMP()
683 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, llvm::Value *ObjCSuper, in LookupIMPSuper()
684 llvm::Value *cmd, in LookupIMPSuper()
687 llvm::Value *lookupArgs[] = {ObjCSuper, cmd}; in LookupIMPSuper()
689 llvm::CallInst *slot = in LookupIMPSuper()
699 llvm::StructType *SlotStructTy = llvm::StructType::get(PtrTy, in CGObjCGNUstep()
701 SlotTy = llvm::PointerType::getUnqual(SlotStructTy); in CGObjCGNUstep()
710 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
719 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
728 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNUstep()
746 llvm::Constant *GetCppAtomicObjectGetFunction() override { in GetCppAtomicObjectGetFunction()
753 llvm::Constant *GetCppAtomicObjectSetFunction() override { in GetCppAtomicObjectSetFunction()
760 llvm::Constant *GetOptimizedPropertySetFunction(bool atomic, in GetOptimizedPropertySetFunction()
794 llvm::Value *LookupIMP(CodeGenFunction &CGF, llvm::Value *&Receiver, in LookupIMP()
795 llvm::Value *cmd, llvm::MDNode *node, in LookupIMP()
798 llvm::Value *args[] = { in LookupIMP()
802 llvm::CallSite imp; in LookupIMP()
812 llvm::Value *LookupIMPSuper(CodeGenFunction &CGF, llvm::Value *ObjCSuper, in LookupIMPSuper()
813 llvm::Value *cmd, MessageSendInfo &MSI) override { in LookupIMPSuper()
815 llvm::Value *lookupArgs[] = {EnforceType(Builder, ObjCSuper, in LookupIMPSuper()
824 llvm::Value *GetClassNamed(CodeGenFunction &CGF, in GetClassNamed()
833 llvm::GlobalVariable *ClassSymbol = TheModule.getGlobalVariable(SymbolName); in GetClassNamed()
836 ClassSymbol = new llvm::GlobalVariable(TheModule, LongTy, false, in GetClassNamed()
837 llvm::GlobalValue::ExternalLinkage, in GetClassNamed()
868 llvm::GlobalVariable *ClassSymbol = TheModule.getGlobalVariable(symbolName); in EmitClassRef()
870 ClassSymbol = new llvm::GlobalVariable(TheModule, LongTy, false, in EmitClassRef()
871 llvm::GlobalValue::ExternalLinkage, in EmitClassRef()
874 new llvm::GlobalVariable(TheModule, ClassSymbol->getType(), true, in EmitClassRef()
875 llvm::GlobalValue::WeakAnyLinkage, ClassSymbol, symbolRef); in EmitClassRef()
898 IntTy = cast<llvm::IntegerType>( in CGObjCGNU()
900 LongTy = cast<llvm::IntegerType>( in CGObjCGNU()
902 SizeTy = cast<llvm::IntegerType>( in CGObjCGNU()
904 PtrDiffTy = cast<llvm::IntegerType>( in CGObjCGNU()
908 Int8Ty = llvm::Type::getInt8Ty(VMContext); in CGObjCGNU()
910 PtrToInt8Ty = llvm::PointerType::getUnqual(Int8Ty); in CGObjCGNU()
912 Zeros[0] = llvm::ConstantInt::get(LongTy, 0); in CGObjCGNU()
914 NULLPtr = llvm::ConstantPointerNull::get(PtrToInt8Ty); in CGObjCGNU()
920 SelectorTy = cast<llvm::PointerType>(CGM.getTypes().ConvertType(selTy)); in CGObjCGNU()
923 PtrToIntTy = llvm::PointerType::getUnqual(IntTy); in CGObjCGNU()
926 Int32Ty = llvm::Type::getInt32Ty(VMContext); in CGObjCGNU()
927 Int64Ty = llvm::Type::getInt64Ty(VMContext); in CGObjCGNU()
937 IdTy = cast<llvm::PointerType>(CGM.getTypes().ConvertType(ASTIdTy)); in CGObjCGNU()
941 PtrToIdTy = llvm::PointerType::getUnqual(IdTy); in CGObjCGNU()
943 ObjCSuperTy = llvm::StructType::get(IdTy, IdTy, nullptr); in CGObjCGNU()
944 PtrToObjCSuperTy = llvm::PointerType::getUnqual(ObjCSuperTy); in CGObjCGNU()
946 llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext); in CGObjCGNU()
974 llvm::Type *IMPArgs[] = { IdTy, SelectorTy }; in CGObjCGNU()
975 IMPTy = llvm::PointerType::getUnqual(llvm::FunctionType::get(IdTy, IMPArgs, in CGObjCGNU()
1013 llvm::Value *CGObjCGNU::GetClassNamed(CodeGenFunction &CGF, in GetClassNamed()
1016 llvm::Value *ClassName = CGM.GetAddrOfConstantCString(Name); in GetClassNamed()
1028 llvm::Constant *ClassLookupFn = in GetClassNamed()
1029 CGM.CreateRuntimeFunction(llvm::FunctionType::get(IdTy, PtrToInt8Ty, true), in GetClassNamed()
1036 llvm::Value *CGObjCGNU::GetClass(CodeGenFunction &CGF, in GetClass()
1040 llvm::Value *CGObjCGNU::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) { in EmitNSAutoreleasePoolClassRef()
1044 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, Selector Sel, in GetSelector()
1048 llvm::GlobalAlias *SelValue = nullptr; in GetSelector()
1058 SelValue = llvm::GlobalAlias::create( in GetSelector()
1059 SelectorTy->getElementType(), 0, llvm::GlobalValue::PrivateLinkage, in GetSelector()
1065 llvm::Value *tmp = CGF.CreateTempAlloca(SelValue->getType()); in GetSelector()
1072 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, Selector Sel, in GetSelector()
1077 llvm::Value *CGObjCGNU::GetSelector(CodeGenFunction &CGF, in GetSelector()
1084 llvm::Constant *CGObjCGNU::GetEHType(QualType T) { in GetEHType()
1105 llvm::Constant *CGObjCGNUstep::GetEHType(QualType T) { in GetEHType()
1115 llvm::Constant *IDEHType = in GetEHType()
1119 new llvm::GlobalVariable(CGM.getModule(), PtrToInt8Ty, in GetEHType()
1121 llvm::GlobalValue::ExternalLinkage, in GetEHType()
1123 return llvm::ConstantExpr::getBitCast(IDEHType, PtrToInt8Ty); in GetEHType()
1136 llvm::Constant *typeinfo = TheModule.getGlobalVariable(typeinfoName); in GetEHType()
1138 return llvm::ConstantExpr::getBitCast(typeinfo, PtrToInt8Ty); in GetEHType()
1146 llvm::Constant *Vtable = TheModule.getGlobalVariable(vtableName); in GetEHType()
1148 Vtable = new llvm::GlobalVariable(TheModule, PtrToInt8Ty, true, in GetEHType()
1149 llvm::GlobalValue::ExternalLinkage, in GetEHType()
1152 llvm::Constant *Two = llvm::ConstantInt::get(IntTy, 2); in GetEHType()
1153 Vtable = llvm::ConstantExpr::getGetElementPtr(Vtable, Two); in GetEHType()
1154 Vtable = llvm::ConstantExpr::getBitCast(Vtable, PtrToInt8Ty); in GetEHType()
1156 llvm::Constant *typeName = in GetEHType()
1159 std::vector<llvm::Constant*> fields; in GetEHType()
1162 llvm::Constant *TI = in GetEHType()
1163 MakeGlobal(llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, in GetEHType()
1165 llvm::GlobalValue::LinkOnceODRLinkage); in GetEHType()
1166 return llvm::ConstantExpr::getBitCast(TI, PtrToInt8Ty); in GetEHType()
1170 llvm::Constant *CGObjCGNU::GenerateConstantString(const StringLiteral *SL) { in GenerateConstantString()
1175 llvm::StringMap<llvm::Constant*>::iterator old = ObjCStrings.find(Str); in GenerateConstantString()
1186 llvm::Constant *isa = TheModule.getNamedGlobal(Sym); in GenerateConstantString()
1189 isa = new llvm::GlobalVariable(TheModule, IdTy, /* isConstant */false, in GenerateConstantString()
1190 llvm::GlobalValue::ExternalWeakLinkage, nullptr, Sym); in GenerateConstantString()
1192 isa = llvm::ConstantExpr::getBitCast(isa, PtrToIdTy); in GenerateConstantString()
1194 std::vector<llvm::Constant*> Ivars; in GenerateConstantString()
1197 Ivars.push_back(llvm::ConstantInt::get(IntTy, Str.size())); in GenerateConstantString()
1198 llvm::Constant *ObjCStr = MakeGlobal( in GenerateConstantString()
1199 llvm::StructType::get(PtrToIdTy, PtrToInt8Ty, IntTy, nullptr), in GenerateConstantString()
1201 ObjCStr = llvm::ConstantExpr::getBitCast(ObjCStr, PtrToInt8Ty); in GenerateConstantString()
1217 llvm::Value *Receiver, in GenerateMessageSendSuper()
1232 llvm::Value *cmd = GetSelector(CGF, Sel); in GenerateMessageSendSuper()
1243 llvm::Value *ReceiverClass = nullptr; in GenerateMessageSendSuper()
1245 llvm::Constant *classLookupFunction = nullptr; in GenerateMessageSendSuper()
1247 classLookupFunction = CGM.CreateRuntimeFunction(llvm::FunctionType::get( in GenerateMessageSendSuper()
1250 classLookupFunction = CGM.CreateRuntimeFunction(llvm::FunctionType::get( in GenerateMessageSendSuper()
1263 MetaClassPtrAlias = llvm::GlobalAlias::create( in GenerateMessageSendSuper()
1264 IdTy->getElementType(), 0, llvm::GlobalValue::InternalLinkage, in GenerateMessageSendSuper()
1270 ClassPtrAlias = llvm::GlobalAlias::create( in GenerateMessageSendSuper()
1271 IdTy->getElementType(), 0, llvm::GlobalValue::InternalLinkage, in GenerateMessageSendSuper()
1279 llvm::PointerType::getUnqual( in GenerateMessageSendSuper()
1280 llvm::StructType::get(IdTy, IdTy, nullptr))); in GenerateMessageSendSuper()
1286 llvm::StructType *ObjCSuperTy = llvm::StructType::get( in GenerateMessageSendSuper()
1288 llvm::Value *ObjCSuper = Builder.CreateAlloca(ObjCSuperTy); in GenerateMessageSendSuper()
1296 llvm::Value *imp = LookupIMPSuper(CGF, ObjCSuper, cmd, MSI); in GenerateMessageSendSuper()
1299 llvm::Value *impMD[] = { in GenerateMessageSendSuper()
1300 llvm::MDString::get(VMContext, Sel.getAsString()), in GenerateMessageSendSuper()
1301 llvm::MDString::get(VMContext, Class->getSuperClass()->getNameAsString()), in GenerateMessageSendSuper()
1302 llvm::ConstantInt::get(llvm::Type::getInt1Ty(VMContext), IsClassMessage) in GenerateMessageSendSuper()
1304 llvm::MDNode *node = llvm::MDNode::get(VMContext, impMD); in GenerateMessageSendSuper()
1306 llvm::Instruction *call; in GenerateMessageSendSuper()
1319 llvm::Value *Receiver, in GenerateMessageSend()
1350 llvm::BasicBlock *startBB = nullptr; in GenerateMessageSend()
1351 llvm::BasicBlock *messageBB = nullptr; in GenerateMessageSend()
1352 llvm::BasicBlock *continueBB = nullptr; in GenerateMessageSend()
1359 llvm::Value *isNil = Builder.CreateICmpEQ(Receiver, in GenerateMessageSend()
1360 llvm::Constant::getNullValue(Receiver->getType())); in GenerateMessageSend()
1365 IdTy = cast<llvm::PointerType>(CGM.getTypes().ConvertType(ASTIdTy)); in GenerateMessageSend()
1366 llvm::Value *cmd; in GenerateMessageSend()
1374 llvm::Value *impMD[] = { in GenerateMessageSend()
1375 llvm::MDString::get(VMContext, Sel.getAsString()), in GenerateMessageSend()
1376 llvm::MDString::get(VMContext, Class ? Class->getNameAsString() :""), in GenerateMessageSend()
1377 llvm::ConstantInt::get(llvm::Type::getInt1Ty(VMContext), in GenerateMessageSend()
1380 llvm::MDNode *node = llvm::MDNode::get(VMContext, impMD); in GenerateMessageSend()
1390 llvm::Value *imp; in GenerateMessageSend()
1402 imp = CGM.CreateRuntimeFunction(llvm::FunctionType::get(IdTy, IdTy, true), in GenerateMessageSend()
1407 imp = CGM.CreateRuntimeFunction(llvm::FunctionType::get(IdTy, IdTy, true), in GenerateMessageSend()
1410 imp = CGM.CreateRuntimeFunction(llvm::FunctionType::get(IdTy, IdTy, true), in GenerateMessageSend()
1420 llvm::Instruction *call; in GenerateMessageSend()
1431 llvm::Value *v = msgRet.getScalarVal(); in GenerateMessageSend()
1432 llvm::PHINode *phi = Builder.CreatePHI(v->getType(), 2); in GenerateMessageSend()
1434 phi->addIncoming(llvm::Constant::getNullValue(v->getType()), startBB); in GenerateMessageSend()
1437 llvm::Value *v = msgRet.getAggregateAddr(); in GenerateMessageSend()
1438 llvm::PHINode *phi = Builder.CreatePHI(v->getType(), 2); in GenerateMessageSend()
1439 llvm::PointerType *RetTy = cast<llvm::PointerType>(v->getType()); in GenerateMessageSend()
1440 llvm::AllocaInst *NullVal = in GenerateMessageSend()
1443 llvm::Constant::getNullValue(RetTy->getElementType())); in GenerateMessageSend()
1448 std::pair<llvm::Value*,llvm::Value*> v = msgRet.getComplexVal(); in GenerateMessageSend()
1449 llvm::PHINode *phi = Builder.CreatePHI(v.first->getType(), 2); in GenerateMessageSend()
1451 phi->addIncoming(llvm::Constant::getNullValue(v.first->getType()), in GenerateMessageSend()
1453 llvm::PHINode *phi2 = Builder.CreatePHI(v.second->getType(), 2); in GenerateMessageSend()
1455 phi2->addIncoming(llvm::Constant::getNullValue(v.second->getType()), in GenerateMessageSend()
1465 llvm::Constant *CGObjCGNU::
1469 ArrayRef<llvm::Constant *> MethodTypes, in GenerateMethodList()
1474 llvm::StructType *ObjCMethodTy = llvm::StructType::get( in GenerateMethodList()
1479 std::vector<llvm::Constant*> Methods; in GenerateMethodList()
1480 std::vector<llvm::Constant*> Elements; in GenerateMethodList()
1483 llvm::Constant *Method = in GenerateMethodList()
1488 llvm::Constant *C = MakeConstantString(MethodSels[i].getAsString()); in GenerateMethodList()
1491 Method = llvm::ConstantExpr::getBitCast(Method, in GenerateMethodList()
1494 Methods.push_back(llvm::ConstantStruct::get(ObjCMethodTy, Elements)); in GenerateMethodList()
1498 llvm::ArrayType *ObjCMethodArrayTy = llvm::ArrayType::get(ObjCMethodTy, in GenerateMethodList()
1500 llvm::Constant *MethodArray = llvm::ConstantArray::get(ObjCMethodArrayTy, in GenerateMethodList()
1504 llvm::StructType *ObjCMethodListTy = llvm::StructType::create(VMContext); in GenerateMethodList()
1505 llvm::Type *NextPtrTy = llvm::PointerType::getUnqual(ObjCMethodListTy); in GenerateMethodList()
1513 Methods.push_back(llvm::ConstantPointerNull::get( in GenerateMethodList()
1514 llvm::PointerType::getUnqual(ObjCMethodListTy))); in GenerateMethodList()
1515 Methods.push_back(llvm::ConstantInt::get(Int32Ty, MethodTypes.size())); in GenerateMethodList()
1523 llvm::Constant *CGObjCGNU::
1524 GenerateIvarList(ArrayRef<llvm::Constant *> IvarNames, in GenerateIvarList()
1525 ArrayRef<llvm::Constant *> IvarTypes, in GenerateIvarList()
1526 ArrayRef<llvm::Constant *> IvarOffsets) { in GenerateIvarList()
1530 llvm::StructType *ObjCIvarTy = llvm::StructType::get( in GenerateIvarList()
1535 std::vector<llvm::Constant*> Ivars; in GenerateIvarList()
1536 std::vector<llvm::Constant*> Elements; in GenerateIvarList()
1542 Ivars.push_back(llvm::ConstantStruct::get(ObjCIvarTy, Elements)); in GenerateIvarList()
1546 llvm::ArrayType *ObjCIvarArrayTy = llvm::ArrayType::get(ObjCIvarTy, in GenerateIvarList()
1551 Elements.push_back(llvm::ConstantInt::get(IntTy, (int)IvarNames.size())); in GenerateIvarList()
1552 Elements.push_back(llvm::ConstantArray::get(ObjCIvarArrayTy, Ivars)); in GenerateIvarList()
1554 llvm::StructType *ObjCIvarListTy = llvm::StructType::get(IntTy, in GenerateIvarList()
1563 llvm::Constant *CGObjCGNU::GenerateClassStructure( in GenerateClassStructure()
1564 llvm::Constant *MetaClass, in GenerateClassStructure()
1565 llvm::Constant *SuperClass, in GenerateClassStructure()
1568 llvm::Constant *Version, in GenerateClassStructure()
1569 llvm::Constant *InstanceSize, in GenerateClassStructure()
1570 llvm::Constant *IVars, in GenerateClassStructure()
1571 llvm::Constant *Methods, in GenerateClassStructure()
1572 llvm::Constant *Protocols, in GenerateClassStructure()
1573 llvm::Constant *IvarOffsets, in GenerateClassStructure()
1574 llvm::Constant *Properties, in GenerateClassStructure()
1575 llvm::Constant *StrongIvarBitmap, in GenerateClassStructure()
1576 llvm::Constant *WeakIvarBitmap, in GenerateClassStructure()
1585 llvm::StructType *ClassTy = llvm::StructType::get( in GenerateClassStructure()
1607 llvm::Constant *Zero = llvm::ConstantInt::get(LongTy, 0); in GenerateClassStructure()
1609 std::vector<llvm::Constant*> Elements; in GenerateClassStructure()
1610 Elements.push_back(llvm::ConstantExpr::getBitCast(MetaClass, PtrToInt8Ty)); in GenerateClassStructure()
1614 Elements.push_back(llvm::ConstantInt::get(LongTy, info)); in GenerateClassStructure()
1616 llvm::DataLayout td(&TheModule); in GenerateClassStructure()
1618 llvm::ConstantInt::get(LongTy, in GenerateClassStructure()
1628 Elements.push_back(llvm::ConstantExpr::getBitCast(Protocols, PtrTy)); in GenerateClassStructure()
1630 Elements.push_back(llvm::ConstantInt::get(LongTy, 1)); in GenerateClassStructure()
1641 llvm::GlobalVariable *ClassRef = TheModule.getNamedGlobal(ClassSym); in GenerateClassStructure()
1642 llvm::Constant *Class = MakeGlobal(ClassTy, Elements, ClassSym, in GenerateClassStructure()
1643 llvm::GlobalValue::ExternalLinkage); in GenerateClassStructure()
1645 ClassRef->replaceAllUsesWith(llvm::ConstantExpr::getBitCast(Class, in GenerateClassStructure()
1653 llvm::Constant *CGObjCGNU::
1654 GenerateProtocolMethodList(ArrayRef<llvm::Constant *> MethodNames, in GenerateProtocolMethodList()
1655 ArrayRef<llvm::Constant *> MethodTypes) { in GenerateProtocolMethodList()
1657 llvm::StructType *ObjCMethodDescTy = llvm::StructType::get( in GenerateProtocolMethodList()
1661 std::vector<llvm::Constant*> Methods; in GenerateProtocolMethodList()
1662 std::vector<llvm::Constant*> Elements; in GenerateProtocolMethodList()
1667 Methods.push_back(llvm::ConstantStruct::get(ObjCMethodDescTy, Elements)); in GenerateProtocolMethodList()
1669 llvm::ArrayType *ObjCMethodArrayTy = llvm::ArrayType::get(ObjCMethodDescTy, in GenerateProtocolMethodList()
1671 llvm::Constant *Array = llvm::ConstantArray::get(ObjCMethodArrayTy, in GenerateProtocolMethodList()
1673 llvm::StructType *ObjCMethodDescListTy = llvm::StructType::get( in GenerateProtocolMethodList()
1676 Methods.push_back(llvm::ConstantInt::get(IntTy, MethodNames.size())); in GenerateProtocolMethodList()
1682 llvm::Constant *CGObjCGNU::GenerateProtocolList(ArrayRef<std::string>Protocols){ in GenerateProtocolList()
1683 llvm::ArrayType *ProtocolArrayTy = llvm::ArrayType::get(PtrToInt8Ty, in GenerateProtocolList()
1685 llvm::StructType *ProtocolListTy = llvm::StructType::get( in GenerateProtocolList()
1690 std::vector<llvm::Constant*> Elements; in GenerateProtocolList()
1693 llvm::Constant *protocol = nullptr; in GenerateProtocolList()
1694 llvm::StringMap<llvm::Constant*>::iterator value = in GenerateProtocolList()
1701 llvm::Constant *Ptr = llvm::ConstantExpr::getBitCast(protocol, in GenerateProtocolList()
1705 llvm::Constant * ProtocolArray = llvm::ConstantArray::get(ProtocolArrayTy, in GenerateProtocolList()
1709 Elements.push_back(llvm::ConstantInt::get(LongTy, Protocols.size())); in GenerateProtocolList()
1714 llvm::Value *CGObjCGNU::GenerateProtocolRef(CodeGenFunction &CGF, in GenerateProtocolRef()
1716 llvm::Value *protocol = ExistingProtocols[PD->getNameAsString()]; in GenerateProtocolRef()
1717 llvm::Type *T = in GenerateProtocolRef()
1719 return CGF.Builder.CreateBitCast(protocol, llvm::PointerType::getUnqual(T)); in GenerateProtocolRef()
1722 llvm::Constant *CGObjCGNU::GenerateEmptyProtocol( in GenerateEmptyProtocol()
1725 SmallVector<llvm::Constant*, 0> EmptyConstantVector; in GenerateEmptyProtocol()
1727 llvm::Constant *ProtocolList = GenerateProtocolList(EmptyStringVector); in GenerateEmptyProtocol()
1728 llvm::Constant *MethodList = in GenerateEmptyProtocol()
1732 llvm::StructType *ProtocolTy = llvm::StructType::get(IdTy, in GenerateEmptyProtocol()
1740 std::vector<llvm::Constant*> Elements; in GenerateEmptyProtocol()
1743 Elements.push_back(llvm::ConstantExpr::getIntToPtr( in GenerateEmptyProtocol()
1744 llvm::ConstantInt::get(Int32Ty, ProtocolVersion), IdTy)); in GenerateEmptyProtocol()
1765 SmallVector<llvm::Constant*, 16> InstanceMethodNames; in GenerateProtocol()
1766 SmallVector<llvm::Constant*, 16> InstanceMethodTypes; in GenerateProtocol()
1767 SmallVector<llvm::Constant*, 16> OptionalInstanceMethodNames; in GenerateProtocol()
1768 SmallVector<llvm::Constant*, 16> OptionalInstanceMethodTypes; in GenerateProtocol()
1783 SmallVector<llvm::Constant*, 16> ClassMethodNames; in GenerateProtocol()
1784 SmallVector<llvm::Constant*, 16> ClassMethodTypes; in GenerateProtocol()
1785 SmallVector<llvm::Constant*, 16> OptionalClassMethodNames; in GenerateProtocol()
1786 SmallVector<llvm::Constant*, 16> OptionalClassMethodTypes; in GenerateProtocol()
1801 llvm::Constant *ProtocolList = GenerateProtocolList(Protocols); in GenerateProtocol()
1802 llvm::Constant *InstanceMethodList = in GenerateProtocol()
1804 llvm::Constant *ClassMethodList = in GenerateProtocol()
1806 llvm::Constant *OptionalInstanceMethodList = in GenerateProtocol()
1809 llvm::Constant *OptionalClassMethodList = in GenerateProtocol()
1818 llvm::StructType *PropertyMetadataTy = llvm::StructType::get( in GenerateProtocol()
1821 std::vector<llvm::Constant*> Properties; in GenerateProtocol()
1822 std::vector<llvm::Constant*> OptionalProperties; in GenerateProtocol()
1827 std::vector<llvm::Constant*> Fields; in GenerateProtocol()
1835 llvm::Constant *TypeEncoding = MakeConstantString(TypeStr); in GenerateProtocol()
1846 llvm::Constant *TypeEncoding = MakeConstantString(TypeStr); in GenerateProtocol()
1855 OptionalProperties.push_back(llvm::ConstantStruct::get(PropertyMetadataTy, Fields)); in GenerateProtocol()
1857 Properties.push_back(llvm::ConstantStruct::get(PropertyMetadataTy, Fields)); in GenerateProtocol()
1860 llvm::Constant *PropertyArray = llvm::ConstantArray::get( in GenerateProtocol()
1861 llvm::ArrayType::get(PropertyMetadataTy, Properties.size()), Properties); in GenerateProtocol()
1862 llvm::Constant* PropertyListInitFields[] = in GenerateProtocol()
1863 {llvm::ConstantInt::get(IntTy, Properties.size()), NULLPtr, PropertyArray}; in GenerateProtocol()
1865 llvm::Constant *PropertyListInit = in GenerateProtocol()
1866 llvm::ConstantStruct::getAnon(PropertyListInitFields); in GenerateProtocol()
1867 llvm::Constant *PropertyList = new llvm::GlobalVariable(TheModule, in GenerateProtocol()
1868 PropertyListInit->getType(), false, llvm::GlobalValue::InternalLinkage, in GenerateProtocol()
1871 llvm::Constant *OptionalPropertyArray = in GenerateProtocol()
1872 llvm::ConstantArray::get(llvm::ArrayType::get(PropertyMetadataTy, in GenerateProtocol()
1874 llvm::Constant* OptionalPropertyListInitFields[] = { in GenerateProtocol()
1875 llvm::ConstantInt::get(IntTy, OptionalProperties.size()), NULLPtr, in GenerateProtocol()
1878 llvm::Constant *OptionalPropertyListInit = in GenerateProtocol()
1879 llvm::ConstantStruct::getAnon(OptionalPropertyListInitFields); in GenerateProtocol()
1880 llvm::Constant *OptionalPropertyList = new llvm::GlobalVariable(TheModule, in GenerateProtocol()
1882 llvm::GlobalValue::InternalLinkage, OptionalPropertyListInit, in GenerateProtocol()
1887 llvm::StructType *ProtocolTy = llvm::StructType::get(IdTy, in GenerateProtocol()
1897 std::vector<llvm::Constant*> Elements; in GenerateProtocol()
1900 Elements.push_back(llvm::ConstantExpr::getIntToPtr( in GenerateProtocol()
1901 llvm::ConstantInt::get(Int32Ty, ProtocolVersion), IdTy)); in GenerateProtocol()
1911 llvm::ConstantExpr::getBitCast(MakeGlobal(ProtocolTy, Elements, in GenerateProtocol()
1917 SmallVector<llvm::Constant*, 1> MethodTypes; in GenerateProtocolHolderCategory()
1919 std::vector<llvm::Constant*> Elements; in GenerateProtocolHolderCategory()
1925 Elements.push_back(llvm::ConstantExpr::getBitCast(GenerateMethodList( in GenerateProtocolHolderCategory()
1928 Elements.push_back(llvm::ConstantExpr::getBitCast(GenerateMethodList( in GenerateProtocolHolderCategory()
1931 llvm::ArrayType *ProtocolArrayTy = llvm::ArrayType::get(PtrTy, in GenerateProtocolHolderCategory()
1933 llvm::StructType *ProtocolListTy = llvm::StructType::get( in GenerateProtocolHolderCategory()
1938 std::vector<llvm::Constant*> ProtocolElements; in GenerateProtocolHolderCategory()
1939 for (llvm::StringMapIterator<llvm::Constant*> iter = in GenerateProtocolHolderCategory()
1942 llvm::Constant *Ptr = llvm::ConstantExpr::getBitCast(iter->getValue(), in GenerateProtocolHolderCategory()
1946 llvm::Constant * ProtocolArray = llvm::ConstantArray::get(ProtocolArrayTy, in GenerateProtocolHolderCategory()
1950 ProtocolElements.push_back(llvm::ConstantInt::get(LongTy, in GenerateProtocolHolderCategory()
1953 Elements.push_back(llvm::ConstantExpr::getBitCast(MakeGlobal(ProtocolListTy, in GenerateProtocolHolderCategory()
1955 Categories.push_back(llvm::ConstantExpr::getBitCast( in GenerateProtocolHolderCategory()
1956 MakeGlobal(llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, in GenerateProtocolHolderCategory()
1971 llvm::Constant *CGObjCGNU::MakeBitField(ArrayRef<bool> bits) { in MakeBitField()
1979 return llvm::ConstantInt::get(IntPtrTy, val); in MakeBitField()
1981 SmallVector<llvm::Constant *, 8> values; in MakeBitField()
1989 values.push_back(llvm::ConstantInt::get(Int32Ty, word)); in MakeBitField()
1991 llvm::ArrayType *arrayTy = llvm::ArrayType::get(Int32Ty, values.size()); in MakeBitField()
1992 llvm::Constant *array = llvm::ConstantArray::get(arrayTy, values); in MakeBitField()
1993 llvm::Constant *fields[2] = { in MakeBitField()
1994 llvm::ConstantInt::get(Int32Ty, values.size()), in MakeBitField()
1996 llvm::Constant *GS = MakeGlobal(llvm::StructType::get(Int32Ty, arrayTy, in MakeBitField()
1998 llvm::Constant *ptr = llvm::ConstantExpr::getPtrToInt(GS, IntPtrTy); in MakeBitField()
2007 SmallVector<llvm::Constant*, 16> InstanceMethodTypes; in GenerateCategory()
2017 SmallVector<llvm::Constant*, 16> ClassMethodTypes; in GenerateCategory()
2033 std::vector<llvm::Constant*> Elements; in GenerateCategory()
2037 Elements.push_back(llvm::ConstantExpr::getBitCast(GenerateMethodList( in GenerateCategory()
2041 Elements.push_back(llvm::ConstantExpr::getBitCast(GenerateMethodList( in GenerateCategory()
2045 Elements.push_back(llvm::ConstantExpr::getBitCast( in GenerateCategory()
2047 Categories.push_back(llvm::ConstantExpr::getBitCast( in GenerateCategory()
2048 MakeGlobal(llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, in GenerateCategory()
2052 llvm::Constant *CGObjCGNU::GeneratePropertyList(const ObjCImplementationDecl *OID, in GeneratePropertyList()
2054 SmallVectorImpl<llvm::Constant*> &InstanceMethodTypes) { in GeneratePropertyList()
2058 llvm::StructType *PropertyMetadataTy = llvm::StructType::get( in GeneratePropertyList()
2061 std::vector<llvm::Constant*> Properties; in GeneratePropertyList()
2066 std::vector<llvm::Constant*> Fields; in GeneratePropertyList()
2078 llvm::Constant *TypeEncoding = MakeConstantString(TypeStr); in GeneratePropertyList()
2092 llvm::Constant *TypeEncoding = MakeConstantString(TypeStr); in GeneratePropertyList()
2103 Properties.push_back(llvm::ConstantStruct::get(PropertyMetadataTy, Fields)); in GeneratePropertyList()
2105 llvm::ArrayType *PropertyArrayTy = in GeneratePropertyList()
2106 llvm::ArrayType::get(PropertyMetadataTy, Properties.size()); in GeneratePropertyList()
2107 llvm::Constant *PropertyArray = llvm::ConstantArray::get(PropertyArrayTy, in GeneratePropertyList()
2109 llvm::Constant* PropertyListInitFields[] = in GeneratePropertyList()
2110 {llvm::ConstantInt::get(IntTy, Properties.size()), NULLPtr, PropertyArray}; in GeneratePropertyList()
2112 llvm::Constant *PropertyListInit = in GeneratePropertyList()
2113 llvm::ConstantStruct::getAnon(PropertyListInitFields); in GeneratePropertyList()
2114 return new llvm::GlobalVariable(TheModule, PropertyListInit->getType(), false, in GeneratePropertyList()
2115 llvm::GlobalValue::InternalLinkage, PropertyListInit, in GeneratePropertyList()
2147 if (llvm::GlobalVariable *symbol = in GenerateClass()
2149 symbol->setInitializer(llvm::ConstantInt::get(LongTy, 0)); in GenerateClass()
2151 new llvm::GlobalVariable(TheModule, LongTy, false, in GenerateClass()
2152 llvm::GlobalValue::ExternalLinkage, llvm::ConstantInt::get(LongTy, 0), in GenerateClass()
2161 SmallVector<llvm::Constant*, 16> IvarNames; in GenerateClass()
2162 SmallVector<llvm::Constant*, 16> IvarTypes; in GenerateClass()
2163 SmallVector<llvm::Constant*, 16> IvarOffsets; in GenerateClass()
2165 std::vector<llvm::Constant*> IvarOffsetValues; in GenerateClass()
2191 llvm::Constant *OffsetValue = llvm::ConstantInt::get(IntTy, Offset); in GenerateClass()
2195 llvm::GlobalVariable *OffsetVar = TheModule.getGlobalVariable(OffsetName); in GenerateClass()
2201 OffsetVar->setLinkage(llvm::GlobalValue::ExternalLinkage); in GenerateClass()
2203 OffsetVar = new llvm::GlobalVariable(TheModule, IntTy, in GenerateClass()
2204 false, llvm::GlobalValue::ExternalLinkage, in GenerateClass()
2225 llvm::Constant *StrongIvarBitmap = MakeBitField(StrongIvars); in GenerateClass()
2226 llvm::Constant *WeakIvarBitmap = MakeBitField(WeakIvars); in GenerateClass()
2227 llvm::GlobalVariable *IvarOffsetArray = in GenerateClass()
2233 SmallVector<llvm::Constant*, 16> InstanceMethodTypes; in GenerateClass()
2241 llvm::Constant *Properties = GeneratePropertyList(OID, InstanceMethodSels, in GenerateClass()
2247 SmallVector<llvm::Constant*, 16> ClassMethodTypes; in GenerateClass()
2260 llvm::Constant *SuperClass; in GenerateClass()
2264 SuperClass = llvm::ConstantPointerNull::get(PtrToInt8Ty); in GenerateClass()
2267 SmallVector<llvm::Constant*, 1> empty; in GenerateClass()
2269 llvm::Constant *MethodList = GenerateMethodList(ClassName, "", in GenerateClass()
2271 llvm::Constant *ClassMethodList = GenerateMethodList(ClassName, "", in GenerateClass()
2273 llvm::Constant *IvarList = GenerateIvarList(IvarNames, IvarTypes, in GenerateClass()
2285 llvm::Type *IndexTy = Int32Ty; in GenerateClass()
2286 llvm::Constant *offsetPointerIndexes[] = {Zeros[0], in GenerateClass()
2287 llvm::ConstantInt::get(IndexTy, 1), nullptr, in GenerateClass()
2288 llvm::ConstantInt::get(IndexTy, 2) }; in GenerateClass()
2295 offsetPointerIndexes[2] = llvm::ConstantInt::get(IndexTy, ivarIndex); in GenerateClass()
2297 llvm::Constant *offsetValue = llvm::ConstantExpr::getGetElementPtr( in GenerateClass()
2300 llvm::GlobalVariable *offset = TheModule.getNamedGlobal(Name); in GenerateClass()
2306 offset->setLinkage(llvm::GlobalValue::ExternalLinkage); in GenerateClass()
2309 offset = new llvm::GlobalVariable(TheModule, offsetValue->getType(), in GenerateClass()
2310 false, llvm::GlobalValue::ExternalLinkage, offsetValue, Name); in GenerateClass()
2315 llvm::Constant *ZeroPtr = llvm::ConstantInt::get(IntPtrTy, 0); in GenerateClass()
2317 llvm::Constant *MetaClassStruct = GenerateClassStructure(NULLPtr, in GenerateClass()
2323 llvm::Constant *ClassStruct = in GenerateClass()
2326 llvm::ConstantInt::get(LongTy, instanceSize), IvarList, in GenerateClass()
2333 llvm::ConstantExpr::getBitCast(ClassStruct, IdTy)); in GenerateClass()
2339 llvm::ConstantExpr::getBitCast(MetaClassStruct, IdTy)); in GenerateClass()
2345 ClassStruct = llvm::ConstantExpr::getBitCast(ClassStruct, PtrToInt8Ty); in GenerateClass()
2350 llvm::Function *CGObjCGNU::ModuleInitFunction() { in ModuleInitFunction()
2359 llvm::StructType *SelStructTy = dyn_cast<llvm::StructType>( in ModuleInitFunction()
2361 llvm::Type *SelStructPtrTy = SelectorTy; in ModuleInitFunction()
2363 SelStructTy = llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, nullptr); in ModuleInitFunction()
2364 SelStructPtrTy = llvm::PointerType::getUnqual(SelStructTy); in ModuleInitFunction()
2367 std::vector<llvm::Constant*> Elements; in ModuleInitFunction()
2368 llvm::Constant *Statics = NULLPtr; in ModuleInitFunction()
2371 llvm::ArrayType *StaticsArrayTy = llvm::ArrayType::get(PtrToInt8Ty, in ModuleInitFunction()
2381 Elements.push_back(llvm::ConstantArray::get(StaticsArrayTy, in ModuleInitFunction()
2383 llvm::StructType *StaticsListTy = in ModuleInitFunction()
2384 llvm::StructType::get(PtrToInt8Ty, StaticsArrayTy, nullptr); in ModuleInitFunction()
2385 llvm::Type *StaticsListPtrTy = in ModuleInitFunction()
2386 llvm::PointerType::getUnqual(StaticsListTy); in ModuleInitFunction()
2388 llvm::ArrayType *StaticsListArrayTy = in ModuleInitFunction()
2389 llvm::ArrayType::get(StaticsListPtrTy, 2); in ModuleInitFunction()
2392 Elements.push_back(llvm::Constant::getNullValue(StaticsListPtrTy)); in ModuleInitFunction()
2394 Statics = llvm::ConstantExpr::getBitCast(Statics, PtrTy); in ModuleInitFunction()
2397 llvm::ArrayType *ClassListTy = llvm::ArrayType::get(PtrToInt8Ty, in ModuleInitFunction()
2399 llvm::StructType *SymTabTy = llvm::StructType::get(LongTy, SelStructPtrTy, in ModuleInitFunction()
2400 llvm::Type::getInt16Ty(VMContext), in ModuleInitFunction()
2401 llvm::Type::getInt16Ty(VMContext), in ModuleInitFunction()
2406 std::vector<llvm::Constant*> Selectors; in ModuleInitFunction()
2407 std::vector<llvm::GlobalAlias*> SelectorAliases; in ModuleInitFunction()
2412 llvm::Constant *SelName = ExportUniqueString(SelNameStr, ".objc_sel_name"); in ModuleInitFunction()
2418 llvm::Constant *SelectorTypeEncoding = NULLPtr; in ModuleInitFunction()
2424 Selectors.push_back(llvm::ConstantStruct::get(SelStructTy, Elements)); in ModuleInitFunction()
2438 Selectors.push_back(llvm::ConstantStruct::get(SelStructTy, Elements)); in ModuleInitFunction()
2442 Elements.push_back(llvm::ConstantInt::get(LongTy, SelectorCount)); in ModuleInitFunction()
2443 llvm::Constant *SelectorList = MakeGlobalArray(SelStructTy, Selectors, in ModuleInitFunction()
2445 Elements.push_back(llvm::ConstantExpr::getBitCast(SelectorList, in ModuleInitFunction()
2451 llvm::Constant *Idxs[] = {Zeros[0], in ModuleInitFunction()
2452 llvm::ConstantInt::get(Int32Ty, i), Zeros[0]}; in ModuleInitFunction()
2454 llvm::Constant *SelPtr = llvm::ConstantExpr::getGetElementPtr(SelectorList, in ModuleInitFunction()
2458 SelPtr = llvm::ConstantExpr::getBitCast(SelPtr, SelectorTy); in ModuleInitFunction()
2464 Elements.push_back(llvm::ConstantInt::get(llvm::Type::getInt16Ty(VMContext), in ModuleInitFunction()
2467 Elements.push_back(llvm::ConstantInt::get(llvm::Type::getInt16Ty(VMContext), in ModuleInitFunction()
2474 llvm::Constant *ClassList = llvm::ConstantArray::get(ClassListTy, Classes); in ModuleInitFunction()
2477 llvm::Constant *SymTab= MakeGlobal(SymTabTy, Elements); in ModuleInitFunction()
2481 llvm::StructType * ModuleTy = llvm::StructType::get(LongTy, LongTy, in ModuleInitFunction()
2482 PtrToInt8Ty, llvm::PointerType::getUnqual(SymTabTy), in ModuleInitFunction()
2486 Elements.push_back(llvm::ConstantInt::get(LongTy, RuntimeVersion)); in ModuleInitFunction()
2488 llvm::DataLayout td(&TheModule); in ModuleInitFunction()
2490 llvm::ConstantInt::get(LongTy, in ModuleInitFunction()
2505 Elements.push_back(llvm::ConstantInt::get(IntTy, 2)); in ModuleInitFunction()
2509 Elements.push_back(llvm::ConstantInt::get(IntTy, 1)); in ModuleInitFunction()
2511 Elements.push_back(llvm::ConstantInt::get(IntTy, 0)); in ModuleInitFunction()
2514 Elements.push_back(llvm::ConstantInt::get(IntTy, 1)); in ModuleInitFunction()
2518 llvm::Value *Module = MakeGlobal(ModuleTy, Elements); in ModuleInitFunction()
2522 llvm::Function * LoadFunction = llvm::Function::Create( in ModuleInitFunction()
2523 llvm::FunctionType::get(llvm::Type::getVoidTy(VMContext), false), in ModuleInitFunction()
2524 llvm::GlobalValue::InternalLinkage, ".objc_load_function", in ModuleInitFunction()
2526 llvm::BasicBlock *EntryBB = in ModuleInitFunction()
2527 llvm::BasicBlock::Create(VMContext, "entry", LoadFunction); in ModuleInitFunction()
2531 llvm::FunctionType *FT = in ModuleInitFunction()
2532 llvm::FunctionType::get(Builder.getVoidTy(), in ModuleInitFunction()
2533 llvm::PointerType::getUnqual(ModuleTy), true); in ModuleInitFunction()
2534 llvm::Value *Register = CGM.CreateRuntimeFunction(FT, "__objc_exec_class"); in ModuleInitFunction()
2538 llvm::Type *ArgTypes[2] = {PtrTy, PtrToInt8Ty}; in ModuleInitFunction()
2539 llvm::FunctionType *RegisterAliasTy = in ModuleInitFunction()
2540 llvm::FunctionType::get(Builder.getVoidTy(), in ModuleInitFunction()
2542 llvm::Function *RegisterAlias = llvm::Function::Create( in ModuleInitFunction()
2544 llvm::GlobalValue::ExternalWeakLinkage, "class_registerAlias_np", in ModuleInitFunction()
2546 llvm::BasicBlock *AliasBB = in ModuleInitFunction()
2547 llvm::BasicBlock::Create(VMContext, "alias", LoadFunction); in ModuleInitFunction()
2548 llvm::BasicBlock *NoAliasBB = in ModuleInitFunction()
2549 llvm::BasicBlock::Create(VMContext, "no_alias", LoadFunction); in ModuleInitFunction()
2552 llvm::Value *HasRegisterAlias = Builder.CreateICmpNE(RegisterAlias, in ModuleInitFunction()
2553 llvm::Constant::getNullValue(RegisterAlias->getType())); in ModuleInitFunction()
2561 llvm::Constant *TheClass = in ModuleInitFunction()
2565 TheClass = llvm::ConstantExpr::getBitCast(TheClass, PtrTy); in ModuleInitFunction()
2581 llvm::Function *CGObjCGNU::GenerateMethod(const ObjCMethodDecl *OMD, in GenerateMethod()
2591 llvm::FunctionType *MethodTy = in GenerateMethod()
2596 llvm::Function *Method in GenerateMethod()
2597 = llvm::Function::Create(MethodTy, in GenerateMethod()
2598 llvm::GlobalValue::InternalLinkage, in GenerateMethod()
2604 llvm::Constant *CGObjCGNU::GetPropertyGetFunction() { in GetPropertyGetFunction()
2608 llvm::Constant *CGObjCGNU::GetPropertySetFunction() { in GetPropertySetFunction()
2612 llvm::Constant *CGObjCGNU::GetOptimizedPropertySetFunction(bool atomic, in GetOptimizedPropertySetFunction()
2617 llvm::Constant *CGObjCGNU::GetGetStructFunction() { in GetGetStructFunction()
2620 llvm::Constant *CGObjCGNU::GetSetStructFunction() { in GetSetStructFunction()
2623 llvm::Constant *CGObjCGNU::GetCppAtomicObjectGetFunction() { in GetCppAtomicObjectGetFunction()
2626 llvm::Constant *CGObjCGNU::GetCppAtomicObjectSetFunction() { in GetCppAtomicObjectSetFunction()
2630 llvm::Constant *CGObjCGNU::EnumerationMutationFunction() { in EnumerationMutationFunction()
2660 llvm::Value *ExceptionAsObject; in EmitThrowStmt()
2663 llvm::Value *Exception = CGF.EmitObjCThrowOperand(ThrowExpr); in EmitThrowStmt()
2671 llvm::CallSite Throw = in EmitThrowStmt()
2679 llvm::Value * CGObjCGNU::EmitObjCWeakRead(CodeGenFunction &CGF, in EmitObjCWeakRead()
2680 llvm::Value *AddrWeakObj) { in EmitObjCWeakRead()
2687 llvm::Value *src, llvm::Value *dst) { in EmitObjCWeakAssign()
2695 llvm::Value *src, llvm::Value *dst, in EmitObjCGlobalAssign()
2708 llvm::Value *src, llvm::Value *dst, in EmitObjCIvarAssign()
2709 llvm::Value *ivarOffset) { in EmitObjCIvarAssign()
2717 llvm::Value *src, llvm::Value *dst) { in EmitObjCStrongCastAssign()
2725 llvm::Value *DestPtr, in EmitGCMemmoveCollectable()
2726 llvm::Value *SrcPtr, in EmitGCMemmoveCollectable()
2727 llvm::Value *Size) { in EmitGCMemmoveCollectable()
2735 llvm::GlobalVariable *CGObjCGNU::ObjCIvarOffsetVariable( in ObjCIvarOffsetVariable()
2743 llvm::GlobalVariable *IvarOffsetPointer = TheModule.getNamedGlobal(Name); in ObjCIvarOffsetVariable()
2759 llvm::ConstantInt *OffsetGuess = llvm::ConstantInt::get(Int32Ty, Offset, in ObjCIvarOffsetVariable()
2766 llvm::GlobalVariable *IvarOffsetGV = new llvm::GlobalVariable(TheModule, in ObjCIvarOffsetVariable()
2768 llvm::GlobalValue::PrivateLinkage, OffsetGuess, Name+".guess"); in ObjCIvarOffsetVariable()
2769 IvarOffsetPointer = new llvm::GlobalVariable(TheModule, in ObjCIvarOffsetVariable()
2770 IvarOffsetGV->getType(), false, llvm::GlobalValue::LinkOnceAnyLinkage, in ObjCIvarOffsetVariable()
2773 IvarOffsetPointer = new llvm::GlobalVariable(TheModule, in ObjCIvarOffsetVariable()
2774 llvm::Type::getInt32PtrTy(VMContext), false, in ObjCIvarOffsetVariable()
2775 llvm::GlobalValue::ExternalLinkage, nullptr, Name); in ObjCIvarOffsetVariable()
2783 llvm::Value *BaseValue, in EmitObjCValueForIvar()
2808 llvm::Value *CGObjCGNU::EmitIvarOffset(CodeGenFunction &CGF, in EmitIvarOffset()
2820 llvm::Value *Offset = TheModule.getGlobalVariable(name); in EmitIvarOffset()
2822 Offset = new llvm::GlobalVariable(TheModule, IntTy, in EmitIvarOffset()
2823 false, llvm::GlobalValue::LinkOnceAnyLinkage, in EmitIvarOffset()
2824 llvm::Constant::getNullValue(IntTy), name); in EmitIvarOffset()
2831 return llvm::ConstantInt::get(PtrDiffTy, Offset, /*isSigned*/true); in EmitIvarOffset()