Skip to content
Snippets Groups Projects
Forked from cmucl / cmucl
Source project has a limited visibility.
  • dtc's avatar
    1a0a7672
    Merge in the revised derive-type optimisers from Raymond Toy: · 1a0a7672
    dtc authored
    compiler/srctran.lisp
    
    o  Replaced all of the old optimizer routines with new ones that should
    work much better.  Optimizers should now handle all union types and most
    member types.  NOTE:  for some reason a member type with both numbers
    and non-numbers isn't quite handled correctly.  The optimizer is only
    passed the elements of the member type that are numbers; it never sees
    the non-number elements of the member type.
    
    o  Fixed a bug in bound-func.  Since all of the FP traps are turned off,
    we now need to check in case the function returns things like infinity
    and convert them to nil.
    
    o  Fixed a bug in the computation of bounds for rem.  Invalid intervals
    were sometimes returned.
    
    compiler/float-tran.lisp
    
    o  Mods to handle the changes in srctran.lisp.
    
    o  All of the optimizers (from propagate-float and propagate-fun) should
    now handle union types and member types.
    
    o  Fixed a bug in the atan optimizer for two args with at least one of
    them not being a real.
    
    o  For functions that return (or float (complex float)), we try to be
    more careful and compute the bounds for the float part, since we usually
    have them.  Not sure what we gain, though.
    
    -=-=-=-
    
    Plus some further cleanups and fixes by Douglas Crosher:
    
    o Merge with the latest verion of float-trans: CIS transform; no
    result types on complex function transforms.
    
    o Can use a common scale-float-derive-type-aux function.
    
    o complex-derive-type-aux-2 was broken, needed updating to handle
    changes.
    
    o For sqrt and log return an (or float complex) type if the argument
    type includes 0.0 in its range as 0.0 = -0.0 so the argument may also
    be -0.0.
    
    o A number of the optimizers returned a complex float with invalid
    intervals just copied from the argument - strip the intervals from the
    returned type in these cases.
    
    o Note no expt optimiser.
    1a0a7672
    History
    Merge in the revised derive-type optimisers from Raymond Toy:
    dtc authored
    compiler/srctran.lisp
    
    o  Replaced all of the old optimizer routines with new ones that should
    work much better.  Optimizers should now handle all union types and most
    member types.  NOTE:  for some reason a member type with both numbers
    and non-numbers isn't quite handled correctly.  The optimizer is only
    passed the elements of the member type that are numbers; it never sees
    the non-number elements of the member type.
    
    o  Fixed a bug in bound-func.  Since all of the FP traps are turned off,
    we now need to check in case the function returns things like infinity
    and convert them to nil.
    
    o  Fixed a bug in the computation of bounds for rem.  Invalid intervals
    were sometimes returned.
    
    compiler/float-tran.lisp
    
    o  Mods to handle the changes in srctran.lisp.
    
    o  All of the optimizers (from propagate-float and propagate-fun) should
    now handle union types and member types.
    
    o  Fixed a bug in the atan optimizer for two args with at least one of
    them not being a real.
    
    o  For functions that return (or float (complex float)), we try to be
    more careful and compute the bounds for the float part, since we usually
    have them.  Not sure what we gain, though.
    
    -=-=-=-
    
    Plus some further cleanups and fixes by Douglas Crosher:
    
    o Merge with the latest verion of float-trans: CIS transform; no
    result types on complex function transforms.
    
    o Can use a common scale-float-derive-type-aux function.
    
    o complex-derive-type-aux-2 was broken, needed updating to handle
    changes.
    
    o For sqrt and log return an (or float complex) type if the argument
    type includes 0.0 in its range as 0.0 = -0.0 so the argument may also
    be -0.0.
    
    o A number of the optimizers returned a complex float with invalid
    intervals just copied from the argument - strip the intervals from the
    returned type in these cases.
    
    o Note no expt optimiser.