Skip to content
  • Timur Kristóf's avatar
    aco: Treat all booleans as per-lane. · 8995c0b3
    Timur Kristóf authored
    
    
    Previously, instruction selection had two kinds of booleans:
    1. divergent which was per-lane and stored in s2 (VCC size)
    2. uniform which was stored in s1
    Additionally, uniform booleans were made per-lane when they resulted
    from operations which were supported only by the VALU.
    
    To decide which type was used, we relied on the destination size,
    which was not reliable due to the per-lane uniform bools, but it
    mostly works on wave64.
    However, in wave32 mode (where VCC is also s1) this approach
    makes it impossible keep track of which boolean is uniform and
    which is divergent.
    
    This commit makes all booleans per-lane.
    The resulting excess code size will be taken care of by the optimizer.
    
    v2 (by Daniel Schürmann):
    - Better names for some functions
    - Use s_andn2_b64 with exec for nir_op_inot
    - Simplify code due to using s_and_b64 in bool_to_scalar_condition
    
    v3 (by Timur Kristóf):
    - Fix several subgroups regressions
    
    Signed-off-by: default avatarTimur Kristóf <timur.kristof@gmail.com>
    Reviewed-by: default avatarRhys Perry <pendingchaos02@gmail.com>
    Reviewed-by: default avatarDaniel Schürmann <daniel@schuermann.dev>
    8995c0b3