[cfe-commits] r78267 - in /cfe/trunk: lib/CodeGen/CGCXX.cpp test/CodeGenCXX/copy-constructor-elim.cpp
Fariborz Jahanian
fjahanian at apple.com
Thu Aug 6 11:14:16 PDT 2009
On Aug 6, 2009, at 11:10 AM, Douglas Gregor wrote:
>
> On Aug 5, 2009, at 6:03 PM, Fariborz Jahanian wrote:
>
>> Author: fjahanian
>> Date: Wed Aug 5 20:02:49 2009
>> New Revision: 78267
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=78267&view=rev
>> Log:
>> Patch to optimize away copy constructor call when
>> appropriate.
>>
>> Added:
>> cfe/trunk/test/CodeGenCXX/copy-constructor-elim.cpp
>> Modified:
>> cfe/trunk/lib/CodeGen/CGCXX.cpp
>>
>> Modified: cfe/trunk/lib/CodeGen/CGCXX.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCXX.cpp?rev=78267&r1=78266&r2=78267&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/CodeGen/CGCXX.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGCXX.cpp Wed Aug 5 20:02:49 2009
>> @@ -255,7 +255,20 @@
>> cast<CXXRecordDecl>(E->getType()->getAs<RecordType>()->getDecl());
>> if (RD->hasTrivialConstructor())
>> return;
>> -
>> +
>> + // Code gen optimization to eliminate copy constructor and return
>> + // its first argument instead.
>> + const CXXConstructorDecl *CDecl = E->getConstructor();
>> + if (E->getNumArgs() == 1 &&
>> + CDecl->isCopyConstructor(getContext())) {
>> + CXXConstructExpr::const_arg_iterator i = E->arg_begin();
>> + const Expr *SubExpr = (*i);
>> + // FIXME. Any other cases can be optimized away?
>> + if (isa<CallExpr>(SubExpr) ||
>> isa<CXXTemporaryObjectExpr>(SubExpr)) {
>> + EmitAggExpr(SubExpr, Dest, false);
>> + return;
>> + }
>> + }
>
>
> The intent of CXXConstructorExpr::isElidable() was to have Sema
> compute all of the cases where a copy constructor is elidable (based
> on its understanding of the language semantics). Then, CodeGen would
> just check isElidable() and elide in those cases. That way, CodeGen
> doesn't have to know anything about the language to do the right
> thing.
Good to know. Will look into using it (and setting it if not set) to
do this optimization.
- Thanks, Fariborz
>
>
> - Doug
More information about the cfe-commits
mailing list