Skip to content

Commit 3c0347d

Browse files
authored
Fixing bug in previous PR. (#481)
fixes issue in #479
1 parent 354385e commit 3c0347d

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

src/kirin/rewrite/cse.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
from __future__ import annotations
22

3-
import sys
43
from dataclasses import field, dataclass
54

65
from kirin import ir
76
from kirin.rewrite.abc import RewriteRule, RewriteResult
87

9-
_IS_PYTHON_310 = sys.version_info[0] == 3 and sys.version_info[1] == 10
8+
try:
9+
hash(slice(None))
10+
_HASHABLE_SLICE = True
11+
except TypeError:
12+
_HASHABLE_SLICE = False
1013

1114

1215
@dataclass
@@ -22,7 +25,10 @@ class Info:
2225
_hashable: bool = field(init=False, repr=False)
2326

2427
def __post_init__(self):
25-
if _IS_PYTHON_310 and any(isinstance(attr, slice) for attr in self.attributes):
28+
if not _HASHABLE_SLICE and any(
29+
isinstance(attr, ir.PyAttr) and isinstance(attr.data, slice)
30+
for attr in self.attributes
31+
):
2632
self._hash = id(self)
2733
self._hashable = False
2834
else:

test/rewrite/test_cse_rewrite.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from kirin import ir, lowering
22
from kirin.decl import info, statement
33
from kirin.prelude import basic_no_opt
4-
from kirin.rewrite.cse import CommonSubexpressionElimination
4+
from kirin.rewrite.cse import _HASHABLE_SLICE, Info, CommonSubexpressionElimination
55
from kirin.rewrite.walk import Walk
66

77
dialect = ir.Dialect("test")
@@ -35,3 +35,14 @@ def duplicated():
3535
stmt_1 = duplicated.callable_region.blocks[0].stmts.at(1)
3636
assert isinstance(stmt_0, MultiResult)
3737
assert not isinstance(stmt_1, MultiResult)
38+
39+
40+
def test_info():
41+
info_value = Info(ir.Statement, (), (ir.PyAttr(slice(None)),), (), ())
42+
43+
if not _HASHABLE_SLICE:
44+
assert info_value._hashable is False
45+
assert info_value._hash == id(info_value)
46+
else:
47+
assert info_value._hashable is True
48+
info_value._hash = hash((ir.Statement,) + (ir.PyAttr(slice(None)),))

0 commit comments

Comments
 (0)