master: Don't let the CONJUGATE VOPs be overridden by a transform

stassats via Sbcl-commits <[email protected]> Fri, 01 May 2026 00:07:14 +0000
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  373080b6a4e13da702b983426a1ec76e92cecc54 (commit)
      from  64efbd61f73d03db0f093053fb826bfddb50c9c6 (commit)

- Log -----------------------------------------------------------------
commit 373080b6a4e13da702b983426a1ec76e92cecc54
Author: Stas Boukarev <[email protected]>
Date:   Fri May 1 03:03:37 2026 +0300

    Don't let the CONJUGATE VOPs be overridden by a transform
---
 src/compiler/arm64/arith.lisp  | 2 +-
 src/compiler/arm64/float.lisp  | 6 ++++++
 src/compiler/float-tran.lisp   | 3 ++-
 src/compiler/x86-64/float.lisp | 6 ++++++
 tests/timing                   | 4 +++-
 5 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/compiler/arm64/arith.lisp b/src/compiler/arm64/arith.lisp
index c7cc42f3d..a0e063f40 100644
--- a/src/compiler/arm64/arith.lisp
+++ b/src/compiler/arm64/arith.lisp
@@ -3905,7 +3905,7 @@
   (:generator 1
     (inst rbit res arg)))
 
-(deftransform abs ((x) (:or ((signed-word) signed-word)) * :vop t)
+(deftransform abs ((x) ((signed-word) signed-word) * :vop t)
   t)
 
 (define-vop (abs)
diff --git a/src/compiler/arm64/float.lisp b/src/compiler/arm64/float.lisp
index acbb7aaa0..2af5cd1ff 100644
--- a/src/compiler/arm64/float.lisp
+++ b/src/compiler/arm64/float.lisp
@@ -413,6 +413,12 @@
   (frob %negate/complex-double-float s-fneg %negate
         complex-double-reg complex-double-float :2d))
 
+
+(deftransform conjugate ((number) (:or ((complex-double-float) *)
+                                       ((complex-single-float) *)) *
+                         :vop t)
+  t)
+
 (macrolet ((frob (name sc type real-inst-size complex-inst-size)
              `(define-vop (,name)
                 (:args (x :scs (,sc)))
diff --git a/src/compiler/float-tran.lisp b/src/compiler/float-tran.lisp
index c809e6a37..dc448cc29 100644
--- a/src/compiler/float-tran.lisp
+++ b/src/compiler/float-tran.lisp
@@ -689,7 +689,8 @@
 (deftransform conjugate ((x) (real))
   'x)
 
-(deftransform conjugate ((x) (complex))
+(deftransform conjugate ((x) (complex) * :node node)
+  (delay-ir1-transform node :ir1-phases)
   `(complex (realpart x) (- (imagpart x))))
 
 ;;; The number is of type REAL.
diff --git a/src/compiler/x86-64/float.lisp b/src/compiler/x86-64/float.lisp
index 723981572..7a9101251 100644
--- a/src/compiler/x86-64/float.lisp
+++ b/src/compiler/x86-64/float.lisp
@@ -854,6 +854,12 @@
      (note-float-location 'sqrt vop x)
      (inst sqrtss y x)))
 
+
+(deftransform conjugate ((number) (:or ((complex-double-float) *)
+                                       ((complex-single-float) *)) *
+                         :vop t)
+  t)
+
 (macrolet ((frob ((name translate sc type) &body body)
              `(define-vop (,name)
                   (:args (x :scs (,sc) :target y))
diff --git a/tests/timing b/tests/timing
index 8703981d3..e1b8fd2aa 100644
--- a/tests/timing
+++ b/tests/timing
@@ -330,4 +330,6 @@
 ("iso-8859-2.pure" 765)
 ("iso-8859-3.pure" 765)
 ("fifo-slow.impure" 2070)
-("utf-8.pure" 700))
+("utf-8.pure" 700)
+("threads-slow.pure" 6296)
+("semaphore.pure" 7578))

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL