Skip to content
  • Ian Romanick's avatar
    nir: Recognize some more open-coded fmin / fmax · 4addd34b
    Ian Romanick authored
    
    
    This transformation is inexact because section 4.7.1 (Range and
    Precision) says:
    
        Operations and built-in functions that operate on a NaN are not
        required to return a NaN as the result.
    
    The fmin or fmax might not return NaN in cases where the original
    expression would be required to return NaN.
    
    v2: Reorder operands and mark as inexact.  The latter suggested by
    Jason.
    
    shader-db results:
    
    Haswell, Broadwell, and Skylake had similar results. (Skylake shown)
    total instructions in shared programs: 14514817 -> 14514808 (<.01%)
    instructions in affected programs: 229 -> 220 (-3.93%)
    helped: 3
    HURT: 0
    helped stats (abs) min: 1 max: 4 x̄: 3.00 x̃: 4
    helped stats (rel) min: 2.86% max: 4.12% x̄: 3.70% x̃: 4.12%
    
    total cycles in shared programs: 533145211 -> 533144939 (<.01%)
    cycles in affected programs: 37268 -> 36996 (-0.73%)
    helped: 8
    HURT: 0
    helped stats (abs) min: 2 max: 134 x̄: 34.00 x̃: 2
    helped stats (rel) min: 0.02% max: 14.22% x̄: 3.53% x̃: 0.05%
    
    Sandy Bridge and Ivy Bridge had similar results. (Ivy Bridge shown)
    total cycles in shared programs: 257618409 -> 257618403 (<.01%)
    cycles in affected programs: 12582 -> 12576 (-0.05%)
    helped: 3
    HURT: 0
    helped stats (abs) min: 2 max: 2 x̄: 2.00 x̃: 2
    helped stats (rel) min: 0.05% max: 0.05% x̄: 0.05% x̃: 0.05%
    
    No changes on Iron Lake or GM45.
    
    Signed-off-by: default avatarIan Romanick <ian.d.romanick@intel.com>
    Reviewed-by: default avatarJason Ekstrand <jason@jlekstrand.net>
    4addd34b