From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Matt Wette Newsgroups: gmane.lisp.guile.bugs Subject: bug#38486: specialize-numbers.scm: compute-significant-bits Date: Sat, 21 Mar 2020 19:43:30 -0700 Message-ID: References: <460c32b1-966a-079d-4187-de63f93c6e5f@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="40143"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 To: 38486@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Sun Mar 22 03:44:11 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 1jFqaw-000AMq-QK for guile-bugs@m.gmane-mx.org; Sun, 22 Mar 2020 03:44:10 +0100 Original-Received: from localhost ([::1]:42748 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFqav-0003o4-GV for guile-bugs@m.gmane-mx.org; Sat, 21 Mar 2020 22:44:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:50917) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jFqap-0003ny-6s for bug-guile@gnu.org; Sat, 21 Mar 2020 22:44:04 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jFqan-0000WV-Vr for bug-guile@gnu.org; Sat, 21 Mar 2020 22:44:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:42548) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1jFqan-0000WJ-Qk for bug-guile@gnu.org; Sat, 21 Mar 2020 22:44:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jFqan-0007uX-P4 for bug-guile@gnu.org; Sat, 21 Mar 2020 22:44:01 -0400 X-Loop: help-debbugs@gnu.org In-Reply-To: <460c32b1-966a-079d-4187-de63f93c6e5f@gmail.com> Resent-From: Matt Wette Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Sun, 22 Mar 2020 02:44:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 38486 X-GNU-PR-Package: guile Original-Received: via spool by 38486-submit@debbugs.gnu.org id=B38486.158484502130370 (code B ref 38486); Sun, 22 Mar 2020 02:44:01 +0000 Original-Received: (at 38486) by debbugs.gnu.org; 22 Mar 2020 02:43:41 +0000 Original-Received: from localhost ([127.0.0.1]:48521 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFqaT-0007tl-3w for submit@debbugs.gnu.org; Sat, 21 Mar 2020 22:43:41 -0400 Original-Received: from mail-pg1-f177.google.com ([209.85.215.177]:34981) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jFqaQ-0007tS-I7 for 38486@debbugs.gnu.org; Sat, 21 Mar 2020 22:43:39 -0400 Original-Received: by mail-pg1-f177.google.com with SMTP id 7so5263569pgr.2 for <38486@debbugs.gnu.org>; Sat, 21 Mar 2020 19:43:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-transfer-encoding:content-language; bh=sftyf18EStBteOVwCBzrOrSlbXV04kI5dyA1m/OskqY=; b=aR8Gf+GqQCim5FBCTX/u1IhZSMGmvvVJvUxiyPHu/RhPe/x96od8siCO2COLAPKs47 aIZX3FlASxmiuCZOshpaGPyGOLQnztpE6uHMYReM73Ed1LigP+d+NLWStN6UQvRvQSCL InK3j/VNQxAE5lWlj4PPU49AYnD29BuNj3otVxdTJWsPpMru7wABfzEoaQugwqyoUkHL bL8hSq/aKtj3UvHc/QqIoBKlMLZkVi1S5efYlCSQTguj2KUbHGbejk2ySovVlrZT5eeu l9QlnUUQLxi7xVhVOlvlVBm/q8iu2pUOo7nj+7znklnPlsCLzC9xLuSpCsaMSgKzLVIt hs+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-transfer-encoding:content-language; bh=sftyf18EStBteOVwCBzrOrSlbXV04kI5dyA1m/OskqY=; b=AYG2YCjWdSJ5SaSefyArzdA6uGj+i8fbIZF2B8wm9k7pPSWacKrXLy5hAq4+kFaR7y W5FzwpUAnevPhbg59/i9eraieM/E+NGcJAiebwBxBhUIzOUrwA5KA/ApH8q0xsL0GZsM zych4Inzjld/hT9SJWbyUo33tWF02vE6/F5zqeDZmIjPH9Me+ZZB0snwjfHCQuq7AToO cyI33/9mgPPJyU5YdshYEcfRhJ9ykdrYu/V6EeLc5jghYylqCamGSRk6Mek0fJNV81Lu +eFHkeaKPFvBdkBUMBBwNy4rEa6/YA4iMySSvf9SneDHLIzBjiCSSVbhWnkmvT9lo3aL iXow== X-Gm-Message-State: ANhLgQ1P8MyEL5hpN0TVIQZS8x59giDHtaNMSXaY9X6uZh/aN0L2faO0 8vfb/yLB5vcYwBXpj9q9jiOz+GPy X-Google-Smtp-Source: ADFU+vsGm7kOsQ+FO3l5g5P7dYWS2Z1FINItk/CFoctpzzpYUYsdXGqT4/yNeryIOyRw2D3jBbIevg== X-Received: by 2002:aa7:9844:: with SMTP id n4mr16955471pfq.98.1584845012379; Sat, 21 Mar 2020 19:43:32 -0700 (PDT) Original-Received: from [192.168.2.183] (64-52-176-132.championbroadband.com. [64.52.176.132]) by smtp.gmail.com with ESMTPSA id c9sm8115653pjr.47.2020.03.21.19.43.31 for <38486@debbugs.gnu.org> (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 21 Mar 2020 19:43:31 -0700 (PDT) Content-Language: en-US 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:9680 Archived-At: I've narrowed it down to the named let loop "lp" in this routine in module/language/cps/specialize-numbers.scm (define (compute-significant-bits cps types kfun)   "Given the locally inferred types @var{types}, compute a map of VAR -> BITS indicating the significant bits needed for a variable.  BITS may be #f to indicate all bits, or a non-negative integer indicating a bitmask."   (let ((preds (invert-graph (compute-successors cps kfun))))     (let lp ((worklist (intmap-keys preds)) (visited empty-intset)              (out empty-intmap))       (match (intset-prev worklist)         (#f out)         (label          (let ((worklist (intset-remove worklist label))                (visited* (intset-add visited label)))            (define (continue out*)              (if (and (eq? out out*) (eq? visited visited*))                  (lp worklist visited out)                  (lp (intset-union worklist (intmap-ref preds label))                      visited* out*)))            (define (add-def out var)              (intmap-add out var 0 sigbits-union))            (define (add-defs out vars)              (match vars                (() out)                ((var . vars) (add-defs (add-def out var) vars))))            (define (add-unknown-use out var)              (intmap-add out var (inferred-sigbits types label var)                          sigbits-union))            (define (add-unknown-uses out vars)              (match vars                (() out)                ((var . vars)                 (add-unknown-uses (add-unknown-use out var) vars))))            (continue             (match (intmap-ref cps label)               (($ $kfun src meta self)                (add-def out self))               (($ $kargs names vars ($ $continue k src exp))                (let ((out (add-defs out vars)))                  (match exp                    ((or ($ $const) ($ $prim) ($ $fun) ($ $closure) ($ $rec))                     ;; No uses, so no info added to sigbits.                     out)                    (($ $values args)                     (match (intmap-ref cps k)                       (($ $kargs _ vars)                        (if (intset-ref visited k)                            (fold (lambda (arg var out)                                    (intmap-add out arg (intmap-ref out var)                                                sigbits-union))                                  out args vars)                            out))                       (($ $ktail)                        (add-unknown-uses out args))))                    (($ $call proc args)                     (add-unknown-use (add-unknown-uses out args) proc))                    (($ $callk label proc args)                     (add-unknown-use (add-unknown-uses out args) proc))                    (($ $branch kt ($ $values (arg)))                     (add-unknown-use out arg))                    (($ $branch kt ($ $primcall name args))                     (add-unknown-uses out args))                    (($ $primcall name args)                     (let ((h (significant-bits-handler name)))                       (if h                           (match (intmap-ref cps k)                             (($ $kargs _ defs)                              (h label types out args defs)))                           (add-unknown-uses out args))))                    (($ $prompt escape? tag handler)                     (add-unknown-use out tag)))))               (_ out)))))))))