phiopt: Avoid -fcompare-debug bug in phiopt [PR94211]
authorJakub Jelinek <jakub@redhat.com>
Thu, 19 Mar 2020 09:24:16 +0000 (10:24 +0100)
committerJakub Jelinek <jakub@redhat.com>
Thu, 19 Mar 2020 09:24:16 +0000 (10:24 +0100)
commitc7e9019681857b329bbe4c1e7ec8dec8c736c0fe
treebb1e70608d6146d9b80733321b11e1d748864c92
parentf3280e4c0c98e103603bafc466ea49651fe0b7f2
phiopt: Avoid -fcompare-debug bug in phiopt [PR94211]

Two years ago, I've added support for up to 2 simple preparation statements
in value_replacement, but the
-      && estimate_num_insns (assign, &eni_time_weights)
+      && estimate_num_insns (bb_seq (middle_bb), &eni_time_weights)
change, meant that we compute the cost of all those statements rather than
just the single assign that has been the single supported non-debug
statement in the bb before, doesn't do what I thought would do, gimple_seq
is just gimple * and thus it can't be really overloaded depending on whether
we pass a single gimple * or a whole sequence.  Which means in the last
two years it doesn't count all the statements, but only the first one.
With -g that happens to be a DEBUG_STMT, or it could be e.g. the first
preparation statement which could be much cheaper than the actual assign.

2020-03-19  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/94211
* tree-ssa-phiopt.c (value_replacement): Use estimate_num_insns_seq
instead of estimate_num_insns for bb_seq (middle_bb).  Rename
emtpy_or_with_defined_p variable to empty_or_with_defined_p, adjust
all uses.

* gcc.dg/pr94211.c: New test.
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr94211.c [new file with mode: 0644]
gcc/tree-ssa-phiopt.c