avoid a lot of unneeded selector processing work by passing around
selectors instead of Value*'s.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52760 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 47bbd88..ce49cb2 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -490,14 +490,9 @@
}
}
- // Get the selector string
- std::string SelStr = E->getSelector().getName();
- llvm::Constant *Selector = CGF.CGM.GetAddrOfConstantString(SelStr);
-
- llvm::Value *SelPtr = Builder.CreateStructGEP(Selector, 0);
return Runtime->GenerateMessageSend(Builder, ConvertType(E->getType()),
CGF.LoadObjCSelf(),
- Receiver, SelPtr,
+ Receiver, E->getSelector(),
&Args[0], Args.size());
}
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index e9d2064..9bf53d9 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -86,14 +86,9 @@
}
}
- // Get the selector string
- std::string SelStr = E->getSelector().getName();
- llvm::Constant *Selector = CGM.GetAddrOfConstantString(SelStr);
-
- llvm::Value *SelPtr = Builder.CreateStructGEP(Selector, 0);
if (isSuperMessage) {
- const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(CurFuncDecl);
- assert(OMD && "super is only valid in an Objective-C method");
+ // super is only valid in an Objective-C method
+ const ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(CurFuncDecl);
const char *SuperClass =
OMD->getClassInterface()->getSuperClass()->getName();
return Runtime->GenerateMessageSendSuper(Builder, ConvertType(E->getType()),
@@ -103,7 +98,7 @@
}
return Runtime->GenerateMessageSend(Builder, ConvertType(E->getType()),
LoadObjCSelf(),
- Receiver, SelPtr,
+ Receiver, E->getSelector(),
&Args[0], Args.size());
}
diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp
index 565167d..5fe1820 100644
--- a/lib/CodeGen/CGObjCGNU.cpp
+++ b/lib/CodeGen/CGObjCGNU.cpp
@@ -105,7 +105,7 @@
const llvm::Type *ReturnTy,
llvm::Value *Sender,
llvm::Value *Receiver,
- llvm::Value *Selector,
+ Selector Sel,
llvm::Value** ArgV,
unsigned ArgC);
virtual llvm::Value *GenerateMessageSendSuper(llvm::IRBuilder &Builder,
@@ -116,8 +116,8 @@
Selector Sel,
llvm::Value** ArgV,
unsigned ArgC);
- virtual llvm::Value *LookupClass(llvm::IRBuilder &Builder, llvm::Value
- *ClassName);
+ virtual llvm::Value *LookupClass(llvm::IRBuilder &Builder,
+ llvm::Value *ClassName);
virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder, Selector Sel);
virtual llvm::Value *GetSelector(llvm::IRBuilder &Builder,
llvm::Value *SelName,
@@ -385,10 +385,10 @@
const llvm::Type *ReturnTy,
llvm::Value *Sender,
llvm::Value *Receiver,
- llvm::Value *Selector,
+ Selector Sel,
llvm::Value** ArgV,
unsigned ArgC) {
- llvm::Value *cmd = GetSelector(Builder, Selector, 0);
+ llvm::Value *cmd = GetSelector(Builder, Sel);
// Look up the method implementation.
std::vector<const llvm::Type*> impArgTypes;
diff --git a/lib/CodeGen/CGObjCRuntime.h b/lib/CodeGen/CGObjCRuntime.h
index 07d8962..f9b0297 100644
--- a/lib/CodeGen/CGObjCRuntime.h
+++ b/lib/CodeGen/CGObjCRuntime.h
@@ -46,7 +46,7 @@
const llvm::Type *ReturnTy,
llvm::Value *Sender,
llvm::Value *Receiver,
- llvm::Value *Selector,
+ Selector Sel,
llvm::Value** ArgV,
unsigned ArgC) =0;
/// Generate the function required to register all Objective-C components in