From: Richard Sandiford Date: Wed, 20 Dec 2017 12:52:12 +0000 (+0000) Subject: poly_int: TRULY_NOOP_TRUNCATION X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=37b2b8f95783b449aca30d32f4c97a4db3bd395e;p=gcc.git poly_int: TRULY_NOOP_TRUNCATION This patch makes TRULY_NOOP_TRUNCATION take the mode sizes as poly_uint64s instead of unsigned ints. The function bodies don't need to change. 2017-12-20 Richard Sandiford Alan Hayward David Sherwood gcc/ * target.def (truly_noop_truncation): Take poly_uint64s instead of unsigned ints. Change default to hook_bool_puint64_puint64_true. * doc/tm.texi: Regenerate. * hooks.h (hook_bool_uint_uint_true): Delete. (hook_bool_puint64_puint64_true): Declare. * hooks.c (hook_bool_uint_uint_true): Delete. (hook_bool_puint64_puint64_true): New function. * config/mips/mips.c (mips_truly_noop_truncation): Take poly_uint64s instead of unsigned ints. * config/spu/spu.c (spu_truly_noop_truncation): Likewise. * config/tilegx/tilegx.c (tilegx_truly_noop_truncation): Likewise. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r255866 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f26d1bcf8b..e99f20c2ad0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2017-12-20 Richard Sandiford + Alan Hayward + David Sherwood + + * target.def (truly_noop_truncation): Take poly_uint64s instead of + unsigned ints. Change default to hook_bool_puint64_puint64_true. + * doc/tm.texi: Regenerate. + * hooks.h (hook_bool_uint_uint_true): Delete. + (hook_bool_puint64_puint64_true): Declare. + * hooks.c (hook_bool_uint_uint_true): Delete. + (hook_bool_puint64_puint64_true): New function. + * config/mips/mips.c (mips_truly_noop_truncation): Take poly_uint64s + instead of unsigned ints. + * config/spu/spu.c (spu_truly_noop_truncation): Likewise. + * config/tilegx/tilegx.c (tilegx_truly_noop_truncation): Likewise. + 2017-12-20 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 4f6eb8441fe..f16a67b5e1f 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -22322,7 +22322,7 @@ mips_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, /* Implement TARGET_TRULY_NOOP_TRUNCATION. */ static bool -mips_truly_noop_truncation (unsigned int outprec, unsigned int inprec) +mips_truly_noop_truncation (poly_uint64 outprec, poly_uint64 inprec) { return !TARGET_64BIT || inprec <= 32 || outprec > 32; } diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index 4b47b4adf9e..2800a8f74dd 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -7185,7 +7185,7 @@ spu_can_change_mode_class (machine_mode from, machine_mode to, reg_class_t) /* Implement TARGET_TRULY_NOOP_TRUNCATION. */ static bool -spu_truly_noop_truncation (unsigned int outprec, unsigned int inprec) +spu_truly_noop_truncation (poly_uint64 outprec, poly_uint64 inprec) { return inprec <= 32 && outprec <= inprec; } diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c index 794afee0988..140cce14ec8 100644 --- a/gcc/config/tilegx/tilegx.c +++ b/gcc/config/tilegx/tilegx.c @@ -5566,7 +5566,7 @@ tilegx_file_end (void) as sign-extended DI values in registers. */ static bool -tilegx_truly_noop_truncation (unsigned int outprec, unsigned int inprec) +tilegx_truly_noop_truncation (poly_uint64 outprec, poly_uint64 inprec) { return inprec <= 32 || outprec > 32; } diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 45675e38d71..fc73bb25d5e 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -10801,7 +10801,7 @@ nevertheless truncate the shift count, you may get better code by overriding it. @end deftypefn -@deftypefn {Target Hook} bool TARGET_TRULY_NOOP_TRUNCATION (unsigned int @var{outprec}, unsigned int @var{inprec}) +@deftypefn {Target Hook} bool TARGET_TRULY_NOOP_TRUNCATION (poly_uint64 @var{outprec}, poly_uint64 @var{inprec}) This hook returns true if it is safe to ``convert'' a value of @var{inprec} bits to one of @var{outprec} bits (where @var{outprec} is smaller than @var{inprec}) by merely operating on it as if it had only diff --git a/gcc/hooks.c b/gcc/hooks.c index 61ff890b45b..18a957ed72f 100644 --- a/gcc/hooks.c +++ b/gcc/hooks.c @@ -133,9 +133,9 @@ hook_bool_mode_uhwi_false (machine_mode, unsigned HOST_WIDE_INT) return false; } -/* Generic hook that takes (unsigned int, unsigned int) and returns true. */ +/* Generic hook that takes (poly_uint64, poly_uint64) and returns true. */ bool -hook_bool_uint_uint_true (unsigned int, unsigned int) +hook_bool_puint64_puint64_true (poly_uint64, poly_uint64) { return true; } diff --git a/gcc/hooks.h b/gcc/hooks.h index 8dbfd78717f..b0d830ac509 100644 --- a/gcc/hooks.h +++ b/gcc/hooks.h @@ -39,7 +39,7 @@ extern bool hook_bool_const_rtx_insn_const_rtx_insn_true (const rtx_insn *, const rtx_insn *); extern bool hook_bool_mode_uhwi_false (machine_mode, unsigned HOST_WIDE_INT); -extern bool hook_bool_uint_uint_true (unsigned int, unsigned int); +extern bool hook_bool_puint64_puint64_true (poly_uint64, poly_uint64); extern bool hook_bool_uint_mode_false (unsigned int, machine_mode); extern bool hook_bool_uint_mode_true (unsigned int, machine_mode); extern bool hook_bool_tree_false (tree); diff --git a/gcc/target.def b/gcc/target.def index 78577d6bf84..b1178ca2635 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -3154,8 +3154,8 @@ is correct for most machines.\n\ If @code{TARGET_MODES_TIEABLE_P} returns false for a pair of modes,\n\ suboptimal code can result if this hook returns true for the corresponding\n\ mode sizes. Making this hook return false in such cases may improve things.", - bool, (unsigned int outprec, unsigned int inprec), - hook_bool_uint_uint_true) + bool, (poly_uint64 outprec, poly_uint64 inprec), + hook_bool_puint64_puint64_true) /* If the representation of integral MODE is such that values are always sign-extended to a wider mode MODE_REP then return