diff options
| author | Nick Lewycky <nicholas@mxc.ca> | 2006-09-02 19:40:38 +0000 |
|---|---|---|
| committer | Nick Lewycky <nicholas@mxc.ca> | 2006-09-02 19:40:38 +0000 |
| commit | 8e5599354a4eccd7bc801364ba8739e12d2629ad (patch) | |
| tree | 778b7f502c4d09198b4ff45a71272d327088f169 /llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll | |
| parent | f2ce949ae97d9213291be81bdde036536c2a0fa1 (diff) | |
| download | bcm5719-llvm-8e5599354a4eccd7bc801364ba8739e12d2629ad.tar.gz bcm5719-llvm-8e5599354a4eccd7bc801364ba8739e12d2629ad.zip | |
Improve handling of SelectInst.
Reorder operations to remove duplicated work.
Fix to leave floating-point types out of the optimization.
Add tests to predsimplify.ll for SwitchInst and SelectInst handling.
llvm-svn: 30055
Diffstat (limited to 'llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll')
| -rw-r--r-- | llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll | 164 |
1 files changed, 163 insertions, 1 deletions
diff --git a/llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll b/llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll index 056d8c97dc0..89d5d4ce498 100644 --- a/llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll +++ b/llvm/test/Regression/Transforms/PredicateSimplifier/predsimplify.ll @@ -1,4 +1,5 @@ -; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail +; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | not grep fail && +; RUN: llvm-as < %s | opt -predsimplify -instcombine -simplifycfg | llvm-dis | grep -v declare | grep pass | wc -l | grep 3 void %test1(int %x) { entry: @@ -124,6 +125,167 @@ else.2: ret void } +void %test9(int %y, int %z) { +entry: + %x = add int %y, %z + %A = seteq int %y, 3 + %B = seteq int %z, 5 + %C = and bool %A, %B + br bool %C, label %cond_true, label %return + +cond_true: + %D = seteq int %x, 8 + br bool %D, label %then, label %oops + +then: + call void (...)* %pass( ) + ret void + +oops: + call void (...)* %fail( ) + ret void + +return: + ret void +} + +void %switch1(int %x) { +entry: + %A = seteq int %x, 10 + br bool %A, label %return, label %cond_false + +cond_false: + switch int %x, label %return [ + int 9, label %then1 + int 10, label %then2 + ] + +then1: + call void (...)* %pass( ) + ret void + +then2: + call void (...)* %fail( ) + ret void + +return: + ret void +} + +void %switch2(int %x) { +entry: + %A = seteq int %x, 10 + br bool %A, label %return, label %cond_false + +cond_false: + switch int %x, label %return [ + int 8, label %then1 + int 9, label %then1 + int 10, label %then1 + ] + +then1: + %B = setne int %x, 8 + br bool %B, label %then2, label %return + +then2: + call void (...)* %pass( ) + ret void + +return: + ret void +} + +void %switch3(int %x) { +entry: + %A = seteq int %x, 10 + br bool %A, label %return, label %cond_false + +cond_false: + switch int %x, label %return [ + int 9, label %then1 + int 10, label %then1 + ] + +then1: + %B = seteq int %x, 9 + br bool %B, label %return, label %oops + +oops: + call void (...)* %fail( ) + ret void + +return: + ret void +} + +void %switch4(int %x) { +entry: + %A = seteq int %x, 10 + br bool %A, label %then1, label %cond_false + +cond_false: + switch int %x, label %default [ + int 9, label %then1 + int 10, label %then2 + ] + +then1: + ret void + +then2: + ret void + +default: + %B = seteq int %x, 9 + br bool %B, label %oops, label %then1 + +oops: + call void (...)* %fail( ) + ret void +} + +void %select1(int %x) { +entry: + %A = seteq int %x, 10 + %B = select bool %A, int 1, int 2 + %C = seteq int %B, 1 + br bool %C, label %then, label %else + +then: + br bool %A, label %return, label %oops + +else: + br bool %A, label %oops, label %return + +oops: + call void (...)* %fail( ) + ret void + +return: + ret void +} + +void %select2(int %x) { +entry: + %A = seteq int %x, 10 + %B = select bool %A, int 1, int 2 + %C = seteq int %B, 1 + br bool %A, label %then, label %else + +then: + br bool %C, label %return, label %oops + +else: + br bool %C, label %oops, label %return + +oops: + call void (...)* %fail( ) + ret void + +return: + ret void +} declare void %fail(...) |

