]> granicus.if.org Git - clang/commitdiff
Drop Sender from GenerateMessageSend*
authorDaniel Dunbar <daniel@zuster.org>
Tue, 12 Aug 2008 05:28:47 +0000 (05:28 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 12 Aug 2008 05:28:47 +0000 (05:28 +0000)
 - Was unused and generated a unnecessary load of self

Update NeXT runtime to get proper object & selector types from
       ASTContext.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54667 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjC.cpp
lib/CodeGen/CGObjCGNU.cpp
lib/CodeGen/CGObjCMac.cpp
lib/CodeGen/CGObjCRuntime.h

index 6a8fe3c4f9a74d8599dd4f5046d03db998821b3b..7270884572263687a8702231663f3a2f381d371b 100644 (file)
@@ -61,7 +61,7 @@ llvm::Value *CodeGenFunction::EmitObjCMessageExpr(const ObjCMessageExpr *E) {
     isSuperMessage = true;
     Receiver = LoadObjCSelf();
   } else {
-   Receiver = EmitScalarExpr(E->getReceiver());
+    Receiver = EmitScalarExpr(E->getReceiver());
   }
 
   // Process the arguments
@@ -91,12 +91,11 @@ llvm::Value *CodeGenFunction::EmitObjCMessageExpr(const ObjCMessageExpr *E) {
     const char *SuperClass =
       OMD->getClassInterface()->getSuperClass()->getName();
     return Runtime.GenerateMessageSendSuper(Builder, ConvertType(E->getType()),
-                                             Receiver, SuperClass,
+                                             SuperClass,
                                              Receiver, E->getSelector(),
                                              &Args[0], Args.size());
   }
   return Runtime.GenerateMessageSend(Builder, ConvertType(E->getType()),
-                                      LoadObjCSelf(),
                                       Receiver, E->getSelector(),
                                       &Args[0], Args.size());
 }
index ab896cc67503115aadd5a0bce7125e2cdbc94af0..54aca0c96de851cfe66aee0a0b082a74e172d978 100644 (file)
@@ -93,14 +93,12 @@ public:
   virtual llvm::Constant *GenerateConstantString(const std::string &String);
   virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder<> &Builder,
                                            const llvm::Type *ReturnTy,
-                                           llvm::Value *Sender,
                                            llvm::Value *Receiver,
                                            Selector Sel,
                                            llvm::Value** ArgV,
                                            unsigned ArgC);
   virtual llvm::Value *GenerateMessageSendSuper(llvm::IRBuilder<> &Builder,
                                                 const llvm::Type *ReturnTy,
-                                                llvm::Value *Sender,
                                                 const char *SuperClassName,
                                                 llvm::Value *Receiver,
                                                 Selector Sel,
@@ -265,7 +263,6 @@ llvm::Constant *CGObjCGNU::GenerateConstantString(const std::string &Str) {
 ///should be called.
 llvm::Value *CGObjCGNU::GenerateMessageSendSuper(llvm::IRBuilder<> &Builder,
                                                  const llvm::Type *ReturnTy,
-                                                 llvm::Value *Sender,
                                                  const char *SuperClassName,
                                                  llvm::Value *Receiver,
                                                  Selector Sel,
@@ -312,7 +309,6 @@ llvm::Value *CGObjCGNU::GenerateMessageSendSuper(llvm::IRBuilder<> &Builder,
 /// Generate code for a message send expression.  
 llvm::Value *CGObjCGNU::GenerateMessageSend(llvm::IRBuilder<> &Builder,
                                             const llvm::Type *ReturnTy,
-                                            llvm::Value *Sender,
                                             llvm::Value *Receiver,
                                             Selector Sel,
                                             llvm::Value** ArgV,
index f7fe2570c09ed6d9e21343e652f4b97ab760db9e..85f9860413db939d5230c4a097f2e1c41636f258 100644 (file)
@@ -38,10 +38,10 @@ private:
 public:
   const llvm::Type *LongTy;
 
-  /// ObjectTy - Opaque type for Objective-C objects
-  const llvm::Type *ObjectTy, *ObjectPtrTy;
-  /// SelectorTy - Opaque type for Objective-C selectors
-  const llvm::Type *SelectorTy, *SelectorPtrTy;
+  /// ObjectPtrTy - LLVM type for object handles (typeof(id))
+  const llvm::Type *ObjectPtrTy;
+  /// SelectorTy - LLVM type for selector handles (typeof(SEL))
+  const llvm::Type *SelectorPtrTy;
 
 public:
   ObjCTypesHelper(CodeGen::CodeGenModule &cgm);
@@ -91,7 +91,6 @@ public:
 
   virtual llvm::Value *GenerateMessageSend(llvm::IRBuilder<> &Builder,
                                            const llvm::Type *ReturnTy,
-                                           llvm::Value *Sender,
                                            llvm::Value *Receiver,
                                            Selector Sel,
                                            llvm::Value** ArgV,
@@ -99,7 +98,6 @@ public:
 
   virtual llvm::Value *GenerateMessageSendSuper(llvm::IRBuilder<> &Builder,
                                                 const llvm::Type *ReturnTy,
-                                                llvm::Value *Sender,
                                                 const char *SuperClassName,
                                                 llvm::Value *Receiver,
                                                 Selector Sel,
@@ -247,7 +245,6 @@ llvm::Constant *CGObjCMac::GenerateConstantString(const std::string &String) {
 /// which class's method should be called.
 llvm::Value *CGObjCMac::GenerateMessageSendSuper(llvm::IRBuilder<> &Builder,
                                                  const llvm::Type *ReturnTy,
-                                                 llvm::Value *Sender,
                                                  const char *SuperClassName,
                                                  llvm::Value *Receiver,
                                                  Selector Sel,
@@ -260,24 +257,18 @@ llvm::Value *CGObjCMac::GenerateMessageSendSuper(llvm::IRBuilder<> &Builder,
 /// Generate code for a message send expression.  
 llvm::Value *CGObjCMac::GenerateMessageSend(llvm::IRBuilder<> &Builder,
                                             const llvm::Type *ReturnTy,
-                                            llvm::Value *Sender,
                                             llvm::Value *Receiver,
                                             Selector Sel,
                                             llvm::Value** ArgV,
-                                            unsigned ArgC) {  
-  if (!Sender) {
-    llvm::Function *F = ObjCTypes.getMessageSendFn();
-    llvm::Value **Args = new llvm::Value*[ArgC+2];
-    Args[0] = Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy, "tmp");
-    Args[1] = EmitSelector(Builder, Sel);
-    std::copy(ArgV, ArgV+ArgC, Args+2);
-    llvm::CallInst *CI = Builder.CreateCall(F, Args, Args+ArgC+2, "tmp");
-    delete[] Args;
-    return Builder.CreateBitCast(CI, ReturnTy, "tmp");
-  } else {
-    assert(0 && "cannot generate message sends with sender");
-    return 0;
-  }
+                                            unsigned ArgC) {
+  llvm::Function *F = ObjCTypes.getMessageSendFn();
+  llvm::Value **Args = new llvm::Value*[ArgC+2];
+  Args[0] = Builder.CreateBitCast(Receiver, ObjCTypes.ObjectPtrTy, "tmp");
+  Args[1] = EmitSelector(Builder, Sel);
+  std::copy(ArgV, ArgV+ArgC, Args+2);
+  llvm::CallInst *CI = Builder.CreateCall(F, Args, Args+ArgC+2, "tmp");
+  delete[] Args;
+  return Builder.CreateBitCast(CI, ReturnTy, "tmp");
 }
 
 llvm::Value *CGObjCMac::GenerateProtocolRef(llvm::IRBuilder<> &Builder, 
@@ -453,14 +444,9 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
     CFConstantStringClassReference(0),
     MessageSendFn(0),
     LongTy(CGM.getTypes().ConvertType(CGM.getContext().LongTy)),
-    // FIXME: We want the types from the front-end.
-    ObjectTy(llvm::OpaqueType::get()),
-    ObjectPtrTy(llvm::PointerType::getUnqual(ObjectTy)),
-    SelectorTy(llvm::OpaqueType::get()),
-    SelectorPtrTy(llvm::PointerType::getUnqual(SelectorTy))
+    ObjectPtrTy(CGM.getTypes().ConvertType(CGM.getContext().getObjCIdType())),
+    SelectorPtrTy(CGM.getTypes().ConvertType(CGM.getContext().getObjCSelType()))
 {
-  CGM.getModule().addTypeName("struct.__objc_object", ObjectTy);
-  CGM.getModule().addTypeName("struct.__objc_selector", SelectorTy);
 }
 
 ObjCTypesHelper::~ObjCTypesHelper() {
index d4f7bb07cd097159b96f7c2ff74e7c4e081d37d1..07301b50dc7f47bbf89fbd946454981dce2f9e6e 100644 (file)
@@ -47,11 +47,6 @@ public:
   /// Generate an Objective-C message send operation
   virtual llvm::Value *GenerateMessageSend(BuilderType &Builder,
                                            const llvm::Type *ReturnTy,
-                                           // FIXME: This should be
-                                           // dropped, it is unused
-                                           // and generates a spurious
-                                           // load.
-                                           llvm::Value *Sender,
                                            llvm::Value *Receiver,
                                            Selector Sel,
                                            llvm::Value** ArgV,
@@ -87,12 +82,6 @@ public:
              const llvm::SmallVectorImpl<std::string> &Protocols) =0;
   virtual llvm::Value *GenerateMessageSendSuper(llvm::IRBuilder<true> &Builder,
                                                 const llvm::Type *ReturnTy,
-                                                // FIXME: This should
-                                                // be dropped, it is
-                                                // unused and
-                                                // generates a
-                                                // spurious load.
-                                                llvm::Value *Sender,
                                                 const char *SuperClassName,
                                                 llvm::Value *Receiver,
                                                 Selector Sel,