[llvm-commits] [llvm] r54760 - in /llvm/trunk: lib/Transforms/Scalar/SCCP.cpp test/Transforms/SCCP/empty-struct.ll

Dan Gohman gohman at apple.com
Wed Aug 13 14:22:49 PDT 2008


Author: djg
Date: Wed Aug 13 16:22:48 2008
New Revision: 54760

URL: http://llvm.org/viewvc/llvm-project?rev=54760&view=rev
Log:
Fix SCCP's handling of struct value loads and stores. SCCP doesn't
track individual leaf values in such cases, so it needs to treat
struct values as normal values in this case.

Added:
    llvm/trunk/test/Transforms/SCCP/empty-struct.ll
Modified:
    llvm/trunk/lib/Transforms/Scalar/SCCP.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SCCP.cpp?rev=54760&r1=54759&r2=54760&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SCCP.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SCCP.cpp Wed Aug 13 16:22:48 2008
@@ -1583,7 +1583,6 @@
       for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
         Instruction *Inst = BI++;
         if (Inst->getType() == Type::VoidTy ||
-            isa<StructType>(Inst->getType()) ||
             isa<TerminatorInst>(Inst))
           continue;
         
@@ -1760,7 +1759,6 @@
         for (BasicBlock::iterator BI = BB->begin(), E = BB->end(); BI != E; ) {
           Instruction *Inst = BI++;
           if (Inst->getType() == Type::VoidTy ||
-              isa<StructType>(Inst->getType()) ||
               isa<TerminatorInst>(Inst))
             continue;
           

Added: llvm/trunk/test/Transforms/SCCP/empty-struct.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SCCP/empty-struct.ll?rev=54760&view=auto

==============================================================================
--- llvm/trunk/test/Transforms/SCCP/empty-struct.ll (added)
+++ llvm/trunk/test/Transforms/SCCP/empty-struct.ll Wed Aug 13 16:22:48 2008
@@ -0,0 +1,20 @@
+; RUN: llvm-as < %s > %t.bc
+; RUN: llvm-ld %t.bc -o %t.sh
+; PR2612
+
+ at current_foo = internal global {  } zeroinitializer
+
+define i32 @main(...) {
+entry:
+        %retval = alloca i32            ; <i32*> [#uses=2]
+        store i32 0, i32* %retval
+        %local_foo = alloca {  }                ; <{  }*> [#uses=1]
+        load {  }* @current_foo         ; <{  }>:0 [#uses=1]
+        store {  } %0, {  }* %local_foo
+        br label %return
+
+return:         ; preds = %entry
+        load i32* %retval               ; <i32>:1 [#uses=1]
+        ret i32 %1
+}
+





More information about the llvm-commits mailing list