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 | a3a68bde2103e04d30b80b3d18030867bf78ea7b (patch) | |
tree | fc3e99363d8d85d715be4bd818a9d408db292fb7 /test | |
parent | 94425996c5f58b8c2eb8be3c48c5f80fcb0d3481 (diff) | |
download | llvm-a3a68bde2103e04d30b80b3d18030867bf78ea7b.tar.gz llvm-a3a68bde2103e04d30b80b3d18030867bf78ea7b.tar.bz2 llvm-a3a68bde2103e04d30b80b3d18030867bf78ea7b.tar.xz |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30055 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll | 22 | ||||
-rw-r--r-- | test/Transforms/PredicateSimplifier/predsimplify.ll | 164 |
2 files changed, 185 insertions, 1 deletions
diff --git a/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll b/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll new file mode 100644 index 0000000000..97f2a5a5f6 --- /dev/null +++ b/test/Transforms/PredicateSimplifier/2006-08-02-Switch.ll @@ -0,0 +1,22 @@ +; RUN: llvm-as < %s | opt -predsimplify -disable-output + +fastcc void %_ov_splice(int %n1, int %n2, int %ch2) { +entry: + %tmp = setgt int %n1, %n2 ; <bool> [#uses=1] + %n.0 = select bool %tmp, int %n2, int %n1 ; <int> [#uses=1] + %tmp104 = setlt int 0, %ch2 ; <bool> [#uses=1] + br bool %tmp104, label %cond_true105, label %return + +cond_true95: ; preds = %cond_true105 + ret void + +bb98: ; preds = %cond_true105 + ret void + +cond_true105: ; preds = %entry + %tmp94 = setgt int %n.0, 0 ; <bool> [#uses=1] + br bool %tmp94, label %cond_true95, label %bb98 + +return: ; preds = %entry + ret void +} diff --git a/test/Transforms/PredicateSimplifier/predsimplify.ll b/test/Transforms/PredicateSimplifier/predsimplify.ll index 056d8c97dc..89d5d4ce49 100644 --- a/test/Transforms/PredicateSimplifier/predsimplify.ll +++ b/test/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(...) |