guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] branch master updated: Fix baseline compilation of condi


From: Andy Wingo
Subject: [Guile-commits] branch master updated: Fix baseline compilation of conditionals
Date: Mon, 04 May 2020 16:29:32 -0400

This is an automated email from the git hooks/post-receive script.

wingo pushed a commit to branch master
in repository guile.

The following commit(s) were added to refs/heads/master by this push:
     new cfdaf35  Fix baseline compilation of conditionals
cfdaf35 is described below

commit cfdaf35d7380c790c152762a5b155a8dde8ddf83
Author: Andy Wingo <address@hidden>
AuthorDate: Mon May 4 22:28:34 2020 +0200

    Fix baseline compilation of conditionals
    
    * module/language/tree-il/compile-bytecode.scm (canonicalize): Don't add
      an extra false? around predicates.
      (compile-closure): Fix predicate comparison instructions.
---
 module/language/tree-il/compile-bytecode.scm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/module/language/tree-il/compile-bytecode.scm 
b/module/language/tree-il/compile-bytecode.scm
index d0e5271..e2eaabf 100644
--- a/module/language/tree-il/compile-bytecode.scm
+++ b/module/language/tree-il/compile-bytecode.scm
@@ -399,6 +399,7 @@
   (define (finish-conditional exp)
     (define (true? x) (match x (($ <const> _ val) val) (_ #f)))
     (define (false? x) (match x (($ <const> _ val) (not val)) (_ #f)))
+    (define (predicate? name) (primitive-predicate? (lookup-primitive name)))
     (match exp
       (($ <conditional> src ($ <conditional> _ test (? true?) (? false?))
           consequent alternate)
@@ -406,6 +407,8 @@
       (($ <conditional> src ($ <conditional> _ test (? false?) (? true?))
           consequent alternate)
        (finish-conditional (make-conditional src test alternate consequent)))
+      (($ <conditional> src ($ <primcall> _ (? predicate?)))
+       exp)
       (($ <conditional> src test consequent alternate)
        (make-conditional src (make-primcall src 'false? (list test))
                          alternate consequent))))
@@ -864,8 +867,8 @@ in the frame with for the lambda-case clause @var{clause}."
                (kf (gensym "false"))
                (kdone (gensym "done")))
            (match args
-             ((a) (emit asm args a kf))
-             ((a b) (emit asm args a b kf)))
+             ((a) (emit asm a kf))
+             ((a b) (emit asm a b kf)))
            (for-context consequent env ctx)
            (unless (eq? ctx 'tail)
              (emit-j asm kdone))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]