Don't eagerly deserialize the 'Protocol' type when initializing code
generation for Objective-C; it may not be needed. llvm-svn: 148317
This commit is contained in:
@@ -185,10 +185,26 @@ public:
|
||||
|
||||
/// SelectorPtrTy - LLVM type for selector handles (typeof(SEL))
|
||||
llvm::Type *SelectorPtrTy;
|
||||
|
||||
private:
|
||||
/// ProtocolPtrTy - LLVM type for external protocol handles
|
||||
/// (typeof(Protocol))
|
||||
llvm::Type *ExternalProtocolPtrTy;
|
||||
|
||||
|
||||
public:
|
||||
llvm::Type *getExternalProtocolPtrTy() {
|
||||
if (!ExternalProtocolPtrTy) {
|
||||
// FIXME: It would be nice to unify this with the opaque type, so that the
|
||||
// IR comes out a bit cleaner.
|
||||
CodeGen::CodeGenTypes &Types = CGM.getTypes();
|
||||
ASTContext &Ctx = CGM.getContext();
|
||||
llvm::Type *T = Types.ConvertType(Ctx.getObjCProtoType());
|
||||
ExternalProtocolPtrTy = llvm::PointerType::getUnqual(T);
|
||||
}
|
||||
|
||||
return ExternalProtocolPtrTy;
|
||||
}
|
||||
|
||||
// SuperCTy - clang type for struct objc_super.
|
||||
QualType SuperCTy;
|
||||
// SuperPtrCTy - clang type for struct objc_super *.
|
||||
@@ -1769,7 +1785,7 @@ llvm::Value *CGObjCMac::GenerateProtocolRef(CGBuilderTy &Builder,
|
||||
LazySymbols.insert(&CGM.getContext().Idents.get("Protocol"));
|
||||
|
||||
return llvm::ConstantExpr::getBitCast(GetProtocolRef(PD),
|
||||
ObjCTypes.ExternalProtocolPtrTy);
|
||||
ObjCTypes.getExternalProtocolPtrTy());
|
||||
}
|
||||
|
||||
void CGObjCCommonMac::GenerateProtocol(const ObjCProtocolDecl *PD) {
|
||||
@@ -4232,11 +4248,6 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
|
||||
PtrObjectPtrTy = llvm::PointerType::getUnqual(ObjectPtrTy);
|
||||
SelectorPtrTy = Types.ConvertType(Ctx.getObjCSelType());
|
||||
|
||||
// FIXME: It would be nice to unify this with the opaque type, so that the IR
|
||||
// comes out a bit cleaner.
|
||||
llvm::Type *T = Types.ConvertType(Ctx.getObjCProtoType());
|
||||
ExternalProtocolPtrTy = llvm::PointerType::getUnqual(T);
|
||||
|
||||
// I'm not sure I like this. The implicit coordination is a bit
|
||||
// gross. We should solve this in a reasonable fashion because this
|
||||
// is a pretty common task (match some runtime data structure with
|
||||
@@ -5111,7 +5122,7 @@ llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CGBuilderTy &Builder,
|
||||
//
|
||||
llvm::Constant *Init =
|
||||
llvm::ConstantExpr::getBitCast(GetOrEmitProtocol(PD),
|
||||
ObjCTypes.ExternalProtocolPtrTy);
|
||||
ObjCTypes.getExternalProtocolPtrTy());
|
||||
|
||||
std::string ProtocolName("\01l_OBJC_PROTOCOL_REFERENCE_$_");
|
||||
ProtocolName += PD->getName();
|
||||
|
||||
Reference in New Issue
Block a user