aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-08-12 05:28:47 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-08-12 05:28:47 +0000
commit2bedbf8549bb33293c6a53e5da6cbd8de290d014 (patch)
tree52329f61c5c8747b9a71b372a929cff0f06b7170 /lib/CodeGen/CGObjCMac.cpp
parent98c5ead87d720d8b68b6f236c3c3579a388fc882 (diff)
Drop Sender from GenerateMessageSend*
- 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
Diffstat (limited to 'lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--lib/CodeGen/CGObjCMac.cpp44
1 files changed, 15 insertions, 29 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index f7fe2570c0..85f9860413 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -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() {