mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 07:58:07 +02:00
gallivm/nir: Call nir_lower_bool_to_int32 after nir_opt_algebraic_late
All of the opcodes in nir_opt_algebraic_late are the unsized (1-bit)
versions. If the lowering to int32 happens first, many of the
optimizations and lowerings won't happen.
Of particular importance is the lowering of fisfinite. If a shader
happens to contain fisfinite of an fp16 value, it will assert later
during compliation.
Reviewed-by: Dave Airlie <airlied@redhat.com>
Fixes: 78b4e417d4 ("gallivm: handle fisfinite/fisnormal")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14942>
This commit is contained in:
parent
d633eace3f
commit
e3cbc328e0
1 changed files with 6 additions and 3 deletions
|
|
@ -733,8 +733,7 @@ static LLVMValueRef do_alu_action(struct lp_build_nir_context *bld_base,
|
|||
break;
|
||||
}
|
||||
case nir_op_fisfinite32:
|
||||
result = lp_build_isfinite(get_flt_bld(bld_base, src_bit_size[0]), src[0]);
|
||||
break;
|
||||
unreachable("Should have been lowered in nir_opt_algebraic_late.");
|
||||
case nir_op_flog2:
|
||||
result = lp_build_log2_safe(get_flt_bld(bld_base, src_bit_size[0]), src[0]);
|
||||
break;
|
||||
|
|
@ -2479,7 +2478,6 @@ void lp_build_opt_nir(struct nir_shader *nir)
|
|||
NIR_PASS_V(nir, nir_lower_subgroups, &subgroups_options);
|
||||
|
||||
} while (progress);
|
||||
nir_lower_bool_to_int32(nir);
|
||||
|
||||
do {
|
||||
progress = false;
|
||||
|
|
@ -2490,4 +2488,9 @@ void lp_build_opt_nir(struct nir_shader *nir)
|
|||
NIR_PASS_V(nir, nir_opt_cse);
|
||||
}
|
||||
} while (progress);
|
||||
|
||||
if (nir_lower_bool_to_int32(nir)) {
|
||||
NIR_PASS_V(nir, nir_copy_prop);
|
||||
NIR_PASS_V(nir, nir_opt_dce);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue