add Ops.GEP to _min_max (#11976)

This commit is contained in:
Sieds Lykles
2025-09-03 07:07:54 +02:00
committed by GitHub
parent d1d0960e6e
commit 53eff8970a
2 changed files with 10 additions and 0 deletions
+9
View File
@@ -251,6 +251,15 @@ class TestVminVmaxVConst(unittest.TestCase):
self.assertIs(uop.vmin, False)
self.assertIs(uop.vmax, True)
def test_vmin_vmax_vector_with_gep(self):
# vmin and vmax for a vector constant of bool values
d1 = UOp(Ops.DEFINE_GLOBAL, dtypes.int.ptr(), (), 1)
idx = UOp.const(dtypes.int, 0)
val = UOp(Ops.LOAD, dtypes.int.vec(2), (d1.index(idx),))
uop = (val // 32).gep(0)
self.assertEqual(uop.vmin, -67108864)
self.assertEqual(uop.vmax, 67108863)
class TestConstFactor(unittest.TestCase):
def test_const_factor_constant(self):
# const_factor for a constant
+1
View File
@@ -565,6 +565,7 @@ class UOp(MathTrait, metaclass=UOpMetaClass):
if self.op is Ops.SPECIAL: return 0, self.arg[1]-1 if isinstance(self.arg[1], int) else self.arg[1].vmax-1
if self.op is Ops.CONST: return self.arg, self.arg
if self.op is Ops.VCONST: return (min(self.arg), max(self.arg))
if self.op is Ops.GEP: return self.src[0]._min_max
# TODO: CAST to bool/unsigned is not monotone, still some case can be simplified
if self.op is Ops.CAST and self.dtype in (dtypes.floats+dtypes.sints):
return max(dtypes.min(self.dtype), self.src[0].vmin), min(self.src[0].vmax, dtypes.max(self.dtype))