nir: do not assume that the result of fexp2(a) is always an integral
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 27 Aug 2019 09:35:00 +0000 (11:35 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 2 Sep 2019 07:00:37 +0000 (09:00 +0200)
It's only correct when 'a' is an integral greater or equal to 0.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111493
Fixes: 5544b2cbbd2 ("nir/algebraic: Use value range analysis to eliminate useless unary ops")
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/nir/nir_range_analysis.c

index a313087e05675f16d12fd4d1e6d98f10b6dce04e..6fec5fcd7abaf800611f077b732189d4d5ddfa87 100644 (file)
@@ -580,6 +580,7 @@ analyze_expression(const nir_alu_instr *instr, unsigned src,
       ASSERT_UNION_OF_DISJOINT_MATCHES_UNKNOWN_1_SOURCE(table);
       ASSERT_UNION_OF_EQ_AND_STRICT_INEQ_MATCHES_NONSTRICT_1_SOURCE(table);
 
+      r.is_integral = r.is_integral && is_not_negative(r.range);
       r.range = table[r.range];
       break;
    }