diff options
author | drow <drow@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-01 16:53:01 +0000 |
---|---|---|
committer | drow <drow@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-01 16:53:01 +0000 |
commit | 5f6261a7b7c907b0691d23edfa20ec0ca1051c87 (patch) | |
tree | d02919ec89b4a0c74b6a0015731011335652b7ca /gcc | |
parent | b4c4fea4634a5d4938608d5b10287b632ade40c8 (diff) | |
download | gcc-5f6261a7b7c907b0691d23edfa20ec0ca1051c87.tar.gz |
PR tree-optimization/32919
* tree-ssa-sccvn.c (visit_phi): Do not visit abnormal PHIs.
* tree-ssa-coalesce.c (ssa_conflicts_dump): New.
(coalesce_ssa_name): Call it.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127132 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr32919.c | 26 | ||||
-rw-r--r-- | gcc/tree-ssa-coalesce.c | 20 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 5 |
5 files changed, 63 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 12d7e678204..9b951a7cdf3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-08-01 Daniel Jacobowitz <dan@codesourcery.com> + + PR tree-optimization/32919 + * tree-ssa-sccvn.c (visit_phi): Do not visit abnormal PHIs. + * tree-ssa-coalesce.c (ssa_conflicts_dump): New. + (coalesce_ssa_name): Call it. + 2007-08-01 Sandra Loosemore <sandra@codesourcery.com> David Ung <davidu@mips.com> diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a6af5f8825b..c2de7148117 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-08-01 Daniel Jacobowitz <dan@codesourcery.com> + + PR tree-optimization/32919 + * gcc.c-torture/compile/pr32919.c: New. + 2007-08-01 Nick Clifton <nickc@redhat.com> * gcc.c-torture/execute/execute.exp: Change copyright header to diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32919.c b/gcc/testsuite/gcc.c-torture/compile/pr32919.c new file mode 100644 index 00000000000..33956c8c0b2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr32919.c @@ -0,0 +1,26 @@ +void _IO_vfprintf_internal ( char *f ) +{ + static const void *const step0_jumps[] = { &&do_form_unknown, &&do_flag_plus, &&do_form_float }; + const void * ptr = step0_jumps[0]; + do { + char spec; + spec = (*++f); + goto *ptr; +do_flag_plus: + read_int (&f); +do_number: + _itoa_word (spec); +do_form_float: + if (ptr != ((void *)0)) + { + spec = 'x'; + goto do_number; + } + if (spec != 'S') + __strnlen (); + return; + do_form_unknown:; + } + while (*f != '\0'); +} + diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c index 4e3a5a3df83..1b63635881b 100644 --- a/gcc/tree-ssa-coalesce.c +++ b/gcc/tree-ssa-coalesce.c @@ -589,6 +589,24 @@ ssa_conflicts_merge (ssa_conflicts_p ptr, unsigned x, unsigned y) } +/* Dump a conflicts graph. */ + +static void +ssa_conflicts_dump (FILE *file, ssa_conflicts_p ptr) +{ + unsigned x; + + fprintf (file, "\nConflict graph:\n"); + + for (x = 0; x < ptr->size; x++) + if (ptr->conflicts[x]) + { + fprintf (dump_file, "%d: ", x); + dump_bitmap (file, ptr->conflicts[x]); + } +} + + /* This structure is used to efficiently record the current status of live SSA_NAMES when building a conflict graph. LIVE_BASE_VAR has a bit set for each base variable which has at least one @@ -1302,6 +1320,8 @@ coalesce_ssa_name (void) /* Build a conflict graph. */ graph = build_ssa_conflict_graph (liveinfo); delete_tree_live_info (liveinfo); + if (dump_file && (dump_flags & TDF_DETAILS)) + ssa_conflicts_dump (dump_file, graph); sort_coalesce_list (cl); diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 607cd1d298c..5e6a86a4b6c 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1259,6 +1259,11 @@ visit_phi (tree phi) bool allsame = true; int i; + /* TODO: We could check for this in init_sccvn, and replace this + with a gcc_assert. */ + if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (phi))) + return set_ssa_val_to (PHI_RESULT (phi), PHI_RESULT (phi)); + /* See if all non-TOP arguments have the same value. TOP is equivalent to everything, so we can ignore it. */ for (i = 0; i < PHI_NUM_ARGS (phi); i++) |