1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-02 21:10:27 +02:00
Commit graph

20647 commits

Author SHA1 Message Date
Ludovic Courtès
2e2e13c40a Update NEWS.
* NEWS: Update.
2020-06-15 10:09:22 +02:00
Ludovic Courtès
c7dec0b231 doc: Remove copy/pasted sentence.
* doc/ref/api-io.texi (I/O Extensions): Remove sentence pasted from
'read' when explaining 'write' method.
2020-06-15 09:28:38 +02:00
Andy Wingo
3c3270491e Update lightening
* libguile/lightening: Merge gitlab.com/wingo/lightening/ from
  3260f7deeb.
2020-06-12 16:17:29 +02:00
Andy Wingo
fc139231a6 Make CSE more robust
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
  I think it's possible to get an orphan loop, with predecessors
  after successors in the original RPO.  Handle that here.
2020-06-12 15:58:54 +02:00
Andy Wingo
3260f7deeb Merge branch 'arm-fix' into 'master'
Fix armv7 with the ARM instruction set

Closes #12

See merge request wingo/lightening!3
2020-06-11 16:11:24 +00:00
Ludovic Courtès
e7398643b2 tests: Avoid dependency on util-linux for 'rev'.
* test-suite/tests/popen.test ("open-process", "pipeline"): Use 'tr'
instead of 'rev' to avoid an extra dependency on util-linux.
2020-06-04 15:38:12 +02:00
Andy Wingo
df22eb5956 Statprof reports primitive names
* module/statprof.scm (program-debug-info-printable): Remove unused
  function.
  (addr->printable): If the addr is a primitive, extract its name.
2020-06-04 11:46:34 +02:00
Andy Wingo
e2066d2e63 Change -O1 compiler to use baseline and also resolve primitives
* bootstrap/Makefile.am (GUILE_OPTIMIZATIONS): Change to just -O1.
* module/language/tree-il/spec.scm (choose-compiler): Use CPS for -O2
  and higher.
* module/system/base/optimize.scm (available-optimizations): CPS for -O2
  and higher, but -Oresolve-primitives now at -O1 also.
2020-06-01 21:15:39 +02:00
Andy Wingo
4c10ea0e57 Fix bug where private bindings would never be sealed
* module/language/tree-il/optimize.scm (make-optimizer): Fix plumbing of
-Oseal-private-bindings / -O3.
2020-05-31 22:05:41 +02:00
Andy Wingo
411954c961 Fix typo causing performance problems!!!
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
  Amazingly this typo causes Guile to be 10% slower or so.  Fixed!
2020-05-29 16:59:08 +02:00
Andy Wingo
4c59ff7e95 CSE forward-propagates changes to CFG
* module/language/cps/cse.scm (propagate-analysis): New helper.
  (eliminate-common-subexpressions-in-fun): Recompute avail and bool set
  in response to simplifications in predecessor CFG.  Allows much better
  compilation of pattern-matching idioms!
2020-05-29 16:33:48 +02:00
Andy Wingo
d9143c32c5 CSE forwards branch predecessors where the branch folds
* module/language/cps/cse.scm (forward-cont, forward-branch)
  (compute-avail-and-bool-edge): New helpers.
  (add-equivalent-expression!): Allow idempotent adds; can happen now
  when revisiting a cont after changes to its predecessors.
  (fold-branch): New helper.
  (eliminate-common-subexpressions-in-fun): Allow for reductions to
  branch predecessors.  In that case, revisit the branch, as the CFG
  will have changed.
2020-05-29 16:33:48 +02:00
Andy Wingo
4837e68315 CSE refactor
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
  Separate the paths for handling expressions and branches.
2020-05-29 16:33:48 +02:00
Andy Wingo
19ab4d6947 Use intmaps in CSE equivalent expression table
* module/language/cps/cse.scm (make-equivalent-expression-table)
  (intmap-select, add-equivalent-expression!)
  (lookup-equivalent-expressions): New helpers.
  (eliminate-common-subexpressions-in-fun): Adapt.
2020-05-29 16:33:48 +02:00
Andy Wingo
a92c623a66 Eager graph pruning in CSE
* module/language/cps/cse.scm (elide-predecessor, prune-branch)
  (prune-successors, term-successors): New helpers.
  (eliminate-common-subexpressions-in-fun): When we modify the CFG,
  update the analysis.  Also, thread the substs map through CSE so that
  closures in high-level CPS can take advantage of eliminated variables.
  (fold-renumbered-functions): Take multiple seeds.
  (eliminate-common-subexpressions): Thread var substs map through CSE.
2020-05-29 16:33:48 +02:00
Andy Wingo
6b1835a169 Add indentation rule for let/ec
* .dir-locals.el: Add rule.
2020-05-29 16:33:48 +02:00
Andy Wingo
1baed76349 Macro fix to CPS build-term
* module/language/cps.scm (build-term): Match on $branch and $throw as
  literals.
2020-05-29 16:33:48 +02:00
Andy Wingo
3c4d4acbd4 Thread flow analysis through CSE pass
* module/language/cps/cse.scm (<analysis>): New data type, grouping
  available expression analysis, predecessor map, etc.
  (eliminate-common-subexpressions-in-fun): Instead of having a static
  analysis, thread it through the CSE pass so that we can update the CFG
  as we go.
2020-05-29 16:33:48 +02:00
Andy Wingo
6fb0635358 CSE eliminates expressions at continuations
* module/language/cps/cse.scm (compute-available-expressions): Take a
  clobber map instead of an effects map.
  (compute-singly-referenced): Remove unused function.
  (eliminate-common-subexpressions-in-fun): Keep a preds map.  Use it
  add entries to the equiv-set and var-substs at expression
  continuations instead of at the expression terms themselves.
2020-05-29 16:33:48 +02:00
Andy Wingo
2318e7238f Refactor CSE to analyze and transform in a single pass
* module/language/cps/cse.scm (compute-truthy-expressions): Operate on a
  single function.
  (eliminate-common-subexpressions-in-fun): Instead of computing a set
  of labels to eliminate, go ahead and do the elimination as we go.
  (fold-renumbered-functions): Can just use a single seed now.
  (eliminate-common-subexpressions): Simplify to just fold over
  functions, building up renamed output as we go.
2020-05-29 16:33:48 +02:00
Andy Wingo
6e91173334 Refactor CSE to take advantage of RPO numbering
* module/language/cps/cse.scm (fold-renumbered-functions): New helper.
  (compute-equivalent-expressions): Use new helper.
  (compute-equivalent-expressions-in-fun): Lift to top-level.
  (eliminate-common-subexpressions): Adapt.
2020-05-29 16:33:48 +02:00
Andy Wingo
cf948e0f6f Renumber before CSE
* module/language/cps/cse.scm (compute-equivalent-subexpressions):
  Assume renumbered program.
  (eliminate-common-subexpressions): Renumber.  Will allow optimizations
  later.
2020-05-29 16:33:48 +02:00
Daniel Llorens
4677c12803 Fix cast enabling SCM_DEBUG_TYPING_STRICTNESS 2 2020-05-28 17:04:14 +02:00
Andy Wingo
d36b9f0422 Slight optimization to invert-bijectiono
* module/language/cps/graphs.scm (invert-bijection): Use a transient
  intmap.
2020-05-28 10:58:09 +02:00
Andy Wingo
11878e1603 Fix truthy expression analysis in CSE
* module/language/cps/cse.scm (compute-truthy-expressions): The "meet"
  function here is union, not intersection.
2020-05-28 10:02:41 +02:00
Ludovic Courtès
a5421d2bb6 web: 'http-get' & co. now honor #:verify-certificate?.
Previously they would always assume #:verify-certificate? #t,
unless #:port was given.

Fixes <https://bugs.gnu.org/40486>.
Reported by Jan Synacek <jsynacek@redhat.com>.

* module/web/client.scm (define-http-verb): Pass #:verify-certificate?
to 'open-socket-for-uri'.
2020-05-27 23:28:14 +02:00
Eric Bavier
431056793a doc: Fix a few typos in vm section.
* doc/ref/vm.texi: Fix some grammar and typos.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-27 22:42:04 +02:00
Jan Synacek
ab861be9b2 doc: Fix typos in the manual.
* doc/ref/api-control.texi:
* doc/ref/r6rs.texi:
* doc/ref/sxml.texi: Fix typos.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-27 22:41:00 +02:00
Ludovic Courtès
9c03e44dcf doc: Rephrase documentation of 'thunk?'.
Fixes <https://bugs.gnu.org/41353>.
Reported by Jan Synacek <jsynacek@redhat.com>.

* doc/ref/api-procedures.texi (Procedure Properties): Rephrase
documentation of 'thunk?'.
* libguile/procs.c (scm_thunk_p): Likewise.
2020-05-27 22:34:49 +02:00
Ludovic Courtès
e7ad7eb90b doc: Reword unclear sentence about programs.
Fixes <https://bugs.gnu.org/41352>.
Reported by Jan Synacek <jsynacek@redhat.com>.

* doc/ref/api-procedures.texi (Compiled Procedures): Clarify wording.
2020-05-27 22:31:18 +02:00
Mathieu Lirzin
02a31d6885 GUILE_PKG bails out when 'pkg-config' is missing
* meta/guile.m4 (GUILE_PKG): Ensure that 'pkg-config' is available. Use
AC_REQUIRE for PKG_PROG_PKG_CONFIG to avoid unnecessary invocations.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-27 22:25:28 +02:00
Alex Sassmannshausen
f55740f0cd doc: Add reference to Guile Hall in the manual.
* doc/ref/scheme-using.texi (Distributing Guile Code): New node.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2020-05-27 22:14:56 +02:00
Ludovic Courtès
db4af31e09 doc: '@' is not equivalent to autoloading.
* doc/ref/api-modules.texi (Creating Guile Modules): Remove paragraph
about '@' as an alternative to #:autoload.
2020-05-22 22:09:51 +02:00
Ludovic Courtès
723e483e7d doc: #:autoload does not pull in all the module bindings.
Reported by Jan Nieuwenhuizen <janneke@gnu.org>.
This is a followup to cb14fd2143.

* doc/ref/api-modules.texi (Creating Guile Modules): Remove bit that
says all the bindings of an autoloaded module become available.
2020-05-22 22:06:34 +02:00
Christopher Baines
ac5df66f1c http: Support CONNECT and PATCH HTTP methods.
PATCH is described by RFC 5789 and CONNECT is described by RFC 7231.

* module/web/http.scm (parse-http-method): Support CONNECT and PATCH.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-18 09:44:00 +02:00
Linus Björnstam
922c3bd55c doc: Fix documentation for srfi-171.
* doc/ref/srfi-modules.texi (SRFI-171): Fix broken documentation.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-18 09:44:00 +02:00
Andy Wingo
087bb683c8 Update match's no-matching-pattern code to use "throw"
* module/ice-9/match.upstream.scm (match-next): Use throw, so that CPS
  can see that there's no fallthrough.
* module/ice-9/match.scm: Add a note about what to do in 3.1 to remove
  the old "error" definition.
2020-05-17 22:26:17 +02:00
Ludovic Courtès
f32ba444dd 'peval' test uses (language tree-il peval).
Fixes an unbound variable error introduced in
2c07a32ad8.

* test-suite/tests/peval.test: Use (language tree-il peval).
(peval): Remove.
2020-05-17 17:55:30 +02:00
Ludovic Courtès
0e912cee24 doc: Tweak 'pipeline' documentation.
* doc/ref/posix.texi (Pipes): Adjust markup.  Simplify example.
2020-05-16 22:36:19 +02:00
Ludovic Courtès
9971861851 Use 'pass-if-equal' for 'pipeline' tests.
* test-suite/tests/popen.test ("open-process", "piped-process")
("piped-process: with output", "pipeline"): Use 'pass-if-equal'.
2020-05-16 22:36:19 +02:00
Rutger van Beusekom
786fbcd327 popen: Add 'pipeline' procedure.
* libguile/posix.c (scm_open_process): Remove.
(scm_piped_process): Add to replace open_process.
* module/ice-9/popen.scm (pipe->fdes): Add to convert pipe pair to fdes pair.
(open-process): Add open-process for backwards compatibility.
(pipeline): Add to implement a pipeline using piped-process.
* doc/ref/posix.texi (Pipes): Document it.
* test-suite/tests/popen.test ("open-process")
("piped-process", "piped-process: with output")
("pipeline"): New tests.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-05-16 22:36:19 +02:00
Andy Wingo
2c07a32ad8 Tree-IL lowerer only loads needed optimizations
* module/language/tree-il/optimize.scm (make-optimizer): New procedure,
  to compute an optimizer given options, lazily loading optimization
  modules.
  (optimize): Use make-optimizer.
  (make-lowerer): Use make-optimizer, so as to only load needed
  optimizations.  Speeds up bootstrap times.
2020-05-14 10:24:08 +02:00
Andy Wingo
033a67d575 Fix ,optimize to be independent of tree-il
* module/system/repl/common.scm (repl-default-options): Add
  optimization-level and warning-level REPL options.
  (repl-optimization-level, repl-warning-level): New accessors,
  defaulting to the default level parameters.
  (repl-expand): Take target language as keyword argument rather than
  hard-coding tree-il.
  (repl-optimize): Take target language as keyword argument.  Use REPL
  optimization and warning levels.  Use generic lowering interface.
2020-05-14 09:17:14 +02:00
Andy Wingo
7df3f3414b More robust reduction of equal? and eqv?
* module/language/tree-il/primitives.scm (expand-eq): Just expand out to
  binary comparisons.  Also expand eq?, which was missing.  Leave
  strength reduction to peval.
  (character-comparison-expander): Move down, as it depends on <, <=,
  and so on.
* module/language/tree-il/peval.scm (peval): Robustly reduce equal? and
  eqv?.
* test-suite/tests/peval.test ("partial evaluation"): Expect fixnum
  comparison to reduce to eq?.
  ("eqv?", "equal?"): A new battery of tests.
* test-suite/tests/tree-il.test ("primitives"): Remove reduction tests.
2020-05-13 15:51:58 +02:00
Andy Wingo
498428fbef Add with-lexicals helper; fix bug in (equal? #t (foo) #t)
* module/language/tree-il.scm (with-lexicals): New public helper.
* .dir-locals.el (with-lexicals): Add indentation rule.
* module/language/tree-il/compile-bytecode.scm (canonicalize): Use
  with-lexicals.
* module/language/tree-il/compile-cps.scm (canonicalize): Use
  with-lexicals from tree-il.
* module/language/tree-il/primitives.scm (chained-comparison-expander):
  Remove duplicate expander definitions for <, <=, and so on.
* module/language/tree-il/primitives.scm (maybe-simplify-to-eq): Avoid
  inadvertent code duplication by using with-lexicals.
  (expand-chained-comparisons): Likewise.
  (call-with-prompt): Simplify to use with-lexicals.
2020-05-13 14:51:56 +02:00
Andy Wingo
31bb0eea8c Another minor module compile order tweak
* module/Makefile.am (SOURCES): Put Tree-IL compiler early too, so that
  subsequent compilations can benefit from CPS speedups.
2020-05-13 09:39:41 +02:00
Andy Wingo
c6636ff312 Bump objcode minor version
* libguile/loader.h (SCM_OBJCODE_MINOR_VERSION):
* module/system/vm/assembler.scm (*bytecode-minor-version*): Bump, so
  that compiled files from Guile 3.0.3 will error when loaded on 3.0.2.
2020-05-13 09:37:54 +02:00
Andy Wingo
a165c49b29 Minor module/Makefile order tweak
* module/Makefile.am (ice-9/psyntax-pp.go): Add GUILE_OPTIMIZATIONS
  argument.
  (SOURCES): Reorder a bit for speed when bootstrapping.
2020-05-13 09:16:11 +02:00
Andy Wingo
c5da9d65a7 Fix optimizers after language lowerer refactor
* module/language/cps/optimize.scm (define-optimizer):
  (optimize-higher-order-cps, optimize-first-order-cps):
  (make-cps-lowerer):
* module/language/tree-il/optimize.scm (optimize, make-lowerer): In an
  embarrassing bug, after parsing optimization arguments, we were
  aconsing them instead of the expected cons*.  This meant the bootstrap
  was running all Tree-IL optimizations!  Change to have optimizers not
  have defaults and use alists after parsing.
2020-05-13 09:04:16 +02:00
Andy Wingo
132292fcb3 Punt more CPS compiler until later in bootstrap
* am/bootstrap.am (SOURCES): Punt CPS compiler until later.
2020-05-13 09:04:16 +02:00