From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Newsgroups: gmane.lisp.guile.bugs Subject: bug#39573: [3.0.0] Compiler fails to optimize out side-effect-free expression Date: Wed, 12 Feb 2020 12:50:44 +0100 Message-ID: <87k14svxbf.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="4882"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) Cc: wingo@igalia.com To: bug-Guile@gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Wed Feb 12 12:52:24 2020 Return-path: Envelope-to: guile-bugs@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 1j1qZ5-0001Bo-SJ for guile-bugs@m.gmane-mx.org; Wed, 12 Feb 2020 12:52:23 +0100 Original-Received: from localhost ([::1]:36332 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1qZ4-0003FW-Qr for guile-bugs@m.gmane-mx.org; Wed, 12 Feb 2020 06:52:22 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:49718) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1qXo-0001x5-5N for bug-guile@gnu.org; Wed, 12 Feb 2020 06:51:06 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j1qXm-0002SV-AI for bug-guile@gnu.org; Wed, 12 Feb 2020 06:51:04 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]:51936) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j1qXm-0002Rz-0I for bug-guile@gnu.org; Wed, 12 Feb 2020 06:51:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1j1qXl-0004Fo-TJ; Wed, 12 Feb 2020 06:51:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: wingo@igalia.com, bug-guile@gnu.org Resent-Date: Wed, 12 Feb 2020 11:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 39573 X-GNU-PR-Package: guile X-Debbugs-Original-Xcc: wingo@igalia.com Original-Received: via spool by submit@debbugs.gnu.org id=B.158150825116332 (code B ref -1); Wed, 12 Feb 2020 11:51:01 +0000 Original-Received: (at submit) by debbugs.gnu.org; 12 Feb 2020 11:50:51 +0000 Original-Received: from localhost ([127.0.0.1]:57909 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j1qXb-0004FL-6M for submit@debbugs.gnu.org; Wed, 12 Feb 2020 06:50:51 -0500 Original-Received: from lists.gnu.org ([209.51.188.17]:48977) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j1qXY-0004FD-Rz for submit@debbugs.gnu.org; Wed, 12 Feb 2020 06:50:49 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:49659) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j1qXX-0001p8-GC for bug-Guile@gnu.org; Wed, 12 Feb 2020 06:50:48 -0500 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:34078) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1j1qXX-0002Dd-Ca for bug-Guile@gnu.org; Wed, 12 Feb 2020 06:50:47 -0500 Original-Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=35376 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1j1qXX-0001PI-07 for bug-Guile@gnu.org; Wed, 12 Feb 2020 06:50:47 -0500 X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 24 =?UTF-8?Q?Pluvi=C3=B4se?= an 228 de la =?UTF-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.io gmane.lisp.guile.bugs:9569 Archived-At: Hello! Consider this loop: (let loop ((n (expt 2 18)) (i 1)) (unless (zero? n) (loop (- n 1) (logior 0 (ash i 1))))) Guile 2.2 strips away the computation of =E2=80=98i=E2=80=99 (it cannot thr= ow, has no side effects, and the result is unused): --8<---------------cut here---------------start------------->8--- 0 (assert-nargs-ee/locals 1 4) ;; 5 slots (0 args) at (unknown f= ile):16:10 1 (current-module 4)=20=20=20=20=20=20=20=20=20=20=20=20=20=20 2 (static-set! 4 74) ;; #f 4 (toplevel-box 4 84 72 82 #t) ;; `expt' 9 (box-ref 2 4)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20 10 (make-short-immediate 1 10) ;; 2 11 (make-short-immediate 0 74) ;; 18 12 (handle-interrupts) at (unknown f= ile):16:24 13 (call 2 3)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20 15 (receive 0 2 5)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 17 (load-u64 3 0 0) at (unknown f= ile):18:11 20 (br-if-u64-=3D-scm 3 4 #f 12) ;; -> L2 23 (sub/immediate 4 4 1) at (unknown f= ile):21:11 24 (br-if-u64-=3D-scm 3 4 #f 8) ;; -> L2 at (unknown= file):18:11 L1: 27 (handle-interrupts) at (unknown f= ile):21:11 28 (sub/immediate 4 4 1)=20=20=20=20=20=20=20=20=20=20=20 29 (br-if-u64-=3D-scm 3 4 #t -2) ;; -> L1 at (unknown= file):18:11 L2: 32 (make-short-immediate 3 2052) ;; # at (unknown f= ile):21:11 33 (handle-interrupts)=20=20=20=20=20=20=20=20=20=20=20=20=20 34 (return-values 2) ;; 1 value --8<---------------cut here---------------end--------------->8--- However, 3.0.0 keeps the computation of =E2=80=98i=E2=80=99: --8<---------------cut here---------------start------------->8--- 0 (instrument-entry 192) at (unknown f= ile):383:9 2 (assert-nargs-ee/locals 1 5) ;; 6 slots (0 args) 3 (call-scm<-thread 5 62)=20=20=20=20=20=20=20=20=20 5 (static-set! 5 147) ;; #f 7 (static-ref 5 147) ;; #f 9 (immediate-tag=3D? 5 7 0) ;; heap-object? 11 (je 19) ;; -> L2 12 (static-ref 5 140) ;; #f 14 (static-ref 4 150) ;; expt 16 (call-scm<-scm-scm 5 5 4 40)=20=20=20=20 18 (immediate-tag=3D? 5 7 0) ;; heap-object? 20 (jne 8) ;; -> L1 21 (scm-ref/immediate 3 5 1)=20=20=20=20=20=20=20 22 (immediate-tag=3D? 3 4095 2308) ;; undefined? 24 (je 4) ;; -> L1 25 (static-set! 5 129) ;; #f 27 (j 3) ;; -> L2 L1: 28 (throw/value 4 156) ;; #(unbound-variable #f "Unbound v= ariable: ~S") L2: 30 (scm-ref/immediate 2 5 1)=20=20=20=20=20=20=20 31 (make-short-immediate 1 10) ;; 2 32 (make-short-immediate 0 74) ;; 18 33 (handle-interrupts) at (unknown f= ile):383:23 34 (call 3 3)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20 36 (receive 0 3 6)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 38 (make-short-immediate 4 2) ;; 0 at (unknown f= ile):385:11 39 (=3D? 5 4)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20 40 (je 24) ;; -> L4 41 (call-scm<-scm-uimm 5 5 1 3) at (unknown f= ile):388:11 43 (load-s64 3 0 0) at (unknown f= ile):389:11 46 (load-s64 2 0 2)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 49 (ulogior 3 3 2)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 50 (tag-fixnum 3 3)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 51 (=3D? 5 4) at (unknown= file):385:11 52 (je 12) ;; -> L4 L3: 53 (instrument-loop 139)=20=20=20=20=20=20=20=20=20=20=20 55 (handle-interrupts)=20=20=20=20=20=20=20=20=20=20=20=20=20 56 (call-scm<-scm-uimm 5 5 1 3) at (unknown f= ile):388:11 58 (call-scm<-scm-uimm 3 3 1 34) at (unknown f= ile):389:21 60 (call-scm<-scm-scm 3 4 3 10) at (unknown f= ile):389:11 62 (=3D? 5 4) at (unknown= file):385:11 63 (jne -10) ;; -> L3 L4: 64 (make-short-immediate 5 2052) ;; # at (unknown f= ile):388:5 65 (reset-frame 1) ;; 1 slot 66 (handle-interrupts)=20=20=20=20=20=20=20=20=20=20=20=20=20 67 (return-values)=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 --8<---------------cut here---------------end--------------->8--- I=E2=80=99m not sure where the optimization should be taking place. Perhaps it=E2=80=99s just a matter of amount-of-work threshold somewhere? Thanks, Ludo=E2=80=99.