aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/CGObjC.cpp5
-rw-r--r--lib/CodeGen/CGObjCGNU.cpp4
-rw-r--r--lib/CodeGen/CGObjCMac.cpp44
-rw-r--r--lib/CodeGen/CGObjCRuntime.h11
4 files changed, 17 insertions, 47 deletions
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 6a8fe3c4f9..7270884572 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -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());
}
diff --git a/lib/CodeGen/CGObjCGNU.cpp b/lib/CodeGen/CGObjCGNU.cpp
index ab896cc675..54aca0c96d 100644
--- a/lib/CodeGen/CGObjCGNU.cpp
+++ b/lib/CodeGen/CGObjCGNU.cpp
@@ -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,
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() {
diff --git a/lib/CodeGen/CGObjCRuntime.h b/lib/CodeGen/CGObjCRuntime.h
index d4f7bb07cd..07301b50dc 100644
--- a/lib/CodeGen/CGObjCRuntime.h
+++ b/lib/CodeGen/CGObjCRuntime.h
@@ -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,