[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