Andy Wingo
cd5ab6377b
Add $switch CPS term kind
...
* module/language/cps.scm ($switch): New term.
* doc/ref/compiler.texi (CPS in Guile): Add documentation.
* module/language/cps.scm (build-term, parse-cps, unparse-cps)
* module/language/cps/closure-conversion.scm (compute-non-operator-uses)
(compute-singly-referenced-labels, rewrite-shared-closure-calls)
(compute-free-vars, convert-one)
* module/language/cps/compile-bytecode.scm (compile-function)
* module/language/cps/contification.scm (compute-singly-referenced-labels)
(compute-contification-candidates, apply-contification)
* module/language/cps/cse.scm (compute-truthy-expressions)
(forward-cont, term-successors, eliminate-common-subexpressions-in-fun)
* module/language/cps/dce.scm (compute-known-allocations)
(compute-live-code, process-eliminations)
* module/language/cps/devirtualize-integers.scm (compute-use-counts)
(peel-trace)
* module/language/cps/effects-analysis.scm (compute-effects)
* module/language/cps/licm.scm (hoist-one, hoist-in-loop)
* module/language/cps/loop-instrumentation.scm (compute-loop-headers)
* module/language/cps/peel-loops.scm (rename-cont)
* module/language/cps/renumber.scm (sort-labels-locally, renumber)
* module/language/cps/rotate-loops.scm (rotate-loop)
(rotate-loops-in-function)
* module/language/cps/self-references.scm (resolve-self-references)
* module/language/cps/simplify.scm (compute-singly-referenced-vars)
(eta-reduce, compute-singly-referenced-labels, beta-reduce)
* module/language/cps/slot-allocation.scm (compute-defs-and-uses)
(add-prompt-control-flow-edges, compute-var-representations)
* module/language/cps/specialize-numbers.scm (compute-significant-bits)
* module/language/cps/split-rec.scm (compute-free-vars)
* module/language/cps/type-fold.scm (local-type-fold)
* module/language/cps/types.scm (successor-count, infer-types)
* module/language/cps/utils.scm (compute-function-body)
(compute-successors, compute-predecessors)
* module/language/cps/verify.scm (compute-available-definitions)
(check-valid-var-uses, check-arities): Add support for new term.
2020-08-12 23:30:08 +02:00
Andy Wingo
73a769fc2b
Add support no closure in $callk
...
* module/language/cps/compile-bytecode.scm (compile-function):
* module/language/cps/contification.scm (compute-contification-candidates):
* module/language/cps/cse.scm (apply-cse):
* module/language/cps/dce.scm (compute-live-code):
* module/language/cps/devirtualize-integers.scm (compute-use-counts):
* module/language/cps/peel-loops.scm (rename-cont):
* module/language/cps/renumber.scm (renumber):
* module/language/cps/rotate-loops.scm (rotate-loop):
* module/language/cps/simplify.scm (compute-singly-referenced-vars):
(beta-reduce):
* module/language/cps/slot-allocation.scm (compute-defs-and-uses):
(compute-lazy-vars):
(compute-shuffles):
(compute-frame-size):
(allocate-lazy-vars):
(allocate-slots):
* module/language/cps/specialize-numbers.scm (compute-significant-bits):
* module/language/cps/verify.scm (check-valid-var-uses): Allow for the
$callk proc to be #f.
* module/language/cps/compile-bytecode.scm (compile-function): Reset
frame to appropriate size.
2019-06-07 17:01:43 +02:00
Andy Wingo
39729e8448
Rename $closure to $const-fun
...
* module/language/cps.scm ($const-fun): Rename from $closure, as we
always use this now with nfree == 0.
* module/language/cps/closure-conversion.scm:
* module/language/cps/compile-bytecode.scm:
* module/language/cps/contification.scm:
* module/language/cps/cse.scm:
* module/language/cps/dce.scm:
* module/language/cps/devirtualize-integers.scm:
* module/language/cps/effects-analysis.scm:
* module/language/cps/licm.scm:
* module/language/cps/peel-loops.scm:
* module/language/cps/renumber.scm:
* module/language/cps/rotate-loops.scm:
* module/language/cps/simplify.scm:
* module/language/cps/slot-allocation.scm:
* module/language/cps/specialize-numbers.scm:
* module/language/cps/types.scm:
* module/language/cps/utils.scm:
* module/language/cps/verify.scm: Adapt users.
2018-10-03 22:58:45 +02:00
Andy Wingo
9f98b4a5b1
Add $code CPS expression type
...
* module/language/cps.scm ($code): New CPS type, for labels as values.
Add cases to all CPS type dispatches. $closure now indicates only
statically allocated closures.
* module/language/cps/closure-conversion.scm (convert-one): Only reify
$closure for statically allocated procedures. Otherwise allocate an
object using low-level primitives.
* module/language/cps/compile-bytecode.scm (compile-function): Remove
make-closure case.
* module/language/cps/slot-allocation.scm (compute-var-representations):
$code produces a u64 value.
* module/system/vm/assembler.scm: Remove make-closure export.
* module/language/cps/contification.scm:
* module/language/cps/cse.scm:
* module/language/cps/dce.scm:
* module/language/cps/devirtualize-integers.scm:
* module/language/cps/effects-analysis.scm:
* module/language/cps/licm.scm:
* module/language/cps/peel-loops.scm:
* module/language/cps/renumber.scm:
* module/language/cps/rotate-loops.scm:
* module/language/cps/simplify.scm:
* module/language/cps/specialize-numbers.scm:
* module/language/cps/types.scm:
* module/language/cps/utils.scm:
* module/language/cps/verify.scm: Add cases for $code.
2018-04-10 17:06:27 +02:00
Andy Wingo
ef23e512b5
Make integer devirtualization less eager
...
* module/language/cps/devirtualize-integers.scm (bailout?): Factor out.
(peel-trace): Adapt to call external bailout? predicate.
(peel-traces-in-function): Don't peel traces whose alternate is a
bailout.
2018-01-07 13:04:20 +01:00
Andy Wingo
d4addf3792
Bug-fix to devirtualize-integers pass
...
* module/language/cps/devirtualize-integers.scm (peel-trace): Only
terminate a trace at a branch if the set of live vars is empty.
2018-01-07 13:04:20 +01:00
Andy Wingo
118f516a8b
$primcall always continues to $kargs
...
* module/language/cps/devirtualize-integers.scm (peel-trace): Update
comment.
* module/language/cps/contification.scm (apply-contification): Update to
never contify a return of $primcall to $kreceive.
* module/language/cps/verify.scm (check-arities): Require that primcalls
continue to $kargs.
2018-01-03 21:26:00 +01:00
Andy Wingo
ad55ee83c3
$throw is a new kind of CPS term
...
* module/language/cps.scm ($throw): New term type that doesn't have a
continuation. Adapt all callers. Remove now-unneeded
"prune-bailouts" pass.
2018-01-03 21:25:55 +01:00
Andy Wingo
ee15ca1455
$prompt is now its own kind of CPS term.
...
* module/language/cps.scm ($prompt): Rework to be its own term kind.
Now $continue always continues to a single continuation. Adapt
callers.
2018-01-03 17:32:43 +01:00
Andy Wingo
afb0a92d50
$branch is now a distinct CPS term type
...
* module/language/cps.scm ($branch): Refactor to be its own CPS term
type, not relying on $continue to specify a continuation (which before
was only for the false case) or a source location. Update allllllll
callers.
2018-01-03 16:16:39 +01:00
Andy Wingo
3600dbf0cc
Refactor to finish the primcalls-take-parameters work
...
* module/language/cps/compile-bytecode.scm (compile-function): Remove
helper to look up constants now that primcalls can take parameters.
* module/language/cps/devirtualize-integers.scm (peel-trace): Remove
extra argument to expression-effects.
* module/language/cps/effects-analysis.scm (constant?, indexed-field):
Remove unused definitions.
(expression-effects): Remove "constants" argument; constants come from
primcall params.
(compute-effects): Don't compute a constants table.
* module/language/cps/slot-allocation.scm ($allocation): Remove
"constant-values" field.
(lookup-constant-value, lookup-maybe-constant-value): Remove; unused.
(allocate-slots): Don't create a constants table.
* module/language/cps/specialize-primcalls.scm
(compute-defining-expressions, compute-constant-values): Move these
definitions here, which were previously in utils.scm
* module/language/cps/utils.scm: Remove moved definitions.
2017-11-24 11:03:46 +01:00
Andy Wingo
5c9398099d
Add integer devirtualization pass.
...
* module/language/cps/devirtualize-integers.scm: New pass.
* module/language/cps/optimize.scm:
* module/Makefile.am:
* am/bootstrap.am: Add new pass.
2017-11-24 11:03:46 +01:00