From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 93530 invoked by alias); 25 Jun 2015 23:00:13 -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 93516 invoked by uid 89); 25 Jun 2015 23:00:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-lb0-f176.google.com Received: from mail-lb0-f176.google.com (HELO mail-lb0-f176.google.com) (209.85.217.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 25 Jun 2015 23:00:11 +0000 Received: by lbbvz5 with SMTP id vz5so54356368lbb.0 for ; Thu, 25 Jun 2015 16:00:07 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.112.151.178 with SMTP id ur18mr47571406lbb.59.1435273207360; Thu, 25 Jun 2015 16:00:07 -0700 (PDT) Received: by 10.25.62.129 with HTTP; Thu, 25 Jun 2015 16:00:07 -0700 (PDT) In-Reply-To: References: <87ioaegtcp.fsf@googlemail.com> Date: Thu, 25 Jun 2015 23:37:00 -0000 Message-ID: Subject: Re: Add .def file for public target instructions From: Andrew Pinski To: "H.J. Lu" Cc: 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/msg01885.txt.bz2 On Thu, Jun 25, 2015 at 3:57 PM, H.J. Lu wrote: > 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 automaticall= y, >>> 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 mo= re >>> 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 interf= ace >>> instead of direct calls. Rely on them to do the appropriate as= sertions. >>> * function.c (gen_return_pattern): Likewise. Return an rtx_ins= n *. >>> (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. Because on x86_64 (and all LP64 targets), the comparison gets promoted to long (which is 64bit) so the conversion from unsigned int to long does not lose precision. Thanks, Andrew > > -- > H.J.