[cfe-commits] Patch to change how const arrays/structs are	handled
    Douglas Gregor 
    dgregor at apple.com
       
    Wed Oct 21 16:12:24 PDT 2009
    
    
  
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?
There are probably other conditions; for example, we might not want to  
perform this optimization if the address of the variable is ever taken.
	- Doug
    
    
More information about the cfe-commits
mailing list