mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Use transient intset/intmap optimizations when computing SCCs
* module/language/cps/graphs.scm (compute-sorted-strongly-connected-components): Use more transient data structures.
This commit is contained in:
parent
60c1e5cc42
commit
47dce42edb
1 changed files with 16 additions and 14 deletions
|
@ -1,6 +1,6 @@
|
|||
;;; Continuation-passing style (CPS) intermediate language (IL)
|
||||
|
||||
;; Copyright (C) 2013-2015, 2017-2021 Free Software Foundation, Inc.
|
||||
;; Copyright (C) 2013-2015, 2017-2021, 2025 Free Software Foundation, Inc.
|
||||
|
||||
;;;; This library is free software; you can redistribute it and/or
|
||||
;;;; modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -227,23 +227,25 @@ connected components in sorted order."
|
|||
start)
|
||||
start))
|
||||
(define node-components
|
||||
(persistent-intmap
|
||||
(intmap-fold (lambda (id nodes out)
|
||||
(intset-fold (lambda (node out) (intmap-add out node id))
|
||||
(intset-fold (lambda (node out) (intmap-add! out node id))
|
||||
nodes out))
|
||||
components
|
||||
empty-intmap))
|
||||
empty-intmap)))
|
||||
(define (node-component node)
|
||||
(intmap-ref node-components node))
|
||||
(define (component-successors id nodes)
|
||||
(intset-remove
|
||||
(persistent-intset
|
||||
(intset-fold (lambda (node out)
|
||||
(intset-fold
|
||||
(lambda (successor out)
|
||||
(intset-add out (node-component successor)))
|
||||
(intset-add! out (node-component successor)))
|
||||
(intmap-ref edges node)
|
||||
out))
|
||||
nodes
|
||||
empty-intset)
|
||||
empty-intset))
|
||||
id))
|
||||
(define component-edges
|
||||
(intmap-map component-successors components))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue