lower-subreg.c (enum classify_move_insn): Rename SIMPLE_PSEUDO_REG_MOVE to DECOMPOSABLE_SIMPLE_MOVE.

ChangeLog:

	* lower-subreg.c (enum classify_move_insn): Rename
	SIMPLE_PSEUDO_REG_MOVE to DECOMPOSABLE_SIMPLE_MOVE.
	(find_decomposable_subregs): Update.
	(decompose_multiword_subregs): Add DECOMPOSE_COPIES parameter.
	Only mark pseudo-to-pseudo copies as DECOMPOSABLE_SIMPLE_MOVE
	if that parameter is true.
	(rest_of_handle_lower_subreg): Call decompose_multiword_subregs
	with DECOMPOSE_COPIES false.
	(rest_of_handle_lower_subreg2): Call decompose_multiword_subregs
	with DECOMPOSE_COPIES true.

testsuite/ChangeLog:

	* gcc.dg/lower-subreg-1.c: Disable on arm-*-* targets.

From-SVN: r191805
This commit is contained in:
Ulrich Weigand 2012-09-27 11:10:08 +00:00 committed by Ulrich Weigand
parent 9472dcecc7
commit c2c47e8ff4
4 changed files with 37 additions and 13 deletions

View file

@ -1,3 +1,16 @@
2012-09-27 Ulrich Weigand <ulrich.weigand@linaro.org>
* lower-subreg.c (enum classify_move_insn): Rename
SIMPLE_PSEUDO_REG_MOVE to DECOMPOSABLE_SIMPLE_MOVE.
(find_decomposable_subregs): Update.
(decompose_multiword_subregs): Add DECOMPOSE_COPIES parameter.
Only mark pseudo-to-pseudo copies as DECOMPOSABLE_SIMPLE_MOVE
if that parameter is true.
(rest_of_handle_lower_subreg): Call decompose_multiword_subregs
with DECOMPOSE_COPIES false.
(rest_of_handle_lower_subreg2): Call decompose_multiword_subregs
with DECOMPOSE_COPIES true.
2012-09-27 Marek Polacek <polacek@redhat.com>
* doc/gcov.texi (Gcov Data Files): Fix a typo.

View file

@ -440,9 +440,9 @@ enum classify_move_insn
{
/* Not a simple move from one location to another. */
NOT_SIMPLE_MOVE,
/* A simple move from one pseudo-register to another. */
SIMPLE_PSEUDO_REG_MOVE,
/* A simple move involving a non-pseudo-register. */
/* A simple move we want to decompose. */
DECOMPOSABLE_SIMPLE_MOVE,
/* Any other simple move. */
SIMPLE_MOVE
};
@ -518,7 +518,7 @@ find_decomposable_subregs (rtx *px, void *data)
If this is not a simple copy from one location to another,
then we can not decompose this register. If this is a simple
copy from one pseudo-register to another, and the mode is right
copy we want to decompose, and the mode is right,
then we mark the register as decomposable.
Otherwise we don't say anything about this register --
it could be decomposed, but whether that would be
@ -537,7 +537,7 @@ find_decomposable_subregs (rtx *px, void *data)
case NOT_SIMPLE_MOVE:
bitmap_set_bit (non_decomposable_context, regno);
break;
case SIMPLE_PSEUDO_REG_MOVE:
case DECOMPOSABLE_SIMPLE_MOVE:
if (MODES_TIEABLE_P (GET_MODE (x), word_mode))
bitmap_set_bit (decomposable_context, regno);
break;
@ -553,7 +553,7 @@ find_decomposable_subregs (rtx *px, void *data)
enum classify_move_insn cmi_mem = NOT_SIMPLE_MOVE;
/* Any registers used in a MEM do not participate in a
SIMPLE_MOVE or SIMPLE_PSEUDO_REG_MOVE. Do our own recursion
SIMPLE_MOVE or DECOMPOSABLE_SIMPLE_MOVE. Do our own recursion
here, and return -1 to block the parent's recursion. */
for_each_rtx (&XEXP (x, 0), find_decomposable_subregs, &cmi_mem);
return -1;
@ -1336,11 +1336,11 @@ dump_choices (bool speed_p, const char *description)
}
/* Look for registers which are always accessed via word-sized SUBREGs
or via copies. Decompose these registers into several word-sized
pseudo-registers. */
or -if DECOMPOSE_COPIES is true- via copies. Decompose these
registers into several word-sized pseudo-registers. */
static void
decompose_multiword_subregs (void)
decompose_multiword_subregs (bool decompose_copies)
{
unsigned int max;
basic_block bb;
@ -1438,8 +1438,15 @@ decompose_multiword_subregs (void)
cmi = NOT_SIMPLE_MOVE;
else
{
/* We mark pseudo-to-pseudo copies as decomposable during the
second pass only. The first pass is so early that there is
good chance such moves will be optimized away completely by
subsequent optimizations anyway.
However, we call find_pseudo_copy even during the first pass
so as to properly set up the reg_copy_graph. */
if (find_pseudo_copy (set))
cmi = SIMPLE_PSEUDO_REG_MOVE;
cmi = decompose_copies? DECOMPOSABLE_SIMPLE_MOVE : SIMPLE_MOVE;
else
cmi = SIMPLE_MOVE;
}
@ -1640,7 +1647,7 @@ gate_handle_lower_subreg (void)
static unsigned int
rest_of_handle_lower_subreg (void)
{
decompose_multiword_subregs ();
decompose_multiword_subregs (false);
return 0;
}
@ -1649,7 +1656,7 @@ rest_of_handle_lower_subreg (void)
static unsigned int
rest_of_handle_lower_subreg2 (void)
{
decompose_multiword_subregs ();
decompose_multiword_subregs (true);
return 0;
}

View file

@ -1,3 +1,7 @@
2012-09-27 Ulrich Weigand <ulrich.weigand@linaro.org>
* gcc.dg/lower-subreg-1.c: Disable on arm-*-* targets.
2012-09-27 Jakub Jelinek <jakub@redhat.com>
PR target/54703

View file

@ -1,4 +1,4 @@
/* { dg-do compile { target { ! { mips64 || { ia64-*-* spu-*-* tilegx-*-* } } } } } */
/* { dg-do compile { target { ! { mips64 || { arm-*-* ia64-*-* spu-*-* tilegx-*-* } } } } } */
/* { dg-options "-O -fdump-rtl-subreg1" } */
/* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && x32 } { "*" } { "" } } */
/* { dg-require-effective-target ilp32 } */