Testing negative iterations count makes no sense, and can cause issues
when the unsigned type is used.
Testing 0 iterations is already covered with
will_break_on_first_iteration, so it can be skipped too.
Fixes:
6772a17a ("nir: Add a loop analysis pass")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9913
Signed-off-by: Sviatoslav Peleshko <sviatoslav.peleshko@globallogic.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26173>
(cherry picked from commit
a6459e0f7bcb662130c79764ccf54ccfa9151182)
"description": "nir/loop_analyze: Don't test non-positive iterations count",
"nominated": true,
"nomination_type": 1,
- "resolution": 0,
+ "resolution": 1,
"main_sha": null,
"because_sha": "6772a17acc8ee90f9398348251a4455f988208fd",
"notes": null
*/
for (int bias = -1; bias <= 1; bias++) {
const int iter_bias = iter_int + bias;
+ if (iter_bias < 1)
+ continue;
if (test_iterations(iter_bias, step, limit, alu_op, bit_size,
induction_base_type, initial,
limit_rhs, invert_cond, execution_mode)) {
- return iter_bias > 0 ? iter_bias - trip_offset : iter_bias;
+ return iter_bias - trip_offset;
}
}
INOT_COMPARE(ilt_rev)
INOT_COMPARE(ine)
+INOT_COMPARE(uge_rev)
#define KNOWN_COUNT_TEST(_init_value, _cond_value, _incr_value, cond, incr, count) \
TEST_F(nir_loop_analyze_test, incr ## _ ## cond ## _known_count_ ## count) \
/* uint i = 0;
* while (true) {
+ * if (!(0 >= i))
+ * break;
+ *
+ * i += 1;
+ * }
+ */
+KNOWN_COUNT_TEST(0x00000000, 0x00000000, 0x00000001, inot_uge_rev, iadd, 1)
+
+/* uint i = 0;
+ * while (true) {
* if (i != 0)
* break;
*