[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