[LLVMbugs] [Bug 10484] New: Lifetime markers are preventing alloca promotion

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Jul 25 13:52:21 PDT 2011


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

           Summary: Lifetime markers are preventing alloca promotion
           Product: libraries
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Scalar Optimizations
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: stoklund at 2pi.dk
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=6929)
 --> (http://llvm.org/bugs/attachment.cgi?id=6929)
Unoptimized bitcode for clang's Stmp.cpp

The llvm.lifetime markers inserted by the inliner are preventing allocas from
being promoted to registers.

This causes some functions to use a lot more stack space.

The attached example is from clang's own Stmt.cpp. The function
_ZNK5clang4Stmt14getSourceRangeEv has more then 50 allocas after optimizing to
file with 'opt -O2". If I apply this patch:

diff --git a/lib/Transforms/Utils/InlineFunction.cpp
b/lib/Transforms/Utils/InlineFunction.cpp
index 714b12c..c613d1a 100644
--- a/lib/Transforms/Utils/InlineFunction.cpp
+++ b/lib/Transforms/Utils/InlineFunction.cpp
@@ -934,7 +934,7 @@ bool llvm::InlineFunction(CallSite CS, InlineFunctionInfo
&IFI) {

   // Leave lifetime markers for the static alloca's, scoping them to the
   // function we just inlined.
-  if (!IFI.StaticAllocas.empty()) {
+  if (0 && !IFI.StaticAllocas.empty()) {
     IRBuilder<> builder(FirstNewBlock->begin());
     for (unsigned ai = 0, ae = IFI.StaticAllocas.size(); ai != ae; ++ai) {
       AllocaInst *AI = IFI.StaticAllocas[ai];

All of those allocas are optimized away.

-- 
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