On 07/13/2017 02:51 AM, Richard Sandiford wrote: > 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-07-13 Richard Sandiford <richard.sandif...@linaro.org> > Alan Hayward <alan.hayw...@arm.com> > David Sherwood <david.sherw...@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. OK. jeff