Commit 1486c2a7 by Jeff Law Committed by Jeff Law

re PR tree-optimization/79621 (Missed path isolation opportunity)

	PR tree-optimization/79621
	* gimple-ssa-isolate-paths.c (find_implicit_erroneous_behavior): Ignore
	blocks with edges to themselves.

	PR tree-optimization/79621
	* gcc.c-torture/compile/pr79621.c: New test.

From-SVN: r245637
parent 3bb43119
2017-02-21 Jeff Law <law@redhat.com>
PR tree-optimization/79621
* gimple-ssa-isolate-paths.c (find_implicit_erroneous_behavior): Ignore
blocks with edges to themselves.
2017-02-21 Jakub Jelinek <jakub@redhat.com> 2017-02-21 Jakub Jelinek <jakub@redhat.com>
PR target/79633 PR target/79633
......
...@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3. If not see
#include "tree-ssa.h" #include "tree-ssa.h"
#include "cfgloop.h" #include "cfgloop.h"
#include "tree-cfg.h" #include "tree-cfg.h"
#include "cfganal.h"
#include "intl.h" #include "intl.h"
...@@ -352,6 +353,16 @@ find_implicit_erroneous_behavior (void) ...@@ -352,6 +353,16 @@ find_implicit_erroneous_behavior (void)
if (has_abnormal_or_eh_outgoing_edge_p (bb)) if (has_abnormal_or_eh_outgoing_edge_p (bb))
continue; continue;
/* If BB has an edge to itself, then duplication of BB below
could result in reallocation of BB's PHI nodes. If that happens
then the loop below over the PHIs would use the old PHI and
thus invalid information. We don't have a good way to know
if a PHI has been reallocated, so just avoid isolation in
this case. */
if (find_edge (bb, bb))
continue;
/* First look for a PHI which sets a pointer to NULL and which /* First look for a PHI which sets a pointer to NULL and which
is then dereferenced within BB. This is somewhat overly is then dereferenced within BB. This is somewhat overly
conservative, but probably catches most of the interesting conservative, but probably catches most of the interesting
......
2017-02-21 Jeff Law <law@redhat.com>
PR tree-optimization/79621
* gcc.c-torture/compile/pr79621.c: New test.
2017-02-21 Jakub Jelinek <jakub@redhat.com> 2017-02-21 Jakub Jelinek <jakub@redhat.com>
PR c++/79655 PR c++/79655
......
int b5;
void
h6 (int zb, int e7)
{
while (b5 > 0)
{
int gv;
for (gv = 1; gv < 4; ++gv)
{
((zb != 0) ? b5 : gv) && (b5 /= e7);
zb = 0;
}
e7 = 0;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment