diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-03-21 23:05:05 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-04-01 11:59:16 +0200 |
| commit | 7a0eaa532f289c6a252f30023581f58bae7a446a (patch) | |
| tree | 2f92869ce3568c1790fc7de7eacaedf81f267ead /validation | |
| parent | 97ebb345943918a0688b62cbc9bf878de01ccba4 (diff) | |
| download | sparse-dev-7a0eaa532f289c6a252f30023581f58bae7a446a.tar.gz | |
fix OP_PHI usage in try_to_simplify_bb(), correctly
Patch 11b1a83b1 solved an issue with dangling PSEUDO_PHI
by killing it's use after a branch rewrite.
However, the change didn't took in account the fact that,
even after the branch rewrite, some other paths may exist
where this pseudo was needed.
Fix this by cheking that no such path exist before killing
the (usage of the) pseudo.
Fixes: 11b1a83b1 "fix OP_PHI usage in try_to_simplify_bb()"
Reported-by: Dibyendu Majumdar <mobile@majumdar.org.uk>
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/kill-phi-ttsbb2.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/validation/kill-phi-ttsbb2.c b/validation/kill-phi-ttsbb2.c new file mode 100644 index 00000000..c7d89aa0 --- /dev/null +++ b/validation/kill-phi-ttsbb2.c @@ -0,0 +1,40 @@ +extern int error(int); + +int foo(int perr); +int foo(int perr) +{ + int err = 0; + int rc = 0; + int j = 0; + int i = 1; + + i && j++; + + i-- && j; + + i && j--; + + if (j != 1) { + err = 1; + if (perr) + error(1); + } + + if (err != 0) + rc = 1; + + return rc; +} + +/* + * check-name: kill-phi-ttsbb2 + * check-description: + * Verify if OP_PHI usage is adjusted after successful try_to_simplify_bb() + * check-warning: this test is sensitive to details of code generation + * with proper bb packing (taking care of phi-nodes) it + * will be optimized away and test nothing. You have been warned. + * check-command: test-linearize $file + * check-output-ignore + * + * check-output-excludes: VOID + */ |
