On Tue, Jun 23, 2015 at 11:41 AM, Richard Sandiford <rdsandif...@googlemail.com> wrote: > [A fair bit later than promised, sorry...] > > Mikhail posted a patch to make genflags generate the default HAVE_foo > and gen_foo definitions that have recently been added to defaults.h: > > https://gcc.gnu.org/ml/gcc-patches/2015-06/msg00723.html > > I agree it'd be a good idea to generate this kind of thing automatically, > but I think we should take the opportunity to move the interface to the > target structure. I.e.: > > HAVE_foo -> targetm.have_foo () > gen_foo -> targetm.gen_foo () > > This should move us closer to the pipedream goal of supporting multiple > targets at once. It should also mean that only the target code depends > on insn-flags.h. > > The patch just moves return and simple_return as an example. I have more > locally (in order to test other code paths), but they're just an obvious > extension of this one. > > The patch relies on the hashing changes in: > > https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01066.html > https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01564.html > > and on this trivial patch: > > https://gcc.gnu.org/ml/gcc-patches/2015-06/msg01604.html > > It seems a bit heavyweight when you just look at these two instructions, > but I think it'll be a saving in the end. > > Bootstrapped & regression-tested on x86_64-linux-gnu. Also tested > via config-list.mk. OK to install? > > Thanks, > Richard > > > gcc/ > * Makefile.in (TARGET_DEF): Add target-insns.def. > (.PRECIOUS, simple_rtl_generated_h): Add insn-target-def.h. > (build/gentarget-def.o): New rule. > (genprogrtl): Add target-def. > * target-insns.def, gentarget-def.c: New files. > * target.def: Add targetm.have_* and targetm.gen_* hooks, > based on the contents of target-insns.def. > * defaults.h (HAVE_simple_return, gen_simple_return): Delete. > (HAVE_return, gen_return): Delete. > * target-def.h: Include insn-target-def.h. > * cfgrtl.c (force_nonfallthru_and_redirect): Use targetm interface > instead of direct calls. Rely on them to do the appropriate > assertions. > * function.c (gen_return_pattern): Likewise. Return an rtx_insn *. > (convert_jumps_to_returns): Use targetm interface instead of > direct calls. > (thread_prologue_and_epilogue_insns): Likewise. > * reorg.c (find_end_label, dbr_schedule): Likewise. > * shrink-wrap.h (SHRINK_WRAPPING_ENABLED): Likewise. > * shrink-wrap.c (convert_to_simple_return): Likewise. > (try_shrink_wrapping): Use SHRINK_WRAPPING_ENABLED. >
This breaks bootstrap on Linux/ia32: https://gcc.gnu.org/ml/gcc-regression/2015-06/msg00649.html ../../src-trunk/gcc/gentarget-def.c: In function âvoid def_target_insn(const char*, const char*)â: ../../src-trunk/gcc/gentarget-def.c:88:34: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare] if (strtol (p + 1, &endptr, 10) != opno -- H.J.