Fix another bug, this time in PREing select instructions.
authorOwen Anderson <resistor@mac.com>
Wed, 4 Jul 2007 22:33:23 +0000 (22:33 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 4 Jul 2007 22:33:23 +0000 (22:33 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37878 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/GVNPRE.cpp
test/Transforms/GVNPRE/2007-07-04-SelectInst.ll [new file with mode: 0644]

index 5d52aa48875504c7fe7407e5c825e945f0ba675e..e5e3710643b9c86f8d91d22a7c2b34b0ef35c0c2 100644 (file)
@@ -1586,8 +1586,7 @@ void GVNPRE::insertion_pre(Value* e, BasicBlock* BB,
         newVal = new ExtractElementInst(s1, s2, S->getName()+".gvnpre",
                                         (*PI)->getTerminator());
       else if (SelectInst* S = dyn_cast<SelectInst>(U))
-        newVal = new SelectInst(S->getCondition(), S->getTrueValue(),
-                                S->getFalseValue(), S->getName()+".gvnpre",
+        newVal = new SelectInst(s1, s2, s3, S->getName()+".gvnpre",
                                 (*PI)->getTerminator());
       else if (CastInst* C = dyn_cast<CastInst>(U))
         newVal = CastInst::create(C->getOpcode(), s1, C->getType(),
diff --git a/test/Transforms/GVNPRE/2007-07-04-SelectInst.ll b/test/Transforms/GVNPRE/2007-07-04-SelectInst.ll
new file mode 100644 (file)
index 0000000..944a700
--- /dev/null
@@ -0,0 +1,18 @@
+; RUN: llvm-as < %s | opt -gvnpre | llvm-dis
+
+define void @set_depth_values(i32 %level) {
+cond_true90:           ; preds = %cond_next84
+       br i1 false, label %cond_true105, label %cond_true151
+
+cond_true105:          ; preds = %cond_true90
+       %tmp132 = add i32 %level, -3            ; <i32> [#uses=2]
+       %tmp133 = icmp sgt i32 %tmp132, 0               ; <i1> [#uses=1]
+       %max134 = select i1 %tmp133, i32 %tmp132, i32 1         ; <i32> [#uses=0]
+       br label %cond_true151
+
+cond_true151:          ; preds = %cond_true140, %cond_true105
+       %tmp153 = add i32 %level, -3            ; <i32> [#uses=2]
+       %tmp154 = icmp sgt i32 %tmp153, 0               ; <i1> [#uses=1]
+       %max155 = select i1 %tmp154, i32 %tmp153, i32 1         ; <i32> [#uses=0]
+       ret void
+}