diff options
author | Zdenek Dvorak <rakdver@kam.uniff.cz> | 2010-10-14 09:08:45 +0200 |
---|---|---|
committer | Andrey Belevantsev <abel@gcc.gnu.org> | 2010-10-14 11:08:45 +0400 |
commit | d2e60b7bc2c690b1572072dcac73fbdcc8b15677 (patch) | |
tree | 2daf4a110eab8df41f750f62efd0d842360f7b19 /gcc | |
parent | 854edfcda4850b557f249c655ca1af5eef2cc1cc (diff) |
et-forest.c (et_nca): Return NULL immediately when the dominance forest has disjoint components.
2010-10-14 Zdenek Dvorak <rakdver@kam.uniff.cz>
* et-forest.c (et_nca): Return NULL immediately when
the dominance forest has disjoint components.
From-SVN: r165451
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/et-forest.c | 11 |
2 files changed, 14 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cb07b23752f..d567d60c55e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2010-10-14 Zdenek Dvorak <rakdver@kam.uniff.cz> + * et-forest.c (et_nca): Return NULL immediately when + the dominance forest has disjoint components. + 2010-10-13 Vladimir Makarov <vmakarov@redhat.com> * ira.c (setup_class_hard_regs): Fix typo in indexing diff --git a/gcc/et-forest.c b/gcc/et-forest.c index c15b6d8f2c3..94757c0afa9 100644 --- a/gcc/et-forest.c +++ b/gcc/et-forest.c @@ -661,7 +661,7 @@ et_nca (struct et_node *n1, struct et_node *n2) if (r) r->parent = o1; } - else + else if (r == o2 || (r && r->parent != NULL)) { ret = o2->prev; @@ -669,6 +669,15 @@ et_nca (struct et_node *n1, struct et_node *n2) if (l) l->parent = o1; } + else + { + /* O1 and O2 are in different components of the forest. */ + if (l) + l->parent = o1; + if (r) + r->parent = o1; + return NULL; + } if (0 < o2->depth) { |