On 09/13/2017 01:21 PM, Richard Sandiford wrote: > I'm not sure the documentation is correct that outprec is always less > than inprec, and each non-default implementation tested for the case > in which it wasn't, but the patch leaves it as-is. While the non-default implementations may always test for that case, I don't think is makes much, if any sense. It could well be all the implementations starting from a common base when TURLY_NOOP_TRUNCATION was added and just getting copied over time.
I'd fully support someone doing some instrumentation to verify we're not seeing outprec >= inprec, then removing those checks independently. > > The SH port had a couple of TRULY_NOOP_TRUNCATION tests that were left > over from the old shmedia port. shmedia is a subset (or mode) for sh5, right? If so, then it can just go away. > > Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu. > Also tested by comparing the testsuite assembly output on at least one > target per CPU directory. OK to install? > > Richard > > > 2017-09-13 Richard Sandiford <richard.sandif...@linaro.org> > Alan Hayard <alan.hayw...@arm.com> > David Sherwood <david.sherw...@arm.com> > > gcc/ > * target.def (truly_noop_truncation): New hook. > (mode_rep_extended): Refer to TARGET_TRULY_NOOP_TRUNCATION rather > than TRULY_NOOP_TRUNCATION. > * hooks.h (hook_bool_uint_uint_true): Declare. > * hooks.c (hook_bool_uint_uint_true): New function. > * doc/tm.texi.in (TRULY_NOOP_TRUNCATION): Replace with... > (TARGET_TRULY_NOOP_TRUNCATION): ...this. > * doc/tm.texi: Regenerate. > * combine.c (make_extraction): Refer to TARGET_TRULY_NOOP_TRUNCATION > rather than TRULY_NOOP_TRUNCATION in comments. > (simplify_comparison): Likewise. > (record_truncated_value): Likewise. > * expmed.c (extract_bit_field_1): Likewise. > (extract_split_bit_field): Likewise. > * convert.c (convert_to_integer_1): Use targetm.truly_noop_truncation > instead of TRULY_NOOP_TRUNCATION. > * function.c (assign_parm_setup_block): Likewise. > * machmode.h (TRULY_NOOP_TRUNCATION_MODES_P): Likewise. > * rtlhooks.c: Include target.h. > * config/aarch64/aarch64.h (TRULY_NOOP_TRUNCATION): Delete. > * config/alpha/alpha.h (TRULY_NOOP_TRUNCATION): Delete. > * config/arc/arc.h (TRULY_NOOP_TRUNCATION): Delete. > * config/arm/arm.h (TRULY_NOOP_TRUNCATION): Delete. > * config/avr/avr.h (TRULY_NOOP_TRUNCATION): Delete. > * config/bfin/bfin.h (TRULY_NOOP_TRUNCATION): Delete. > * config/c6x/c6x.h (TRULY_NOOP_TRUNCATION): Delete. > * config/cr16/cr16.h (TRULY_NOOP_TRUNCATION): Delete. > * config/cris/cris.h (TRULY_NOOP_TRUNCATION): Delete. > * config/epiphany/epiphany.h (TRULY_NOOP_TRUNCATION): Delete. > * config/fr30/fr30.h (TRULY_NOOP_TRUNCATION): Delete. > * config/frv/frv.h (TRULY_NOOP_TRUNCATION): Delete. > * config/ft32/ft32.h (TRULY_NOOP_TRUNCATION): Delete. > * config/h8300/h8300.h (TRULY_NOOP_TRUNCATION): Delete. > * config/i386/i386.h (TRULY_NOOP_TRUNCATION): Delete. > * config/ia64/ia64.h (TRULY_NOOP_TRUNCATION): Delete. > * config/iq2000/iq2000.h (TRULY_NOOP_TRUNCATION): Delete. > * config/lm32/lm32.h (TRULY_NOOP_TRUNCATION): Delete. > * config/m32c/m32c.h (TRULY_NOOP_TRUNCATION): Delete. > * config/m32r/m32r.h (TRULY_NOOP_TRUNCATION): Delete. > * config/m68k/m68k.h (TRULY_NOOP_TRUNCATION): Delete. > * config/mcore/mcore.h (TRULY_NOOP_TRUNCATION): Delete. > * config/microblaze/microblaze.h (TRULY_NOOP_TRUNCATION): Delete. > * config/mips/mips.h (TRULY_NOOP_TRUNCATION): Delete. > * config/mips/mips.c (mips_truly_noop_truncation): New function. > (TARGET_TRULY_NOOP_TRUNCATION): Redefine. > * config/mips/mips.md: Refer to TARGET_TRULY_NOOP_TRUNCATION > rather than TRULY_NOOP_TRUNCATION in comments. > * config/mmix/mmix.h (TRULY_NOOP_TRUNCATION): Delete. > * config/mn10300/mn10300.h (TRULY_NOOP_TRUNCATION): Delete. > * config/moxie/moxie.h (TRULY_NOOP_TRUNCATION): Delete. > * config/msp430/msp430.h (TRULY_NOOP_TRUNCATION): Delete. > * config/nds32/nds32.h (TRULY_NOOP_TRUNCATION): Delete. > * config/nios2/nios2.h (TRULY_NOOP_TRUNCATION): Delete. > * config/nvptx/nvptx.h (TRULY_NOOP_TRUNCATION): Delete. > * config/pa/pa.h (TRULY_NOOP_TRUNCATION): Delete. > * config/pdp11/pdp11.h (TRULY_NOOP_TRUNCATION): Delete. > * config/powerpcspe/powerpcspe.h (TRULY_NOOP_TRUNCATION): Delete. > * config/riscv/riscv.h (TRULY_NOOP_TRUNCATION): Delete. > * config/riscv/riscv.md: Refer to TARGET_TRULY_NOOP_TRUNCATION > rather than TRULY_NOOP_TRUNCATION in comments. > * config/rl78/rl78.h (TRULY_NOOP_TRUNCATION): Delete. > * config/rs6000/rs6000.h (TRULY_NOOP_TRUNCATION): Delete. > * config/rx/rx.h (TRULY_NOOP_TRUNCATION): Delete. > * config/s390/s390.h (TRULY_NOOP_TRUNCATION): Delete. > * config/sh/sh.h (MAYBE_BASE_REGISTER_RTX_P): Remove > TRULY_NOOP_TRUNCATION condition. > (MAYBE_INDEX_REGISTER_RTX_P): Likewise. > (TRULY_NOOP_TRUNCATION): Delete. > * config/sparc/sparc.h (TRULY_NOOP_TRUNCATION): Delete. > * config/spu/spu.h (TRULY_NOOP_TRUNCATION): Delete. > * config/spu/spu.c (spu_truly_noop_truncation): New function. > (TARGET_TRULY_NOOP_TRUNCATION): Redefine. > * config/stormy16/stormy16.h (TRULY_NOOP_TRUNCATION): Delete. > * config/tilegx/tilegx.h (TRULY_NOOP_TRUNCATION): Delete. > * config/tilegx/tilegx.c (tilegx_truly_noop_truncation): New fuction. > (TARGET_TRULY_NOOP_TRUNCATION): Redefine. > * config/tilegx/tilegx.md: Refer to TARGET_TRULY_NOOP_TRUNCATION > rather than TRULY_NOOP_TRUNCATION in comments. > * config/tilepro/tilepro.h (TRULY_NOOP_TRUNCATION): Delete. > * config/v850/v850.h (TRULY_NOOP_TRUNCATION): Delete. > * config/vax/vax.h (TRULY_NOOP_TRUNCATION): Delete. > * config/visium/visium.h (TRULY_NOOP_TRUNCATION): Delete. > * config/xtensa/xtensa.h (TRULY_NOOP_TRUNCATION): Delete. > * system.h (TRULY_NOOP_TRUNCATION): Poison. I really thought we had more variety in the definitions of TRULY_NOOP_TRUNCATION. OK.