diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2021-03-28 16:07:29 +0100 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2021-03-28 16:07:29 +0200 |
commit | dcb199646134ae0d264c72175a9ad8314f7836c8 (patch) | |
tree | c87febf1aa5ec612713bf0c2ec8b280c7a13bfc6 | |
parent | b204ead75fc624928e783da8b6658f3a8a06871c (diff) | |
download | sparse-dcb199646134ae0d264c72175a9ad8314f7836c8.tar.gz |
correctly count phi arguments
In a phi-node,pseudo_list_size() can't be used for counting its arguments
because VOIDs must be ignored.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r-- | flow.c | 18 | ||||
-rw-r--r-- | validation/optim/phi-count00.c | 27 |
2 files changed, 44 insertions, 1 deletions
@@ -189,6 +189,22 @@ out: return false; } +/// +// count the true number of argument of a phi-node +// VOID arguments must be ignored, so pseudo_list_size() can't be used for this. +static int phi_count(struct instruction *node) +{ + pseudo_t phi; + int n = 0; + + FOR_EACH_PTR(node->phi_list, phi) { + if (phi == VOID) + continue; + n++; + } END_FOR_EACH_PTR(phi); + return n; +} + /* * When we reach here, we have: * - a basic block that ends in a conditional branch and @@ -211,7 +227,7 @@ static int try_to_simplify_bb(struct basic_block *bb, struct instruction *first, * simplify_symbol_usage()/conversion to SSA form. * No sane simplification can be done when we have this. */ - bogus = bb_list_size(bb->parents) != pseudo_list_size(first->phi_list); + bogus = bb_list_size(bb->parents) != phi_count(first); FOR_EACH_PTR(first->phi_list, phi) { struct instruction *def = phi->def; diff --git a/validation/optim/phi-count00.c b/validation/optim/phi-count00.c new file mode 100644 index 00000000..38db0eda --- /dev/null +++ b/validation/optim/phi-count00.c @@ -0,0 +1,27 @@ +inline int inl(int d, int e, int f) +{ + switch (d) { + case 0: + return e; + case 1: + return f; + default: + return 0; + } +} + +void foo(int a, int b, int c) +{ + while (1) { + if (inl(a, b, c)) + break; + } +} + +/* + * check-name: phi-count00 + * check-command: test-linearize -Wno-decl $file + * + * check-output-ignore + * check-output-pattern(0,2): phisrc + */ |