mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
nir: add iabs-lowering code
Microsoft's DXIL is based on LLVM, which doesn't have an integer ABS opcode, but instead needs it lowered to NEG + MAX. We need to do this with an option, to prevent an already existing optimization rule from undoing this. Reviewed-by: Eric Anholt <eric@anholt.net> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5211>
This commit is contained in:
parent
9e5e3be412
commit
5e841e8b4f
2 changed files with 5 additions and 1 deletions
|
|
@ -3042,6 +3042,9 @@ typedef struct nir_shader_compiler_options {
|
|||
/** enables rules to lower fsign to fsub and flt */
|
||||
bool lower_fsign;
|
||||
|
||||
/** enables rules to lower iabs to ineg+imax */
|
||||
bool lower_iabs;
|
||||
|
||||
/* lower fdph to fdot4 */
|
||||
bool lower_fdph;
|
||||
|
||||
|
|
|
|||
|
|
@ -543,7 +543,7 @@ optimizations.extend([
|
|||
(('fmax', a, ('fabs', a)), ('fabs', a)),
|
||||
(('imax', a, ('iabs', a)), ('iabs', a)),
|
||||
(('fmax', a, ('fneg', a)), ('fabs', a)),
|
||||
(('imax', a, ('ineg', a)), ('iabs', a)),
|
||||
(('imax', a, ('ineg', a)), ('iabs', a), '!options->lower_iabs'),
|
||||
(('~fmax', ('fabs', a), 0.0), ('fabs', a)),
|
||||
(('fmin', ('fmax', a, 0.0), 1.0), ('fsat', a), '!options->lower_fsat'),
|
||||
# fmax(fmin(a, 1.0), 0.0) is inexact because it returns 1.0 on NaN, while
|
||||
|
|
@ -1902,6 +1902,7 @@ late_optimizations = [
|
|||
(('iadd', 'a', ('ineg', 'b')), ('isub', 'a', 'b'), '!options->lower_sub'),
|
||||
(('fneg', a), ('fsub', 0.0, a), 'options->lower_negate'),
|
||||
(('ineg', a), ('isub', 0, a), 'options->lower_negate'),
|
||||
(('iabs', a), ('imax', a, ('ineg', a)), 'options->lower_iabs'),
|
||||
|
||||
# These are duplicated from the main optimizations table. The late
|
||||
# patterns that rearrange expressions like x - .5 < 0 to x < .5 can create
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue