Skip to content

[SPARK-57178][SQL] Simplify Asinh codegen by extracting a static Java helper#56229

Open
gengliangwang wants to merge 1 commit into
apache:masterfrom
gengliangwang:spark-asinh-codegen
Open

[SPARK-57178][SQL] Simplify Asinh codegen by extracting a static Java helper#56229
gengliangwang wants to merge 1 commit into
apache:masterfrom
gengliangwang:spark-asinh-codegen

Conversation

@gengliangwang
Copy link
Copy Markdown
Member

What changes were proposed in this pull request?

Add ExpressionImplUtils.asinh(double x) (the fdlibm s_asinh.c algorithm) and route Asinh's eval and codegen paths through it. Asinh.doGenCode previously emitted a ~14-line inline five-branch if/else; it now emits a single ExpressionImplUtils.asinh(...) call via defineCodeGen, and the eval path calls the same helper instead of an inline lambda copy of the algorithm.

asinh returns a primitive double, so the helper is a clean drop-in for both paths with no boxing and no null handling. Sibling of SPARK-57177 (Acosh).

Why are the changes needed?

Part of SPARK-56908 (umbrella). Collapsing the duplicated ~14-line algorithm to a single call shrinks the generated Java for every stage that uses asinh, and removes the eval/codegen duplication of the same fdlibm algorithm, helping with the JVM 64KB method / constant-pool limits, Janino compile time, and JIT work.

Does this PR introduce any user-facing change?

No. The compiled behavior is identical; only the emitted Java source text changes.

How was this patch tested?

build/sbt "catalyst/testOnly *MathExpressionsSuite"

Pass, including asinh and SPARK-56089: asinh/acosh fdlibm algorithm coverage (exercised both with and without whole-stage codegen).

Was this patch authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Opus 4.8)

… helper

### What changes were proposed in this pull request?

Add `ExpressionImplUtils.asinh(double x)` (the fdlibm `s_asinh.c` algorithm) and
route `Asinh`'s eval and codegen paths through it. `Asinh.doGenCode` previously
emitted a ~14-line inline five-branch if/else; it now emits a single
`ExpressionImplUtils.asinh(...)` call via `defineCodeGen`, and the eval path
calls the same helper instead of an inline lambda copy of the algorithm.

`asinh` returns a primitive `double`, so the helper is a clean drop-in for both
paths with no boxing and no null handling. Sibling of SPARK-57177 (Acosh).

### Why are the changes needed?

Part of SPARK-56908 (umbrella). Collapsing the duplicated ~14-line algorithm to
a single call shrinks the generated Java for every stage that uses `asinh`, and
removes the eval/codegen duplication of the same fdlibm algorithm.

### Does this PR introduce _any_ user-facing change?

No. The compiled behavior is identical; only the emitted Java source text changes.

### How was this patch tested?

```
build/sbt "catalyst/testOnly *MathExpressionsSuite"
```

Pass, including `asinh` and `SPARK-56089: asinh/acosh fdlibm algorithm coverage`
(exercised both with and without whole-stage codegen).

### Was this patch authored or co-authored using generative AI tooling?

Generated-by: Claude Code (Opus 4.8)

Co-authored-by: Isaac
@gengliangwang gengliangwang requested a review from LuciferYang May 31, 2026 02:32
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.

1 participant