Skip to content
  • rtoy's avatar
    This big of code causes CMUCL to spend huge amounts of time trying to · cb674c89
    rtoy authored
    simplify the union of disjoint double-float types:
    
    (defun foo (arg)
      (declare (type double-double-float arg)
    	   (optimize (speed 3) (space 0)))
      (let* ((x arg)
    	 (xx 0w0)
    	 (k 0)
    	 (px (coerce k 'double-double-float))
    	 (qx 0w0))
        (declare (type double-double-float x xx px qx)
    	     (notinline poly-eval poly-eval-1))
        (setf x (- (- x (* px log2-c1)) (* px log2-c2)))
        (+ x 0d0)
        ))
    
    Fix it:
    
    code/type.lisp:
    o Rename SIMPLIFY-BIG-INTEGER-UNION to SIMPLIFY-BIG-UNION
    o SIMPLIFY-BIG-UNION takes an extra arg to specify the resulting type.
    o Modify SIMPLIFY-UNIONS to handle float unions as well as integer
      unions.
    
    general-info/release-20a.txt:
    o Update
    cb674c89