From 0b963ed3d53b459d42945127e359bd3902a68d32 Mon Sep 17 00:00:00 2001 From: Rafael Haenel Date: Thu, 6 Nov 2025 08:15:17 -0800 Subject: [PATCH] Backport https://github.com/QuEraComputing/kirin/pull/557/files --- src/kirin/dialects/ilist/rewrite/inline_getitem.py | 3 +++ src/kirin/rewrite/getitem.py | 3 +++ test/dialects/test_ilist.py | 6 ++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/kirin/dialects/ilist/rewrite/inline_getitem.py b/src/kirin/dialects/ilist/rewrite/inline_getitem.py index 9120f1648..94f9136f2 100644 --- a/src/kirin/dialects/ilist/rewrite/inline_getitem.py +++ b/src/kirin/dialects/ilist/rewrite/inline_getitem.py @@ -25,6 +25,9 @@ def rewrite_Statement(self, node: ir.Statement) -> abc.RewriteResult: if not isinstance(index_const := node.index.hints.get("const"), const.Value): return abc.RewriteResult() + if not node.result.uses: + return abc.RewriteResult() + index = index_const.data if isinstance(index, int) and ( 0 <= index < len(stmt.args) or -len(stmt.args) <= index < 0 diff --git a/src/kirin/rewrite/getitem.py b/src/kirin/rewrite/getitem.py index 5cc91d024..0594dee99 100644 --- a/src/kirin/rewrite/getitem.py +++ b/src/kirin/rewrite/getitem.py @@ -19,6 +19,9 @@ def rewrite_Statement(self, node: ir.Statement) -> RewriteResult: if not isinstance(index_value := node.index.hints.get("const"), const.Value): return RewriteResult() + if not node.result.uses: + return RewriteResult() + stmt = node.obj.owner index = index_value.data if isinstance(index, int) and ( diff --git a/test/dialects/test_ilist.py b/test/dialects/test_ilist.py index d37a3fa99..073f0ed35 100644 --- a/test/dialects/test_ilist.py +++ b/test/dialects/test_ilist.py @@ -207,7 +207,8 @@ def test_inline_getitem_slice(): [ qreg := ilist.New(values=values), slice_value := py.Constant(slice(2, 5, 1)), - py.GetItem(obj=qreg.result, index=slice_value.result), + res := py.GetItem(obj=qreg.result, index=slice_value.result), + func.Return(res.result), ] ) slice_value.result.hints["const"] = const.Value(slice(2, 5, 1)) @@ -219,7 +220,8 @@ def test_inline_getitem_slice(): [ qreg := ilist.New(values=values), slice_value := py.Constant(slice(2, 5, 1)), - ilist.New(values=(values[2], values[3], values[4])), + res := ilist.New(values=(values[2], values[3], values[4])), + func.Return(res.result), ] ) assert test_block.is_equal(expected_block)