diff options
-rw-r--r-- | lib/Transforms/Scalar/GVN.cpp | 2 | ||||
-rw-r--r-- | test/Transforms/GVN/2007-07-31-RedundantPhi.ll | 22 |
2 files changed, 24 insertions, 0 deletions
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index 2dde2f9..ff66250 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/lib/Transforms/Scalar/GVN.cpp @@ -747,6 +747,8 @@ Value *GVN::GetValueForBlock(BasicBlock *BB, LoadInst* orig, PN->replaceAllUsesWith(first); PN->eraseFromParent(); + Phis[BB] = first; + return first; } diff --git a/test/Transforms/GVN/2007-07-31-RedundantPhi.ll b/test/Transforms/GVN/2007-07-31-RedundantPhi.ll new file mode 100644 index 0000000..a9ca71a --- /dev/null +++ b/test/Transforms/GVN/2007-07-31-RedundantPhi.ll @@ -0,0 +1,22 @@ +; RUN: llvm-as < %s | opt -gvn | llvm-dis | not grep {tmp701 =} + +@img_width = external global i16 ; <i16*> [#uses=2] + +define i32 @smpUMHEXBipredIntegerPelBlockMotionSearch(i16* %cur_pic, i16 signext %ref, i32 %list, i32 %pic_pix_x, i32 %pic_pix_y, i32 %blocktype, i16 signext %pred_mv_x1, i16 signext %pred_mv_y1, i16 signext %pred_mv_x2, i16 signext %pred_mv_y2, i16* %mv_x, i16* %mv_y, i16* %s_mv_x, i16* %s_mv_y, i32 %search_range, i32 %min_mcost, i32 %lambda_factor) { +cond_next143: ; preds = %entry + store i16 0, i16* @img_width, align 2 + br i1 false, label %cond_next449, label %cond_false434 + +cond_false434: ; preds = %cond_true415 + br label %cond_next449 + +cond_next449: ; preds = %cond_false434, %cond_true415 + br i1 false, label %cond_next698, label %cond_false470 + +cond_false470: ; preds = %cond_next449 + br label %cond_next698 + +cond_next698: ; preds = %cond_true492 + %tmp701 = load i16* @img_width, align 2 ; <i16> [#uses=0] + ret i32 0 +} |