diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-01-16 21:34:35 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-01-16 21:34:35 +0000 |
commit | 244e9d34acb3e91e8c58424ee7592a1c9bbc10cb (patch) | |
tree | 97c5bf3c97e4747ef5fc4e016464ce03bd36014b | |
parent | 14234f77ad27c8f21d078985afd3e4c10b36f69c (diff) | |
download | gcc-244e9d34acb3e91e8c58424ee7592a1c9bbc10cb.tar.gz |
PR target/79080
* loop-doloop.c (doloop_modify): Call unshare_all_rtl_in_chain on
sequence. Formatting fixes.
(doloop_optimize): Formatting fixes.
* gcc.dg/pr79080.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244506 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/loop-doloop.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr79080.c | 19 |
4 files changed, 36 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a69094cb506..cc2e1d0c9f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2017-01-16 Jakub Jelinek <jakub@redhat.com> + PR target/79080 + * loop-doloop.c (doloop_modify): Call unshare_all_rtl_in_chain on + sequence. Formatting fixes. + (doloop_optimize): Formatting fixes. + PR driver/49726 * gcc.c (debug_level_greater_than_spec_func): New function. (static_spec_functions): Add debug-level-gt spec function. diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c index 5616709776e..3b9a96034ab 100644 --- a/gcc/loop-doloop.c +++ b/gcc/loop-doloop.c @@ -479,9 +479,13 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, /* Insert initialization of the count register into the loop header. */ start_sequence (); + /* count has been already copied through copy_rtx. */ + reset_used_flags (count); + set_used_flags (condition); tmp = force_operand (count, counter_reg); convert_move (counter_reg, tmp, 1); sequence = get_insns (); + unshare_all_rtl_in_chain (sequence); end_sequence (); emit_insn_after (sequence, BB_END (loop_preheader_edge (loop)->src)); @@ -489,10 +493,8 @@ doloop_modify (struct loop *loop, struct niter_desc *desc, { rtx ass = copy_rtx (desc->noloop_assumptions); basic_block preheader = loop_preheader_edge (loop)->src; - basic_block set_zero - = split_edge (loop_preheader_edge (loop)); - basic_block new_preheader - = split_edge (loop_preheader_edge (loop)); + basic_block set_zero = split_edge (loop_preheader_edge (loop)); + basic_block new_preheader = split_edge (loop_preheader_edge (loop)); edge te; /* Expand the condition testing the assumptions and if it does not pass, @@ -688,8 +690,7 @@ doloop_optimize (struct loop *loop) rtx_insn *doloop_seq = targetm.gen_doloop_end (doloop_reg, start_label); word_mode_size = GET_MODE_PRECISION (word_mode); - word_mode_max - = (HOST_WIDE_INT_1U << (word_mode_size - 1) << 1) - 1; + word_mode_max = (HOST_WIDE_INT_1U << (word_mode_size - 1) << 1) - 1; if (! doloop_seq && mode != word_mode /* Before trying mode different from the one in that # of iterations is diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8f00c195a7..2ac159733c4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-01-16 Jakub Jelinek <jakub@redhat.com> + + PR target/79080 + * gcc.dg/pr79080.c: New test. + 2017-01-16 David Malcolm <dmalcolm@redhat.com> PR c/78304 diff --git a/gcc/testsuite/gcc.dg/pr79080.c b/gcc/testsuite/gcc.dg/pr79080.c new file mode 100644 index 00000000000..de0969d4647 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr79080.c @@ -0,0 +1,19 @@ +/* PR target/79080 */ +/* { dg-do compile } */ +/* { dg-options "-O1" } */ +/* { dg-additional-options "-mcpu=8548" { target { powerpc*-*-* && ilp32 } } } */ + +int +foo (char x) +{ + int a; + + for (;;) + { + x += 59; + if (x != 0) + a = 0; + else + return 0; + } +} |