[LLVMbugs] [Bug 5629] New: stack frame size is proportional to # of variables, even if lifetimes don't overlap

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Fri Nov 27 11:54:03 PST 2009


http://llvm.org/bugs/show_bug.cgi?id=5629

           Summary: stack frame size is proportional to # of variables, even
                    if lifetimes don't overlap
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: LLVM Codegen
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: jyasskin at google.com
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=3877)
 --> (http://llvm.org/bugs/attachment.cgi?id=3877)
Output of clang -O0 -S test.c at r89911

$ cat test.c
typedef struct BigStruct {
  char member[10000];
} BigStruct;

extern void use(BigStruct*);

void foo() {
  { BigStruct s; use(&s); }
  { BigStruct s; use(&s); }
}


With clang -O0 and -O3, this function uses 20000 bytes of stack space, even
though only one of the objects is alive at any given time. With gcc-4.4.1 -O0
and -O3, it only uses 10000 bytes (although I've seen C++ functions get gcc to
fail to reuse stack space too).

This can be a significant problem in programs with small stacks, especially in
C++ where we can have lots of invisible temporary objects. Because the small
stack problem exists in -O0 builds too, I don't think clang can get away with
only reusing stack space at -O>0.


-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list