mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 18:20:10 +01:00
nir: add helper to return inversion op of a comparison
This will be used to help find the trip count of loops that look
like the following:
while (a < x && i < 8) {
...
i++;
}
Where the NIR will end up looking something like this:
vec1 32 ssa_1 = load_const (0x00000004 /* 0.000000 */)
loop {
...
vec1 1 ssa_12 = ilt ssa_225, ssa_11
vec1 1 ssa_17 = ilt ssa_226, ssa_1
vec1 1 ssa_18 = iand ssa_12, ssa_17
vec1 1 ssa_19 = inot ssa_18
if ssa_19 {
...
break
} else {
...
}
}
So in order to find the trip count we need to find the inverse of
ilt.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
090feaacdc
commit
f219f6114d
1 changed files with 29 additions and 0 deletions
|
|
@ -734,6 +734,35 @@ calculate_iterations(nir_const_value *initial, nir_const_value *step,
|
|||
return -1;
|
||||
}
|
||||
|
||||
static nir_op
|
||||
inverse_comparison(nir_alu_instr *alu)
|
||||
{
|
||||
switch (alu->op) {
|
||||
case nir_op_fge:
|
||||
return nir_op_flt;
|
||||
case nir_op_ige:
|
||||
return nir_op_ilt;
|
||||
case nir_op_uge:
|
||||
return nir_op_ult;
|
||||
case nir_op_flt:
|
||||
return nir_op_fge;
|
||||
case nir_op_ilt:
|
||||
return nir_op_ige;
|
||||
case nir_op_ult:
|
||||
return nir_op_uge;
|
||||
case nir_op_feq:
|
||||
return nir_op_fne;
|
||||
case nir_op_ieq:
|
||||
return nir_op_ine;
|
||||
case nir_op_fne:
|
||||
return nir_op_feq;
|
||||
case nir_op_ine:
|
||||
return nir_op_ieq;
|
||||
default:
|
||||
unreachable("Unsuported comparison!");
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
is_supported_terminator_condition(nir_alu_instr *alu)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue