[cfe-commits] Patch to change how const arrays/structs are handled

Tanya Lattner lattner at apple.com
Thu Oct 22 15:08:20 PDT 2009


Attaching new patch.

-Tanya



On Oct 22, 2009, at 2:22 PM, Tanya Lattner wrote:

>
> On Oct 21, 2009, at 4:12 PM, Douglas Gregor wrote:
>
>>
>> On Oct 21, 2009, at 2:10 PM, Tanya Lattner wrote:
>>
>>> Hi. I'd like to get a review of my patch that takes const arrays  
>>> and structs (unions, classes, etc) and creates a global instead of  
>>> storing it to the stack (treating it like a static const, for  
>>> performance reasons).
>>>
>>> Please let me know if you have questions.
>>
>> Index: lib/CodeGen/CGDecl.cpp
>> ===================================================================
>> --- lib/CodeGen/CGDecl.cpp	(revision 84777)
>> +++ lib/CodeGen/CGDecl.cpp	(working copy)
>> @@ -316,6 +316,14 @@
>>   llvm::Value *DeclPtr;
>>   if (Ty->isConstantSizeType()) {
>>     if (!Target.useGlobalsForAutomaticVariables()) {
>> +
>> +      // All constant structs and arrays should be global.
>> +      if (Ty.isConstant(getContext())
>> +          && (isa<ArrayType>(Ty) || isa<RecordType>(Ty))) {
>> +        EmitStaticBlockVarDecl(D);
>> +        return;
>> +      }
>> +
>>
>> This looks too aggressive. There are more conditions that need to  
>> be checked before we can perform this optimization, e.g.,
>>
>> 	(1) Is the initializer constant?
>> 	(2) In C++, is the type/element type of the array a POD?
>>
>
> Ok, made these changes.
>
>> There are probably other conditions; for example, we might not want  
>> to perform this optimization if the address of the variable is ever  
>> taken.
>>
>
> Ok, I don't understand why address taken should matter if it is  
> declared const. Am I missing something?
>
> Thanks,
> Tanya
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20091022/dd79741c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: constVar2.patch
Type: application/octet-stream
Size: 928 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20091022/dd79741c/attachment.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20091022/dd79741c/attachment-0001.html>


More information about the cfe-commits mailing list