Skip to content
  • Kenneth Graunke's avatar
    glsl: Don't do constant propagation in opt_constant_folding. · 8e71ac73
    Kenneth Graunke authored
    
    
    opt_constant_folding is supposed to fold trees of constants into a
    single constant.  Surprisingly, it was also propagating constant values
    from variables into expression trees - even when the result couldn't be
    folded together.  This is opt_constant_propagation's job.
    
    The ir_dereference_variable::constant_expression_value() method returns
    a clone of var->constant_value.  So we would replace the dereference
    with a constant, propagating it into the tree.
    
    Skip over ir_dereference_variable to avoid this surprising behavior.
    However, add code to explicitly continue doing it in the constant
    propagation pass, as it's useful to do so.
    
    shader-db statistics on Broadwell:
    
    total instructions in shared programs: 8905349 -> 8905126 (-0.00%)
    instructions in affected programs: 30100 -> 29877 (-0.74%)
    helped: 93
    HURT: 20
    
    total cycles in shared programs: 71017030 -> 71015944 (-0.00%)
    cycles in affected programs: 132456 -> 131370 (-0.82%)
    helped: 54
    HURT: 45
    
    The only hurt programs are by a single instruction, while the helped
    ones are helped by 1-4 instructions.
    
    Signed-off-by: Kenneth Graunke's avatarKenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: default avatarIan Romanick <ian.d.romanick@intel.com>
    8e71ac73