re PR target/79080 (ICE: internal consistency failure (error: invalid rtl sharing found in the insn) (error: shared rtx))
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. From-SVN: r244506
This commit is contained in:
parent
1c70261c9a
commit
e1bcfb924a
4 changed files with 36 additions and 6 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
19
gcc/testsuite/gcc.dg/pr79080.c
Normal file
19
gcc/testsuite/gcc.dg/pr79080.c
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue