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 | f4b9ed2892e0cfe1da6130e2aa55246d14f5bb61 (patch) | |
tree | 46eeb4f65d8c30446314a16cc0ac8d1a146e41d6 /test | |
parent | a026266c4e3e0fb1137b63dc1cd020e89c2f6965 (diff) | |
download | external_llvm-f4b9ed2892e0cfe1da6130e2aa55246d14f5bb61.zip external_llvm-f4b9ed2892e0cfe1da6130e2aa55246d14f5bb61.tar.gz external_llvm-f4b9ed2892e0cfe1da6130e2aa55246d14f5bb61.tar.bz2 |
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')
-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 5d99a7c..bf746e7 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 +} |