diff options
author | Owen Anderson <resistor@mac.com> | 2010-08-31 07:36:34 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2010-08-31 07:36:34 +0000 |
commit | cb21190cbd8ae1aece5b833ebe3814ada4260627 (patch) | |
tree | 2c1900df1e4b4322f18db3d1f99abae89308480e /test | |
parent | 4a295d301d83f07ad2840abe25a1691aef481c83 (diff) | |
download | external_llvm-cb21190cbd8ae1aece5b833ebe3814ada4260627.zip external_llvm-cb21190cbd8ae1aece5b833ebe3814ada4260627.tar.gz external_llvm-cb21190cbd8ae1aece5b833ebe3814ada4260627.tar.bz2 |
More Chris-inspired JumpThreading fixes: use ConstantExpr to correctly constant-fold undef, and be more careful with its return value.
This actually exposed an infinite recursion bug in ComputeValueKnownInPredecessors which theoretically already existed (in JumpThreading's
handling of and/or of i1's), but never manifested before. This patch adds a tracking set to prevent this case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112589 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Transforms/JumpThreading/2010-08-31-InfiniteRecursion.ll | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/test/Transforms/JumpThreading/2010-08-31-InfiniteRecursion.ll b/test/Transforms/JumpThreading/2010-08-31-InfiniteRecursion.ll new file mode 100644 index 0000000..390948a --- /dev/null +++ b/test/Transforms/JumpThreading/2010-08-31-InfiniteRecursion.ll @@ -0,0 +1,91 @@ +; RUN: opt < %s -jump-threading -disable-output +; ModuleID = 'bugpoint-reduced-simplified.bc' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-apple-darwin10.4" + +define void @encode_one_macroblock_highfast() nounwind ssp { +entry: + switch i32 undef, label %bb13 [ + i32 1, label %bb10 + i32 2, label %bb12 + ] + +bb10: ; preds = %entry + unreachable + +bb12: ; preds = %entry + unreachable + +bb13: ; preds = %entry + br i1 undef, label %bb137, label %bb292 + +bb137: ; preds = %bb13 + br i1 undef, label %bb150, label %bb154 + +bb150: ; preds = %bb137 + unreachable + +bb154: ; preds = %bb137 + br i1 undef, label %bb292, label %bb246 + +bb246: ; preds = %bb154 + br i1 undef, label %bb292, label %bb247 + +bb247: ; preds = %bb246 + br i1 undef, label %bb248, label %bb292 + +bb248: ; preds = %bb247 + br i1 undef, label %bb249, label %bb292 + +bb249: ; preds = %bb248 + br i1 undef, label %bb254, label %bb250 + +bb250: ; preds = %bb249 + unreachable + +bb254: ; preds = %bb249 + br i1 undef, label %bb292, label %bb255 + +bb255: ; preds = %bb288.bb289.loopexit_crit_edge, %bb254 + br i1 undef, label %bb.nph.split.us, label %bb269 + +bb.nph.split.us: ; preds = %bb255 + br i1 undef, label %bb.nph.split.us.split.us, label %bb269.us.us31 + +bb.nph.split.us.split.us: ; preds = %bb.nph.split.us + br i1 undef, label %bb269.us.us, label %bb269.us.us.us + +bb269.us.us.us: ; preds = %bb287.us.us.us, %bb.nph.split.us.split.us + %indvar = phi i64 [ %indvar.next, %bb287.us.us.us ], [ 0, %bb.nph.split.us.split.us ] ; <i64> [#uses=1] + %0 = icmp eq i16 undef, 0 ; <i1> [#uses=1] + br i1 %0, label %bb287.us.us.us, label %bb286.us.us.us + +bb287.us.us.us: ; preds = %bb269.us.us.us + %indvar.next = add i64 %indvar, 1 ; <i64> [#uses=2] + %exitcond = icmp eq i64 %indvar.next, 4 ; <i1> [#uses=1] + br i1 %exitcond, label %bb288.bb289.loopexit_crit_edge, label %bb269.us.us.us + +bb286.us.us.us: ; preds = %bb269.us.us.us + unreachable + +bb269.us.us: ; preds = %bb287.us.us, %bb.nph.split.us.split.us + br i1 undef, label %bb287.us.us, label %bb286.us.us + +bb287.us.us: ; preds = %bb269.us.us + br i1 undef, label %bb288.bb289.loopexit_crit_edge, label %bb269.us.us + +bb286.us.us: ; preds = %bb269.us.us + unreachable + +bb269.us.us31: ; preds = %bb.nph.split.us + unreachable + +bb269: ; preds = %bb255 + unreachable + +bb288.bb289.loopexit_crit_edge: ; preds = %bb287.us.us, %bb287.us.us.us + br i1 undef, label %bb292, label %bb255 + +bb292: ; preds = %bb288.bb289.loopexit_crit_edge, %bb254, %bb248, %bb247, %bb246, %bb154, %bb13 + unreachable +} |