Skip to content

GH-50371: [C++][Gandiva] Fold common subexpressions before code generation#50372

Open
likun666661 wants to merge 1 commit into
apache:mainfrom
likun666661:gandiva-expression-cse
Open

GH-50371: [C++][Gandiva] Fold common subexpressions before code generation#50372
likun666661 wants to merge 1 commit into
apache:mainfrom
likun666661:gandiva-expression-cse

Conversation

@likun666661

@likun666661 likun666661 commented Jul 5, 2026

Copy link
Copy Markdown

Rationale for this change

This adds a conservative Gandiva expression-layer common subexpression folding pass before code generation. Repeated pure expression subtrees can otherwise be decomposed and lowered multiple times before LLVM sees the module.

The pass intentionally avoids cases where expression-level reuse can be unsafe, including functions that need execution context/function holders, can return errors, use result-null-internal handling, and boolean/if decomposition results with local validity bitmap side effects.

What changes are included in this PR?

  • Add expr_cse to fold safe repeated Gandiva expression subtrees before projector/filter code generation.
  • Add decomposition reuse for safe field, literal, and pure function nodes.
  • Expose unoptimized IR dumping for Gandiva tests when dump_ir is enabled.
  • Add IR-focused tests covering nested arithmetic, generated if, generated boolean, and nested between-style patterns.

Are these changes tested?

Yes.

$ git diff --check
$ pre-commit run --show-diff-on-failure --color=always --all-files cpp
$ PYTHON=/opt/homebrew/bin/python3 TZ=UTC ARROW_TEST_DATA=/Users/likun/workspace-for-apache-arrow/testing/data ninja -C cpp/build-gandiva unittest

The ninja ... unittest run completed with 100% tests passed, 0 tests failed out of 81.

AI-assisted contribution disclosure

This PR was prepared with AI assistance. I reviewed and tested the generated changes locally, including the Gandiva C++ tests and Arrow C++ pre-commit checks listed above.

@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown

⚠️ GitHub issue #50371 has no components, please add labels for components.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant