diff options
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/PhiEliminate.ll')
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/PhiEliminate.ll | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/PhiEliminate.ll b/llvm/test/Transforms/SimplifyCFG/PhiEliminate.ll new file mode 100644 index 00000000000..9411b33f7b3 --- /dev/null +++ b/llvm/test/Transforms/SimplifyCFG/PhiEliminate.ll @@ -0,0 +1,37 @@ +; Test a bunch of cases where the cfg simplification code should +; be able to fold PHI nodes into computation in common cases. Folding the PHI +; nodes away allows the branches to be eliminated, performing a simple form of +; 'if conversion'. + +; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis > %t.xform +; RUN: not grep phi %t.xform && grep ret %t.xform + +declare void %use(bool) +declare void %use(int) + + +void %test2(bool %c, bool %d, int %V, int %V2) { + br bool %d, label %X, label %F +X: + br bool %c, label %T, label %F +T: + br label %F +F: + %B1 = phi bool [true, %0], [false, %T], [false, %X] + %I7 = phi int [%V, %0], [%V2, %T], [%V2, %X] + call void %use(bool %B1) + call void %use(int %I7) + ret void +} + +void %test(bool %c, int %V, int %V2) { + br bool %c, label %T, label %F +T: + br label %F +F: + %B1 = phi bool [true, %0], [false, %T] + %I6 = phi int [%V, %0], [0, %T] + call void %use(bool %B1) + call void %use(int %I6) + ret void +} |