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