summaryrefslogtreecommitdiff
path: root/module/system/vm/assembler.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2023-08-28 12:03:17 +0200
committerAndy Wingo <wingo@pobox.com>2023-08-28 12:11:19 +0200
commitc2cba86785a34351788f52ea4fccf9f10f3a1dee (patch)
tree863e975d9d2728e52d242de954b96a5d71c4a668 /module/system/vm/assembler.scm
parenta52c9cf7c3eefe05da23cd3233e1f9119eb14862 (diff)
downloadguile-c2cba86785a34351788f52ea4fccf9f10f3a1dee.tar.gz
Better compilation of calls to `raise-exception`
Recognize `raise-exception` in the same way we recognize `throw`, though it is a bit less optimized and the boot story is not as complicated. * doc/ref/vm.texi (Non-Local Control Flow Instructions): * libguile/jit.c (compile_unreachable): (compile_unreachable_slow): * libguile/vm-engine.c (VM_NAME): * module/language/cps/compile-bytecode.scm (compile-function): * module/system/vm/assembler.scm (emit-unreachable): Add new "unreachable" instruction, inserted after a call to non-continuable `raise-exception`. * module/language/tree-il/compile-cps.scm (raise-exception): * module/language/tree-il/primitives.scm (*interesting-primitive-names*): Recognize raise-exception, and if it is called with just one argument, prune that branch of the control-flow graph.
Diffstat (limited to 'module/system/vm/assembler.scm')
-rw-r--r--module/system/vm/assembler.scm1
1 files changed, 1 insertions, 0 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 7e0763e53..ef67c1846 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -109,6 +109,7 @@
emit-throw
(emit-throw/value* . emit-throw/value)
(emit-throw/value+data* . emit-throw/value+data)
+ emit-unreachable
emit-pair?
emit-struct?