Fix an error in phi translation of GEPs that was causing failures.
authorOwen Anderson <resistor@mac.com>
Wed, 4 Jul 2007 04:51:16 +0000 (04:51 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 4 Jul 2007 04:51:16 +0000 (04:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37868 91177308-0d34-0410-b5e6-96231b3b80d8

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

index be86f3a797fbb2e0b260a331d2910c75eda60e2a..33926ea127abb63b6edc498cf34c9f31dc4a64e1 100644 (file)
@@ -836,7 +836,7 @@ Value* GVNPRE::phi_translate(Value* V, BasicBlock* pred, BasicBlock* succ) {
       }
     
     if (newOp1 != U->getPointerOperand() || changed_idx) {
-      Instruction* newVal = new GetElementPtrInst(U->getPointerOperand(),
+      Instruction* newVal = new GetElementPtrInst(newOp1,
                                        &newIdx[0], newIdx.size(),
                                        U->getName()+".expr");
       
diff --git a/test/Transforms/GVNPRE/2007-07-03-PhiTranslateGEP.ll b/test/Transforms/GVNPRE/2007-07-03-PhiTranslateGEP.ll
new file mode 100644 (file)
index 0000000..65d70d9
--- /dev/null
@@ -0,0 +1,14 @@
+; RUN: llvm-as < %s | opt -gvnpre | llvm-dis
+
+define i64 @foo({ i32, i32 }** %__v) {
+entry:
+       br label %bb
+
+bb:            ; preds = %bb, %entry
+       %__x.066.0 = phi { i32, i32 }* [ null, %entry ], [ null, %bb ]
+       %tmp2.i.i63 = getelementptr { i32, i32 }* %__x.066.0, i32 0, i32 1
+       br i1 false, label %bb, label %cond_true
+
+cond_true:             ; preds = %bb
+       ret i64 0
+}