Case where value-register is assigned during a subproblem is actually
authorChris Hanson <org/chris-hanson/cph>
Fri, 15 May 1987 19:46:15 +0000 (19:46 +0000)
committerChris Hanson <org/chris-hanson/cph>
Fri, 15 May 1987 19:46:15 +0000 (19:46 +0000)
interesting.  This needs to be better handled sometime.

v7/src/compiler/rtlgen/rgstmt.scm

index 6b01ed791d9809cc70cac22ae694ddc3f160574e..af2906aca898ed02d98390f36c72e851fbe81370 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgstmt.scm,v 1.1 1987/05/07 00:23:08 cph Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/rtlgen/rgstmt.scm,v 1.2 1987/05/15 19:46:15 cph Exp $
 
 Copyright (c) 1987 Massachusetts Institute of Technology
 
@@ -94,16 +94,19 @@ MIT in each case. |#
        (error "Unknown temporary type" lvalue)))))
 
 (define (assignment/value-register block expression subproblem?)
-  (if subproblem? (error "Return node has next"))
-  (scfg*scfg->scfg!
-   (rtl:make-assignment register:value expression)
-   (if (stack-block? block)
-       (if (stack-parent? block)
-          (rtl:make-message-sender:value (block-frame-size block))
-          (scfg*scfg->scfg!
-           (rtl:make-pop-frame (block-frame-size block))
-           (rtl:make-return)))
-       (rtl:make-return))))
+;  (if subproblem? (error "Return node has next"))
+  (let ((assignment (rtl:make-assignment register:value expression)))
+    (if subproblem?
+       assignment
+       (scfg*scfg->scfg!
+        assignment
+        (if (stack-block? block)
+            (if (stack-parent? block)
+                (rtl:make-message-sender:value (block-frame-size block))
+                (scfg*scfg->scfg!
+                 (rtl:make-pop-frame (block-frame-size block))
+                 (rtl:make-return)))
+            (rtl:make-return))))))
 
 (define-assignment value-ignore-tag
   (lambda (block lvalue rvalue subproblem? wrap-expression)