Skip to content
  • Ian Romanick's avatar
    nir/range-analysis: Handle constants in nir_op_mov just like nir_op_bcsel · 6934bc4f
    Ian Romanick authored and Dylan Baker's avatar Dylan Baker committed
    
    
    I discovered this while looking at a shader that was hurt by some other
    work I'm doing.  When I examined the changes, I was confused that one
    instance of a comparison that was used in a discard_if was (incorrectly)
    eliminated, while another instance used by a bcsel was (correctly) not
    eliminated.  I had to use NIR_PRINT=true to see exactly where things
    when wrong.
    
    A bunch of shaders in Goat Simulator, Dungeon Defenders, Sanctum 2, and
    Strike Suit Zero were impacted.
    
    Reviewed-by: default avatarCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
    Fixes: 405de7cc ("nir/range-analysis: Rudimentary value range analysis pass")
    
    All Intel platforms had similar results. (Ice Lake shown)
    total instructions in shared programs: 16280659 -> 16281075 (<.01%)
    instructions in affected programs: 21042 -> 21458 (1.98%)
    helped: 0
    HURT: 136
    HURT stats (abs)   min: 1 max: 9 x̄: 3.06 x̃: 3
    HURT stats (rel)   min: 1.16% max: 6.12% x̄: 2.23% x̃: 2.03%
    95% mean confidence interval for instructions value: 2.93 3.19
    95% mean confidence interval for instructions %-change: 2.08% 2.37%
    Instructions are HURT.
    
    total cycles in shared programs: 367168270 -> 367170313 (<.01%)
    cycles in affected programs: 172020 -> 174063 (1.19%)
    helped: 14
    HURT: 111
    helped stats (abs) min: 2 max: 80 x̄: 21.21 x̃: 9
    helped stats (rel) min: 0.10% max: 4.47% x̄: 1.35% x̃: 0.79%
    HURT stats (abs)   min: 2 max: 584 x̄: 21.08 x̃: 5
    HURT stats (rel)   min: 0.12% max: 17.28% x̄: 1.55% x̃: 0.40%
    95% mean confidence interval for cycles value: 5.41 27.28
    95% mean confidence interval for cycles %-change: 0.64% 1.81%
    Cycles are HURT.
    
    (cherry picked from commit 7dba7df5)
    6934bc4f