poly_int: TRULY_NOOP_TRUNCATION
authorRichard Sandiford <richard.sandiford@linaro.org>
Wed, 20 Dec 2017 12:52:12 +0000 (12:52 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 20 Dec 2017 12:52:12 +0000 (12:52 +0000)
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  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

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 <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r255866

gcc/ChangeLog
gcc/config/mips/mips.c
gcc/config/spu/spu.c
gcc/config/tilegx/tilegx.c
gcc/doc/tm.texi
gcc/hooks.c
gcc/hooks.h
gcc/target.def

index 5f26d1bcf8b0134832910d51c4bea4b89d32c8e7..e99f20c2ad05e02ab50206538c016a292a197e93 100644 (file)
@@ -1,3 +1,19 @@
+2017-12-20  Richard Sandiford  <richard.sandiford@linaro.org>
+            Alan Hayward  <alan.hayward@arm.com>
+           David Sherwood  <david.sherwood@arm.com>
+
+       * 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  <richard.sandiford@linaro.org>
            Alan Hayward  <alan.hayward@arm.com>
            David Sherwood  <david.sherwood@arm.com>
index 4f6eb8441fea803c3138be0129b18a94b67ebfaa..f16a67b5e1f8a9473c2a6dd900170df150a19b35 100644 (file)
@@ -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;
 }
index 4b47b4adf9eaffe6c7a2f537433fca2ab76693d7..2800a8f74dd5a0f63f423810cfbb4d3f16aac2b3 100644 (file)
@@ -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;
 }
index 794afee09889c2a4c4051663d510a2070f45ed3a..140cce14ec8d3954e650decbbf0d7219207add2d 100644 (file)
@@ -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;
 }
index 45675e38d71cd351532ece56a003767721be87f2..fc73bb25d5ec989e0cd11657ec4a704a77edcfec 100644 (file)
@@ -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
index 61ff890b45b36813c55ac4e67efdb8c822488fcb..18a957ed72f0ad9ab1aefc87faedadb9ec35b58a 100644 (file)
@@ -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;
 }
index 8dbfd78717f6b7c51d3d2b1b3162b58ed121f31c..b0d830ac5096ad5aa3fa3211e4f8ca3765b93204 100644 (file)
@@ -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);
index 78577d6bf84e9eca0838b784436b56659bdcb178..b1178ca2635ccb02b5244e6e75f9f715cb12812e 100644 (file)
@@ -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