Michael Smith has uploaded this change for review. ( http://gerrit.cloudera.org:8080/24997
Change subject: IMPALA-11917: Codegen branch-free reads of nullable scalar slots ...................................................................... IMPALA-11917: Codegen branch-free reads of nullable scalar slots After the LLVM 22 upgrade, TPC-DS Q99's streaming aggregation was ~20% slower than with LLVM 5. Its UpdateTuple compiled to 269 instructions with 22 branches (LLVM 5: 84 instructions, 5 branches). GetSlotRef wraps each slot read in a null-check diamond. Once several reads of the same slots are inlined into a single function, LLVM 22 no longer merges these diamonds. Each read keeps its own branch and conditional load, and the packed *Val is rebuilt via shifts and cmovs. Replacing the phi with a select after the branch doesn't help, because InstCombine converts a select back into a phi when a dominating branch tests the same condition. When the tuple is not nullable and the slot is a nullable simple scalar (i.e. not string, timestamp, collection, struct or variant), GetSlotRef now loads the slot unconditionally and selects on the null bit. This is safe because the slot is always within the tuple's memory. With no branch on the null bit, LLVM combines the null checks and CSEs the loads across expressions, so UpdateTuple compiles to 88 instructions with 6 branches. 09:AGGREGATE STREAMING in Q99 drops from 39-41ms to 32-33ms, matching LLVM 5. Testing: - Q99 results on tpcds20_parquet match with codegen enabled and disabled. - Ran tests/query_test/test_tpcds_queries.py. Change-Id: I6edaf90100cc3360a7c93d3218eb6956fcec24f0 Assisted-by: Claude Opus 5.5 (GitHub Copilot) --- M be/src/exprs/slot-ref.cc M be/src/exprs/slot-ref.h 2 files changed, 57 insertions(+), 1 deletion(-) git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/97/24997/1 -- To view, visit http://gerrit.cloudera.org:8080/24997 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-Project: Impala-ASF Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: I6edaf90100cc3360a7c93d3218eb6956fcec24f0 Gerrit-Change-Number: 24997 Gerrit-PatchSet: 1 Gerrit-Owner: Michael Smith <[email protected]>
