multiple value return optimizations
This commit is contained in:
parent
0991a0d74b
commit
b8cfd43a50
|
@ -19,6 +19,7 @@
|
||||||
assemble-prefix-reference
|
assemble-prefix-reference
|
||||||
assemble-whole-prefix-reference
|
assemble-whole-prefix-reference
|
||||||
assemble-reg
|
assemble-reg
|
||||||
|
munge-label-name
|
||||||
assemble-label
|
assemble-label
|
||||||
assemble-listof-assembled-values
|
assemble-listof-assembled-values
|
||||||
assemble-default-continuation-prompt-tag
|
assemble-default-continuation-prompt-tag
|
||||||
|
@ -295,27 +296,26 @@
|
||||||
"M.a"])))
|
"M.a"])))
|
||||||
|
|
||||||
|
|
||||||
|
(: munge-label-name (Label -> String))
|
||||||
|
(define (munge-label-name a-label)
|
||||||
|
(define chunks
|
||||||
|
(regexp-split #rx"[^a-zA-Z0-9]+"
|
||||||
|
(symbol->string (Label-name a-label))))
|
||||||
|
(cond
|
||||||
|
[(empty? chunks)
|
||||||
|
(error "impossible: empty label ~s" a-label)]
|
||||||
|
[(empty? (rest chunks))
|
||||||
|
(string-append "_" (first chunks))]
|
||||||
|
[else
|
||||||
|
(string-append "_"
|
||||||
|
(first chunks)
|
||||||
|
(apply string-append (map string-titlecase (rest chunks))))]))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(: assemble-label (Label Blockht -> String))
|
(: assemble-label (Label Blockht -> String))
|
||||||
(define (assemble-label a-label Blockht)
|
(define (assemble-label a-label Blockht)
|
||||||
(define a-block (hash-ref Blockht (Label-name a-label)))
|
(munge-label-name a-label))
|
||||||
(cond
|
|
||||||
[(block-looks-like-context-expected-values? a-block)
|
|
||||||
=> (lambda (expected)
|
|
||||||
(format "RT.si_context_expected(~a)" expected))]
|
|
||||||
[else
|
|
||||||
(define chunks
|
|
||||||
(regexp-split #rx"[^a-zA-Z0-9]+"
|
|
||||||
(symbol->string (Label-name a-label))))
|
|
||||||
(cond
|
|
||||||
[(empty? chunks)
|
|
||||||
(error "impossible: empty label ~s" a-label)]
|
|
||||||
[(empty? (rest chunks))
|
|
||||||
(string-append "_" (first chunks))]
|
|
||||||
[else
|
|
||||||
(string-append "_"
|
|
||||||
(first chunks)
|
|
||||||
(apply string-append (map string-titlecase (rest chunks))))])]))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -333,7 +333,7 @@
|
||||||
|
|
||||||
(: assemble-control-stack-label/multiple-value-return (ControlStackLabel/MultipleValueReturn -> String))
|
(: assemble-control-stack-label/multiple-value-return (ControlStackLabel/MultipleValueReturn -> String))
|
||||||
(define (assemble-control-stack-label/multiple-value-return a-csl)
|
(define (assemble-control-stack-label/multiple-value-return a-csl)
|
||||||
"M.c[M.c.length-1].label.mvr")
|
"(M.c[M.c.length-1].label.mvr||RT.si_context_expected_1)")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -151,10 +151,12 @@ EOF
|
||||||
[(= expected 1)
|
[(= expected 1)
|
||||||
(void)]
|
(void)]
|
||||||
[else
|
[else
|
||||||
(fprintf op "~a.mvr=RT.si_context_expected(~a);\n" expected)]))]
|
(fprintf op "~a.mvr=RT.si_context_expected(~a);\n"
|
||||||
|
(munge-label-name (make-Label (LinkedLabel-label stmt)))
|
||||||
|
expected)]))]
|
||||||
[else
|
[else
|
||||||
(fprintf op "~a.mvr=~a;\n"
|
(fprintf op "~a.mvr=~a;\n"
|
||||||
(assemble-label (make-Label (LinkedLabel-label stmt)) blockht)
|
(munge-label-name (make-Label (LinkedLabel-label stmt)))
|
||||||
(assemble-label (make-Label (LinkedLabel-linked-to stmt)) blockht))])
|
(assemble-label (make-Label (LinkedLabel-linked-to stmt)) blockht))])
|
||||||
(next)]
|
(next)]
|
||||||
[(DebugPrint? stmt)
|
[(DebugPrint? stmt)
|
||||||
|
@ -197,11 +199,14 @@ EOF
|
||||||
[(block-looks-like-context-expected-values? a-basic-block)
|
[(block-looks-like-context-expected-values? a-basic-block)
|
||||||
=>
|
=>
|
||||||
(lambda (expected)
|
(lambda (expected)
|
||||||
(fprintf op "~a=RT.si_context_expected(~a);\n"
|
(cond
|
||||||
(assemble-label (make-Label (BasicBlock-name a-basic-block))
|
[(= expected 1)
|
||||||
blockht)
|
'ok]
|
||||||
expected)
|
[else
|
||||||
'ok)]
|
(fprintf op "~a=RT.si_context_expected(~a);\n"
|
||||||
|
(munge-label-name (make-Label (BasicBlock-name a-basic-block)))
|
||||||
|
expected)
|
||||||
|
'ok]))]
|
||||||
[else
|
[else
|
||||||
(default-assemble-basic-block a-basic-block blockht entry-points function-entry-and-exit-names op)]))
|
(default-assemble-basic-block a-basic-block blockht entry-points function-entry-and-exit-names op)]))
|
||||||
|
|
||||||
|
|
|
@ -675,7 +675,8 @@
|
||||||
// Superinstructions to try to reduce code size.
|
// Superinstructions to try to reduce code size.
|
||||||
var si_context_expected = function(n) {
|
var si_context_expected = function(n) {
|
||||||
if (n === 1) { return si_context_expected_1; }
|
if (n === 1) { return si_context_expected_1; }
|
||||||
return function(M) { raiseContextExpectedValuesError(M, n); }
|
var f = function(M) { raiseContextExpectedValuesError(M, n); };
|
||||||
|
return f;
|
||||||
};
|
};
|
||||||
var si_context_expected_1 = function(M) { raiseContextExpectedValuesError(M, 1); }
|
var si_context_expected_1 = function(M) { raiseContextExpectedValuesError(M, 1); }
|
||||||
|
|
||||||
|
@ -686,7 +687,6 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue
Block a user