diff options
author | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:13:59 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:13:59 +0000 |
commit | 3d88d1cdf217be025628d77588e2d247feeebcb3 (patch) | |
tree | c41c4e9ddde50854af5723c91183567add14e12a /gcc/loop-unroll.c | |
parent | c7ad039d8d75666f4f188a913033da36206503b8 (diff) | |
download | gcc-3d88d1cdf217be025628d77588e2d247feeebcb3.zip gcc-3d88d1cdf217be025628d77588e2d247feeebcb3.tar.gz gcc-3d88d1cdf217be025628d77588e2d247feeebcb3.tar.bz2 |
[36/77] Use scalar_int_mode in the RTL iv routines
This patch changes the iv modes in rtx_iv from machine_mode
to scalar_int_mode. It also passes the mode of the iv down
to subroutines; this avoids the previous situation in which
the mode information was sometimes lost and had to be added
by the caller on return.
Some routines already took a mode argument, but the patch
tries to standardise on passing it immediately before the
argument it describes.
gcc/
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* cfgloop.h (rtx_iv): Change type of extend_mode and mode to
scalar_int_mode.
(niter_desc): Likewise mode.
(iv_analyze): Add a mode parameter.
(biv_p): Likewise.
(iv_analyze_expr): Pass the mode paraeter before the rtx it describes
and change its type to scalar_int_mode.
* loop-iv.c: Update commentary at head of file.
(iv_constant): Pass the mode paraeter before the rtx it describes
and change its type to scalar_int_mode. Remove VOIDmode handling.
(iv_subreg): Change the type of the mode parameter to scalar_int_mode.
(iv_extend): Likewise.
(shorten_into_mode): Likewise.
(iv_add): Use scalar_int_mode.
(iv_mult): Likewise.
(iv_shift): Likewise.
(canonicalize_iv_subregs): Likewise.
(get_biv_step_1): Pass the outer_mode parameter before the rtx
it describes and change its mode to scalar_int_mode. Also change
the type of the returned inner_mode to scalar_int_mode.
(get_biv_step): Likewise, turning outer_mode from a pointer
into a direct parameter. Update call to get_biv_step_1.
(iv_analyze_biv): Add an outer_mode parameter. Update calls to
iv_constant and get_biv_step.
(iv_analyze_expr): Pass the mode parameter before the rtx it describes
and change its type to scalar_int_mode. Don't initialise iv->mode
to VOIDmode and remove later checks for its still being VOIDmode.
Update calls to iv_analyze_op and iv_analyze_expr. Check
is_a <scalar_int_mode> when changing the mode under consideration.
(iv_analyze_def): Ignore registers that don't have a scalar_int_mode.
Update call to iv_analyze_expr.
(iv_analyze_op): Add a mode parameter. Reject subregs whose
inner register is not also a scalar_int_mode. Update call to
iv_analyze_biv.
(iv_analyze): Add a mode parameter. Update call to iv_analyze_op.
(biv_p): Add a mode parameter. Update call to iv_analyze_biv.
(iv_number_of_iterations): Use is_a <scalar_int_mode> instead of
separate mode class checks. Update calls to iv_analyze. Remove
fix-up of VOIDmodes after iv_analyze_biv.
* loop-unroll.c (analyze_iv_to_split_insn): Reject registers that
don't have a scalar_int_mode. Update call to biv_p.
From-SVN: r251488
Diffstat (limited to 'gcc/loop-unroll.c')
-rw-r--r-- | gcc/loop-unroll.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 84145bb..8cf305b 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -1509,6 +1509,7 @@ analyze_iv_to_split_insn (rtx_insn *insn) rtx set, dest; struct rtx_iv iv; struct iv_to_split *ivts; + scalar_int_mode mode; bool ok; /* For now we just split the basic induction variables. Later this may be @@ -1518,10 +1519,10 @@ analyze_iv_to_split_insn (rtx_insn *insn) return NULL; dest = SET_DEST (set); - if (!REG_P (dest)) + if (!REG_P (dest) || !is_a <scalar_int_mode> (GET_MODE (dest), &mode)) return NULL; - if (!biv_p (insn, dest)) + if (!biv_p (insn, mode, dest)) return NULL; ok = iv_analyze_result (insn, dest, &iv); |