From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.devel Subject: Re: Add more supported primitives in libgccjit IR Date: Mon, 21 Aug 2023 14:12:24 +0300 Message-ID: <83sf8cvecn.fsf@gnu.org> References: <20230809094655.793FC18A4654@snark.thyrsus.com> <87msym9i4r.fsf@dataswamp.org> <877cpp914t.fsf@localhost> <83fs4dwwdo.fsf@gnu.org> <874jkt90a5.fsf@localhost> <87y1i57jqi.fsf@localhost> <87pm3h7h8k.fsf@localhost> <87h6ot7cf3.fsf@localhost> <87edjx7c0b.fsf@localhost> <831qfxw2cx.fsf@gnu.org> <87v8d95918.fsf@localhost> <87zg2lav4b.fsf@yahoo.com> <87sf8d57wf.fsf@localhost> <87r0nxatu1.fsf@yahoo.com> <87pm3h56ig.fsf@localhost> <87edjxarhz.fsf@yahoo.com> <87edjw4uw4.fsf@localhost> Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22288"; mail-complaints-to="usenet@ciao.gmane.io" Cc: luangruo@yahoo.com, akrl@sdf.org, ams@gnu.org, incal@dataswamp.org, emacs-devel@gnu.org To: Ihor Radchenko Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Aug 21 13:12:24 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qY2pc-0005bb-H6 for ged-emacs-devel@m.gmane-mx.org; Mon, 21 Aug 2023 13:12:24 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qY2pR-0008MH-Kj; Mon, 21 Aug 2023 07:12:13 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qY2pP-0008Lk-4M for emacs-devel@gnu.org; Mon, 21 Aug 2023 07:12:11 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qY2pM-00026w-4J; Mon, 21 Aug 2023 07:12:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=WGSs5l1oxn6iePF9CLnXC0b+dcWDoQWlZjvqJia2y/0=; b=r/UpAPIE3iMI j41rGmnNtCGgWYMqkmaggkbVmibCHQGEFr7pcrQ157u/sFucjKRAdFPb+l/moR31rRopAg60pVbnp e/stGTmH2K6SjIEzNHh5HYBu0Hm+pdUPNckZPOupylyLJ1oMMiWWRszjjGxak4unj8X7fwQIRcIeh t7xpE2ddEg+anvLG7Fo4r0TF2BwwdNEWWmqUzYgbVRDwG8ZWWhAchxK4iYWcuSnjZFbWU3DUiopnp +HSbGzkXImUKAdahbEsURTSATznxTSu65uFFAVJKR3Eofc8eyysDrSd9lLNnFyTzlivmE4eXm59D9 kTLCC/VoRczgpTIIE7IT+Q==; In-Reply-To: <87edjw4uw4.fsf@localhost> (message from Ihor Radchenko on Mon, 21 Aug 2023 09:17:15 +0000) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:309056 Archived-At: > From: Ihor Radchenko > Cc: Eli Zaretskii , ams@gnu.org, incal@dataswamp.org, > emacs-devel@gnu.org > Date: Mon, 21 Aug 2023 09:17:15 +0000 > > Po Lu writes: > > > Ihor Radchenko writes: > > > >> But let me rephrase it in other terms: what you propose will require > >> maintaining two separate implementations of subroutines - one in C, and > >> one specially tailored to GCC JIT psudocode. This may be doable for a > >> small set of core primitives, but not scalable if we want to make more > >> subroutines benefit from GGC JIT optimizations. > > > > I'm inclined to believe that type checks within those more complex > > functions do not contribute so much to the runtime of most > > native-compiled functions as the small set of arithmetic primitives do. > > I am pretty sure that it depends on the specific use case. > On average, you might be right though. > > Just to get something going, I executed > https://elpa.gnu.org/packages/elisp-benchmarks.html benchmarks and > looked into the primitives that take significant amount of time: > > 3.85% emacs emacs [.] arith_driver > 2.62% emacs emacs [.] Fgtr > 2.31% emacs emacs [.] check_number_coerce_marker > 2.24% emacs emacs [.] Fmemq > 2.20% emacs emacs [.] Flss > 1.56% emacs emacs [.] arithcompare > 1.12% emacs emacs [.] Faset > 1.10% emacs emacs [.] Fcar_safe > 0.97% emacs emacs [.] Faref > 0.94% emacs emacs [.] Fplus > 0.93% emacs emacs [.] float_arith_driver > 0.58% emacs emacs [.] Feqlsign > > We may consider directly supporting some of these functions in native > compile libgccjit IR code to get rid of runtime type checks. Didn't you just explained, above, how this would create separate versions of the same code that work differently, and how that should be avoided?