From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79810 invoked by alias); 25 Jun 2015 22:57:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 79800 invoked by uid 89); 25 Jun 2015 22:57:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-oi0-f45.google.com Received: from mail-oi0-f45.google.com (HELO mail-oi0-f45.google.com) (209.85.218.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 25 Jun 2015 22:57:40 +0000 Received: by oigx81 with SMTP id x81so63597993oig.1 for ; Thu, 25 Jun 2015 15:57:38 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.60.178.33 with SMTP id cv1mr41147563oec.11.1435273057910; Thu, 25 Jun 2015 15:57:37 -0700 (PDT) Received: by 10.76.160.68 with HTTP; Thu, 25 Jun 2015 15:57:37 -0700 (PDT) In-Reply-To: References: <87ioaegtcp.fsf@googlemail.com> Date: Thu, 25 Jun 2015 23:00:00 -0000 Message-ID: Subject: Re: Add .def file for public target instructions From: "H.J. Lu" To: GCC Patches , Mikhail Maltsev , Richard Sandiford Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2015-06/txt/msg01884.txt.bz2 On Thu, Jun 25, 2015 at 1:09 PM, H.J. Lu wrote: > On Tue, Jun 23, 2015 at 11:41 AM, Richard Sandiford > 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 interfa= ce >> instead of direct calls. Rely on them to do the appropriate ass= ertions. >> * 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 =C3=A2void > def_target_insn(const char*, const char*)=C3=A2: > ../../src-trunk/gcc/gentarget-def.c:88:34: error: comparison between > signed and unsigned integer expressions [-Werror=3Dsign-compare] > if (strtol (p + 1, &endptr, 10) !=3D opno > There are unsigned int opno =3D 0; for (const char *p =3D prototype; *p; ++p) if (*p =3D=3D 'x' && ISDIGIT (p[1])) { /* This should be a parameter name of the form "x". That doesn't contribute to the suffix, so skip ahead and process the following character. */ char *endptr; if (strtol (p + 1, &endptr, 10) !=3D opno || (*endptr !=3D ',' && *endptr !=3D ')')) strtol returns long int. Somehow, there is no warning on x86-64. --=20 H.J.