From 7f579b076a1fc54587538ead07e506e7f06f3fe8 Mon Sep 17 00:00:00 2001 From: Paul Khuong Date: Fri, 7 Jun 2013 22:29:55 -0400 Subject: [PATCH] Silence notes about being specialised EQ templates on x86oids During LTN, we emit notes when the final chosen template costs at least 6 more units than an unapplicable template. Adjust the costs of EQ VOPs to avoid triggering this logic. --- src/compiler/x86-64/pred.lisp | 23 ++++++++++++----------- src/compiler/x86/pred.lisp | 23 ++++++++++++----------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/compiler/x86-64/pred.lisp b/src/compiler/x86-64/pred.lisp index f017a36..9dce152 100644 --- a/src/compiler/x86-64/pred.lisp +++ b/src/compiler/x86-64/pred.lisp @@ -217,7 +217,7 @@ (:conditional :e) (:policy :fast-safe) (:translate eq) - (:generator 8 + (:generator 6 (cond ((sc-is y immediate) (let ((val (tn-value y))) @@ -267,14 +267,15 @@ ;; We only weaken EQL => EQ for characters and fixnums, and detect ;; when types definitely mismatch. No need to import other EQL ;; VOPs (e.g. floats). -(macrolet ((def (eq-name eql-name) +(macrolet ((def (eq-name eql-name cost) `(define-vop (,eq-name ,eql-name) - (:translate eq)))) - (def fast-if-eq-character fast-char=/character) - (def fast-if-eq-character/c fast-char=/character/c) - (def fast-if-eq-fixnum fast-eql/fixnum) - (def fast-if-eq-fixnum/c fast-eql-c/fixnum) - (def fast-if-eq/signed fast-if-eql/signed) - (def fast-if-eq-c/signed fast-if-eql-c/signed) - (def fast-if-eq/unsigned fast-if-eql/unsigned) - (def fast-if-eq-c/unsigned fast-if-eql-c/unsigned)) + (:translate eq) + (:variant-cost ,cost)))) + (def fast-if-eq-character fast-char=/character 3) + (def fast-if-eq-character/c fast-char=/character/c 2) + (def fast-if-eq-fixnum fast-eql/fixnum 3) + (def fast-if-eq-fixnum/c fast-eql-c/fixnum 2) + (def fast-if-eq-signed fast-if-eql/signed 5) + (def fast-if-eq-signed/c fast-if-eql-c/signed 4) + (def fast-if-eq-unsigned fast-if-eql/unsigned 5) + (def fast-if-eq-unsigned/c fast-if-eql-c/unsigned 4)) diff --git a/src/compiler/x86/pred.lisp b/src/compiler/x86/pred.lisp index dd41d52..0288887 100644 --- a/src/compiler/x86/pred.lisp +++ b/src/compiler/x86/pred.lisp @@ -177,7 +177,7 @@ (:info) (:policy :fast-safe) (:translate eq) - (:generator 8 + (:generator 6 (let ((x-val (encode-value-if-immediate x)) (y-val (encode-value-if-immediate y))) (cond @@ -190,14 +190,15 @@ (t (inst cmp x y-val)))))) -(macrolet ((def (eq-name eql-name) +(macrolet ((def (eq-name eql-name cost) `(define-vop (,eq-name ,eql-name) - (:translate eq)))) - (def fast-if-eq-character fast-char=/character) - (def fast-if-eq-character/c fast-char=/character/c) - (def fast-if-eq-fixnum fast-eql/fixnum) - (def fast-if-eq-fixnum/c fast-eql-c/fixnum) - (def fast-if-eq/signed fast-if-eql/signed) - (def fast-if-eq-c/signed fast-if-eql-c/signed) - (def fast-if-eq/unsigned fast-if-eql/unsigned) - (def fast-if-eq-c/unsigned fast-if-eql-c/unsigned)) + (:translate eq) + (:variant-cost ,cost)))) + (def fast-if-eq-character fast-char=/character 3) + (def fast-if-eq-character/c fast-char=/character/c 2) + (def fast-if-eq-fixnum fast-eql/fixnum 3) + (def fast-if-eq-fixnum/c fast-eql-c/fixnum 2) + (def fast-if-eq-signed fast-if-eql/signed 5) + (def fast-if-eq-signed/c fast-if-eql-c/signed 4) + (def fast-if-eq-unsigned fast-if-eql/unsigned 5) + (def fast-if-eq-unsigned/c fast-if-eql-c/unsigned 4)) -- 1.7.10.4