From 45d040c9553aa998d7fca0c51a34115a992be61f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 13 Dec 2016 19:03:24 -0500 Subject: [PATCH] Experiment with always inlining certain prims --- scheme/cyclone/cps-optimizations.sld | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index 1bae8a45..70f881cd 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -602,10 +602,12 @@ (one-instance-of-new-mutable-obj? (cdr exp) (ast:lambda-formals->list (car exp))) - (inline-prim-call? - (ast:lambda-body (car exp)) - (prim-calls->arg-variables (cdr exp)) - (ast:lambda-formals->list (car exp))))) + (or + (prim-calls-inlinable? (cdr exp)) + (inline-prim-call? + (ast:lambda-body (car exp)) + (prim-calls->arg-variables (cdr exp)) + (ast:lambda-formals->list (car exp)))))) ) (let ((args (cdr exp))) (for-each @@ -656,6 +658,12 @@ Cyc-compilation-environment ))) + (define (prim-calls-inlinable? prim-calls) + (every + (lambda (prim-call) + (prim:immutable-args/result? (car prim-call))) + prim-calls)) + ;; Check each pair of primitive call / corresponding lambda arg, ;; and verify that if the primitive call creates a new mutable ;; object, that only one instance of the object will be created.