From afb7243286fdf0ffdc965027e5d382604fe191f8 Mon Sep 17 00:00:00 2001 From: Ilya Enkovich Date: Thu, 19 May 2016 13:50:22 +0000 Subject: [PATCH] cse.c (cse_main): Free dominance info. gcc/ * cse.c (cse_main): Free dominance info. (rest_of_handle_cse): Don't free dominance info. (rest_of_handle_cse2): Likewise. (rest_of_handle_cse_after_global_opts): Likewise. gcc/testsuite/ * gcc.dg/pr71148.c: New test. From-SVN: r236460 --- gcc/ChangeLog | 8 ++++++++ gcc/cse.c | 13 ++++-------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr71148.c | 46 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr71148.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 11c0dc2..4771d5a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-05-19 Ilya Enkovich + + PR rtl-optimization/71148 + * cse.c (cse_main): Free dominance info. + (rest_of_handle_cse): Don't free dominance info. + (rest_of_handle_cse2): Likewise. + (rest_of_handle_cse_after_global_opts): Likewise. + 2016-05-19 Kyrylo Tkachov PR target/71056 diff --git a/gcc/cse.c b/gcc/cse.c index 322e352..bce4fb0 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -6669,6 +6669,10 @@ cse_main (rtx_insn *f ATTRIBUTE_UNUSED, int nregs) int *rc_order = XNEWVEC (int, last_basic_block_for_fn (cfun)); int i, n_blocks; + /* CSE doesn't use dominane info but can invalidate it in different ways. + For simplicity free dominance info here. */ + free_dominance_info (CDI_DOMINATORS); + df_set_flags (DF_LR_RUN_DCE); df_note_add_problem (); df_analyze (); @@ -7568,9 +7572,6 @@ rest_of_handle_cse (void) else if (tem == 1 || optimize > 1) cse_cfg_altered |= cleanup_cfg (0); - if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - return 0; } @@ -7640,9 +7641,6 @@ rest_of_handle_cse2 (void) else if (tem == 1) cse_cfg_altered |= cleanup_cfg (0); - if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - cse_not_expected = 1; return 0; } @@ -7717,9 +7715,6 @@ rest_of_handle_cse_after_global_opts (void) else if (tem == 1) cse_cfg_altered |= cleanup_cfg (0); - if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS)) - free_dominance_info (CDI_DOMINATORS); - flag_cse_follow_jumps = save_cfj; return 0; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8bf513..b071e9f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-05-19 Ilya Enkovich + + PR rtl-optimization/71148 + * gcc.dg/pr71148.c: New test. + 2016-05-19 Kyrylo Tkachov PR target/71056 diff --git a/gcc/testsuite/gcc.dg/pr71148.c b/gcc/testsuite/gcc.dg/pr71148.c new file mode 100644 index 0000000..6aa4920 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr71148.c @@ -0,0 +1,46 @@ +/* PR rtl-optimization/71148 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -funroll-loops" } */ + +int rh, ok, kq, fu; + +void +js (int cs) +{ + rh = fu; + if (fu != 0) + { + cs /= 3; + if (cs <= 0) + { + int z9; + for (z9 = 0; z9 < 2; ++z9) + { + z9 += cs; + ok += z9; + fu += ok; + } + } + } +} + +void +vy (int s3) +{ + int yo, g2 = 0; + sd: + js (g2); + for (yo = 0; yo < 2; ++yo) + { + if (fu != 0) + goto sd; + kq += (s3 != (g2 ? s3 : 0)); + for (s3 = 0; s3 < 72; ++s3) + g2 *= (~0 - 1); + g2 -= yo; + } + for (fu = 0; fu < 18; ++fu) + for (yo = 0; yo < 17; ++yo) + if (g2 < 0) + goto sd; +} -- 2.7.4