diff options
| author | Chris Lattner <sabre@nondot.org> | 2008-12-03 07:48:08 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2008-12-03 07:48:08 +0000 |
| commit | 421fa9e32e445c972df4a981c60fbec4e21ac187 (patch) | |
| tree | 46eeb4f65d8c30446314a16cc0ac8d1a146e41d6 /test/Transforms/JumpThreading/basic.ll | |
| parent | 2973a25dbc0ee1081e34421e53b8f4308b624854 (diff) | |
Teach jump threading some more simple tricks:
1) have it fold "br undef", which does occur with
surprising frequency as jump threading iterates.
2) teach j-t to delete dead blocks. This removes the successor
edges, reducing the in-edges of other blocks, allowing
recursive simplification.
3) Fold things like:
br COND, BBX, BBY
BBX:
br COND, BBZ, BBW
which also happens because jump threading iterates.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60470 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/JumpThreading/basic.ll')
| -rw-r--r-- | test/Transforms/JumpThreading/basic.ll | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/Transforms/JumpThreading/basic.ll b/test/Transforms/JumpThreading/basic.ll index 5d99a7c0be..bf746e7f13 100644 --- a/test/Transforms/JumpThreading/basic.ll +++ b/test/Transforms/JumpThreading/basic.ll @@ -29,3 +29,25 @@ T2: F2: ret i32 %B } + + +;; cond is known false on Entry -> F1 edge! +define i32 @test2(i1 %cond) { +Entry: + br i1 %cond, label %T1, label %F1 + +T1: + %v1 = call i32 @f1() + br label %Merge + +F1: + br i1 %cond, label %Merge, label %F2 + +Merge: + %B = phi i32 [47, %T1], [192, %F1] + ret i32 %B + +F2: + call void @f3() + ret i32 12 +} |
