From 09222a1cfc8cfc68e268a0ade00280f0b9b6ab15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20S=C5=82uszniak?= Date: Wed, 21 Oct 2026 08:17:06 +0200 Subject: [PATCH] Qualcomm AI Engine Direct - Test int64 get_attr cast order in the rework suite #24222 fixed I64toI32 casting a lifted int64 constant before its definition. Add the matching subtest to test_i64_to_i32. --- backends/qualcomm/tests/rework/src/pattern.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/backends/qualcomm/tests/rework/src/pattern.py b/backends/qualcomm/tests/rework/src/pattern.py index 150f9160669..d1ff3d0996b 100644 --- a/backends/qualcomm/tests/rework/src/pattern.py +++ b/backends/qualcomm/tests/rework/src/pattern.py @@ -4209,9 +4209,15 @@ def forward(self, x, y): squeeze_out = view_out.squeeze(-1) return squeeze_out, conv_out + class _RemainderByScalar(torch.nn.Module): + # DecomposeRemainder turns the scalar into an int64 get_attr at the graph head + def forward(self, x, idx): + return x + (idx % 80).float() + @staticmethod @unpack_pass_fixtures def test( + subtests, quantizer, compile_spec, backend_type: QnnExecuTorchBackendType, @@ -4237,6 +4243,18 @@ def test( gm, exir_ops.edge.aten._to_copy.default, expected_casts ) + # The int32 cast of a constant must still follow it once the constant is lifted + with subtests.test(msg="constant_cast_order"): + gm = pass_pipeline.lower_edge_ep( + module=I64toI32._RemainderByScalar(), + sample_input=(torch.randn(1, 3), torch.tensor([[3, 170, 85]])), + backend_type=backend_type, + compile_spec=compile_spec, + target_pass=target_pass, + quantizer=quantizer, + ).graph_module + gm.graph.lint() + class InsertIOQDQ: class _Basic(torch.nn.Module):