Skip to content

[Fix][Relax] Preserve impure calls with unused tuple outputs - #20816

Open
hiyufan wants to merge 1 commit into
apache:mainfrom
hiyufan:fix/preserve-impure-unused-outputs-20592
Open

hiyufan wants to merge 1 commit into
apache:mainfrom
hiyufan:fix/preserve-impure-unused-outputs-20592

Conversation

@hiyufan

@hiyufan hiyufan commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

When every tuple output of an impure private function is unused, RemoveUnusedOutputs replaces the call with placeholders and drops its side effects. For example, a callee containing R.print no longer prints after the pass.

Skip output pruning for an impure callee whose output-usage mask is entirely false. This conservatively preserves its call and return signature. Pure callees and impure callees with partially used outputs keep the existing pruning behavior.

Fixes #20592.

Add structural regressions for unused impure and pure calls, plus four CPU VM cases covering one/two calls and unused/partially used outputs. The execution tests compare returned tensors and exact print counts before and after the pass, and check that partial output pruning remains active.

Validation against main e345029c, with Python 3.11 and source-built pinned TIRx/FFI dependencies:

  • Baseline: unused-result executions lose their print side effects; partial-output controls pass.
  • test_transform_remove_unused_outputs.py, test_transform_dead_code_elimination.py, and test_transform_canonicalize_bindings.py: 64 passed, 1 existing xfailed.
  • CPU VM execution uses target c; LLVM was not enabled.
  • File-scoped Ruff, clang-format, ASF header/file-type and whitespace checks passed.

Prepared with OpenAI Codex assistance. The build and validation above were executed locally.

CI status: Windows fails during Conda environment setup, before compilation or tests, with the same conda init/Miniforge installation errors on unchanged main. This remains an outstanding validation gap; Jenkins checks are still pending.

@hiyufan
hiyufan marked this pull request as ready for review October 25, 2026 11:27

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug][Relax] RemoveUnusedOutputs drops impure calls when tuple outputs are unused

1 participant