diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-09-09 01:06:48 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-09-09 01:06:48 +0000 |
commit | 46f45b9bec4a265ad8400a538e5ec3a5683617f1 (patch) | |
tree | 6a9ca0751b54becfb033fb33a1bc954079ad34d1 /lib/CodeGen/CGObjC.cpp | |
parent | f47be933bef073708c2536fa69ef946e7fe08134 (diff) |
Change CodeGen to emit calls using (RValue,Type) list:
- Add CodeGenFunction::EmitAnyExprToTemp
o Like EmitAnyExpr, but emits aggregates to a temporary location if
none is available. Seems like this should be simpler (even aside
from using first class aggregates).
- Killed CodeGenFunction::EmitCallArg (just append the pair)
- Conversion of RValues to actual call arguments is now isolated in
CodeGenFunction::EmitCall.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55970 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjC.cpp')
-rw-r--r-- | lib/CodeGen/CGObjC.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp index 8660d96443..7242d01adb 100644 --- a/lib/CodeGen/CGObjC.cpp +++ b/lib/CodeGen/CGObjC.cpp @@ -83,7 +83,7 @@ RValue CodeGenFunction::EmitObjCMessageExpr(const ObjCMessageExpr *E) { CallArgList Args; for (CallExpr::const_arg_iterator i = E->arg_begin(), e = E->arg_end(); i != e; ++i) - EmitCallArg(*i, Args); + Args.push_back(std::make_pair(EmitAnyExprToTemp(*i), (*i)->getType())); if (isSuperMessage) { // super is only valid in an Objective-C method @@ -268,7 +268,7 @@ void CodeGenFunction::EmitObjCPropertySet(const ObjCPropertyRefExpr *E, } CallArgList Args; - EmitCallArg(Src, E->getType(), Args); + Args.push_back(std::make_pair(Src, E->getType())); CGM.getObjCRuntime().GenerateMessageSend(*this, getContext().VoidTy, S, EmitScalarExpr(E->getBase()), false, Args); @@ -316,15 +316,16 @@ void CodeGenFunction::EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S) llvm::Value *Collection = EmitScalarExpr(S.getCollection()); CallArgList Args; - Args.push_back(std::make_pair(StatePtr, + Args.push_back(std::make_pair(RValue::get(StatePtr), getContext().getPointerType(StateTy))); - Args.push_back(std::make_pair(ItemsPtr, + Args.push_back(std::make_pair(RValue::get(ItemsPtr), getContext().getPointerType(ItemsTy))); const llvm::Type *UnsignedLongLTy = ConvertType(getContext().UnsignedLongTy); llvm::Constant *Count = llvm::ConstantInt::get(UnsignedLongLTy, NumItems); - Args.push_back(std::make_pair(Count, getContext().UnsignedLongTy)); + Args.push_back(std::make_pair(RValue::get(Count), + getContext().UnsignedLongTy)); RValue CountRV = CGM.getObjCRuntime().GenerateMessageSend(*this, |