Skip to content

[FEA] ANSI SQL Operator JIT Support (1) : Refactor ROW IR - #22511

Merged
rapids-bot[bot] merged 13 commits into
NVIDIA:mainfrom
lamarrr:ansi-jit-1--refactor-row-ir
May 20, 2026
Merged

[FEA] ANSI SQL Operator JIT Support (1) : Refactor ROW IR#22511
rapids-bot[bot] merged 13 commits into
NVIDIA:mainfrom
lamarrr:ansi-jit-1--refactor-row-ir

Conversation

@lamarrr

@lamarrr lamarrr commented May 14, 2026

Copy link
Copy Markdown
Contributor

Description

Split from #22224
This Pull request:

  • refactors the ROW-IR codegen setup to prepare for adding ANSI SQL operator support.
  • begins splitting out the opcode from the AST operator
  • unifies the node type to use opcodes instead of dynamic dispatch
  • removes ambiguous AST input resolution logic
  • removes the redundant join_column_accessor and instead uses a table index attached to each column_accessor instead

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

@lamarrr
lamarrr requested a review from a team as a code owner May 14, 2026 18:22
@lamarrr
lamarrr requested review from bdice and davidwendt May 14, 2026 18:22
@github-actions github-actions Bot added the libcudf Affects libcudf (C++/CUDA) code. label May 14, 2026
@lamarrr lamarrr added feature request New feature or request non-breaking Non-breaking change labels May 14, 2026
@coderabbitai

coderabbitai Bot commented May 14, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a11e3b56-7fff-4b4c-8aa1-8274c5e017f0

📥 Commits

Reviewing files that changed from the base of the PR and between ac99883 and 6d92a29.

📒 Files selected for processing (1)
  • cpp/src/join/filter_join_indices_jit.cu

📝 Walkthrough

Summary by CodeRabbit

  • Bug Fixes

    • Improved scalar filter support so scalar predicate inputs are handled correctly.
    • More consistent null-aware predicate evaluation to avoid incorrect predicate results.
  • Refactor

    • Unified row-expression IR and centralized predicate/codegen for joins and transforms for more consistent code generation.
    • Simplified join predicate kernel/launch and consolidated predicate input representation across join/filter paths.
    • Filter now evaluates predicates via the unified pipeline and returns masked table results directly.
  • Tests

    • Updated tests to exercise the new IR/codegen and predicate paths.

Walkthrough

Refactor row-expression IR to a single opcode-driven node model, rename internal predicate/filter entities, add table_index to column_accessor, change join filter kernel to pointer-based columns/indices with a single Accessors template, and propagate API/ABI changes through JIT launch, transform/filter plumbing, and tests.

Changes

Row-IR, join/filter JIT refactor

Layer / File(s) Summary
AST predicate rename and operator functor helpers
cpp/include/cudf/ast/expressions.hpp, cpp/src/ast/expressions.cpp, cpp/include/cudf/ast/detail/operator_functor.cuh
Rename internal filter_predicatepredicate, add [[nodiscard]] to expression, and rename/adjust predicate helper overloads in operator functor.
column_accessor template and reflect updates
cpp/src/jit/column_accessor.cuh, cpp/src/transform/transform.cu
Add TableIndex template parameter and table_index constant to column_accessor; update JIT reflect template instantiations to include new trailing arg (0).
Row-IR header: inputs, transform_args, instance_context API
cpp/src/jit/row_ir.hpp
Introduce scalar_input/column_input/input variant, reshape transform_args, require instance_context(rmm::cuda_stream_view, rmm::device_async_resource_ref), and add add_input/add_output/getter APIs.
Unified node API and ast_converter header surface
cpp/src/jit/row_ir.hpp
Replace polymorphic node types with concrete row_ir::node, add code_sink, opcode mapping, expose add_ir_node overloads, and change generate_code/compute_column/filter signatures to return std::tuple<std::string,null_aware,output_nullability> / transform_args.
Row-IR implementation: node logic, instantiate, emit_code, ast_converter
cpp/src/jit/row_ir.cpp
Implement opcode↔AST mappings, row_ir::node constructors/traits, instantiate and emit_code, and update ast_converter to build the unified IR and emit device UDFs; add get_column_view helpers and new compute_column/filter wiring.
Tests: row_ir codegen and FilterTest updates
cpp/tests/jit/row_ir.cpp, cpp/tests/filter/filter_test.cpp
Refactor row-IR codegen tests to use row_ir::node and instance_context with prebuilt fixture columns/table_view; switch AST execution tests to multi_transform and update FilterTest to use scalar_column_view.
Join filter kernel declaration and implementation
cpp/src/join/jit/filter_join_kernel.cuh, cpp/src/join/jit/filter_join_kernel.cu
Change kernel template from variadic InputAccessors to a single Accessors type, update kernel signature to (num_rows, left_indices*, right_indices*, columns*, predicate_results*, user_data*), and add execute_predicate_op helper with accessor A::table_index based mapping.
JIT join template/launch and device columns layout
cpp/src/join/filter_join_indices_jit.cu
Build JIT template params from std::span<transform_input const> and per-input table_sources, derive PTX input types from inputs, construct a single device columns array, and launch the kernel with the revised raw-argument layout.
Stream-compaction filter plumbing and public API forwarding
cpp/src/stream_compaction/filter/filter.cu
Refactor detail::filter to take UDF/config first, accept predicate inputs as std::span<transform_input const> and table_view for filter inputs, evaluate predicate via multi_transform and apply_mask, and update public filter overloads to forward ast_converter::filter results.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main refactoring effort: preparing ROW IR for ANSI SQL operator JIT support through refactoring.
Description check ✅ Passed The description explains the refactoring objectives, the split from another PR, and key changes made to the ROW-IR codegen, opcode representation, and column accessor.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
cpp/src/join/filter_join_indices_jit.cu (1)

51-88: 💤 Low value

Potential null optional access for column inputs.

At line 69, table_sources[i].value() is called without checking if it has a value. For column inputs from the join tables (constructed in lines 413-420), table_sources will have values (0 or 1). However, if this function is called with a column input that has nullopt in table_sources, it will throw std::bad_optional_access.

This appears safe in the current usage since columns from left/right tables always have their table_source set, but consider adding validation or using value_or() for robustness.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/join/filter_join_indices_jit.cu` around lines 51 - 88, The code in
build_join_filter_template_params uses table_sources[i].value() when
instantiating cudf::jit::column_accessor for column_view inputs, which can throw
if the optional is nullopt; change this to safely handle missing values by using
table_sources[i].value_or(<placeholder>) (e.g., value_or(0)) or by adding an
explicit check/assert before using value(), and ensure the same safe handling is
applied to the scalar path comment/placeholder logic so no
std::bad_optional_access can occur; update the column_accessor instantiation
sites (the Template.instantiate calls) to consume the safe value.
cpp/src/stream_compaction/filter/filter.cu (1)

69-85: ⚡ Quick win

Add CUDF_FUNC_RANGE() to this public overload.

filter_extended(...) already does this, but this public cudf::filter(...) overload now delegates straight into detail::filter(...) without an NVTX range.
As per coding guidelines, cpp/src/**/*.{cu,cpp}: Add CUDF_FUNC_RANGE() in public functions before delegating to detail:: functions.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/stream_compaction/filter/filter.cu` around lines 69 - 85, The public
overload cudf::filter(...) currently delegates directly to detail::filter(...)
without an NVTX range; add a CUDF_FUNC_RANGE() call at the start of the public
cudf::filter function (just before constructing args and calling detail::filter)
so it mirrors filter_extended(...)’s behavior; ensure CUDF_FUNC_RANGE() is the
first statement inside the public function scope and do not change the existing
arguments passed to detail::filter (args.udf, args.source_type,
args.is_null_aware, args.user_data, args.inputs, filter_table,
args.outputs[0].nullability, stream, mr).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cpp/src/jit/row_ir.cpp`:
- Around line 597-605: The code currently wraps expr into ast::detail::predicate
before type-checking, which causes compute_column(...) to always report BOOL8
and bypass validation; first inspect the original expr's type (without wrapping)
and assert it is boolean (compare expr.type().id() or equivalent to
type_id::BOOL8), throwing the same invalid_argument message if not; only after
that validation construct auto filter = ast::detail::predicate{expr} and call
compute_column(target_id, filter, left_table, right_table, function_name,
stream, mr) and keep the existing CUDF_EXPECTS on transform.outputs as a
secondary safeguard.
- Around line 443-457: The null-evaluation flag is computed too broadly: change
the may_evaluate_null logic so nullable inputs only force PRESERVE when there
exists an output that is not ALWAYS_VALID; specifically replace
may_evaluate_null = !output_is_always_valid || has_nullable_inputs with
may_evaluate_null = !output_is_always_valid && has_nullable_inputs so that
outputs where ir->is_always_valid() (e.g., IS_NULL, NULL_EQUAL, PREDICATE)
remain ALL_VALID regardless of instance_.inputs_ nullability, keeping the
subsequent null_policy selection correct.

In `@cpp/src/join/jit/filter_join_kernel.cuh`:
- Around line 21-35: The Doxygen for filter_join_kernel is stale: remove the old
`@param` entries for left_table, right_table, and scalars and replace them with
entries matching the current signature (num_rows, left_indices, right_indices,
columns, predicate_results, user_data); update the brief/description if needed
to reference column_device_view_core via the columns parameter and ensure each
`@param` name exactly matches the function parameters used in template<bool
has_user_data, null_aware is_null_aware, typename Accessors> CUDF_KERNEL void
filter_join_kernel(...).

In `@cpp/src/stream_compaction/filter/filter.cu`:
- Around line 47-58: The call to multi_transform is using
filter_table.num_rows() but the predicate inputs come from a separate table
(predicate_inputs), so ensure the transform uses the predicate side row count:
either pass the converter's row_size through to this call or compute/validate
the predicate row count from predicate_inputs and use that value instead of
filter_table.num_rows(); additionally add a pre-check that every column in
predicate_inputs has the same num_rows (or throw/log an error) before invoking
multi_transform to prevent mismatched extents.

---

Nitpick comments:
In `@cpp/src/join/filter_join_indices_jit.cu`:
- Around line 51-88: The code in build_join_filter_template_params uses
table_sources[i].value() when instantiating cudf::jit::column_accessor for
column_view inputs, which can throw if the optional is nullopt; change this to
safely handle missing values by using table_sources[i].value_or(<placeholder>)
(e.g., value_or(0)) or by adding an explicit check/assert before using value(),
and ensure the same safe handling is applied to the scalar path
comment/placeholder logic so no std::bad_optional_access can occur; update the
column_accessor instantiation sites (the Template.instantiate calls) to consume
the safe value.

In `@cpp/src/stream_compaction/filter/filter.cu`:
- Around line 69-85: The public overload cudf::filter(...) currently delegates
directly to detail::filter(...) without an NVTX range; add a CUDF_FUNC_RANGE()
call at the start of the public cudf::filter function (just before constructing
args and calling detail::filter) so it mirrors filter_extended(...)’s behavior;
ensure CUDF_FUNC_RANGE() is the first statement inside the public function scope
and do not change the existing arguments passed to detail::filter (args.udf,
args.source_type, args.is_null_aware, args.user_data, args.inputs, filter_table,
args.outputs[0].nullability, stream, mr).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 92319eb0-437a-4e3e-bd6c-7ebc620dc925

📥 Commits

Reviewing files that changed from the base of the PR and between d7c7891 and d1bc220.

📒 Files selected for processing (13)
  • cpp/include/cudf/ast/detail/operator_functor.cuh
  • cpp/include/cudf/ast/expressions.hpp
  • cpp/src/ast/expressions.cpp
  • cpp/src/jit/column_accessor.cuh
  • cpp/src/jit/join_column_accessor.cuh
  • cpp/src/jit/row_ir.cpp
  • cpp/src/jit/row_ir.hpp
  • cpp/src/join/filter_join_indices_jit.cu
  • cpp/src/join/jit/filter_join_kernel.cu
  • cpp/src/join/jit/filter_join_kernel.cuh
  • cpp/src/stream_compaction/filter/filter.cu
  • cpp/src/transform/transform.cu
  • cpp/tests/jit/row_ir.cpp
💤 Files with no reviewable changes (1)
  • cpp/src/jit/join_column_accessor.cuh

Comment thread cpp/src/jit/row_ir.cpp
Comment thread cpp/src/jit/row_ir.cpp Outdated
Comment thread cpp/src/join/jit/filter_join_kernel.cuh
Comment thread cpp/src/stream_compaction/filter/filter.cu

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
cpp/src/stream_compaction/filter/filter.cu (2)

122-157: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing CUDF_FUNC_RANGE() in legacy filter function.

Same issue as the predicate_expr overload—this public function should have NVTX instrumentation for profiling consistency.

🛠️ Proposed fix
 std::vector<std::unique_ptr<column>> filter(std::vector<column_view> const& predicate_columns,
                                             std::string const& predicate_udf,
                                             std::vector<column_view> const& filter_columns,
                                             bool is_ptx,
                                             std::optional<void*> user_data,
                                             null_aware is_null_aware,
                                             output_nullability predicate_nullability,
                                             rmm::cuda_stream_view stream,
                                             rmm::device_async_resource_ref mr)
 {
+  CUDF_FUNC_RANGE();
   // legacy behavior was to detect which column were scalars based on their sizes

As per coding guidelines: "Add CUDF_FUNC_RANGE() in public functions before delegating to detail:: functions".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/stream_compaction/filter/filter.cu` around lines 122 - 157, The
public overload filter(...) is missing NVTX profiling instrumentation; add a
CUDF_FUNC_RANGE() call as the first statement inside the public function filter
(the one that builds inputs and then calls detail::filter) so the function is
instrumented for profiling before delegating to detail::filter; ensure the call
appears before any work (i.e., before building inputs/iterating
predicate_columns) to mirror the predicate_expr overload's placement.

73-96: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing CUDF_FUNC_RANGE() in public function.

This public function delegates to detail::filter but lacks the NVTX range instrumentation that filter_extended has at line 109.

🛠️ Proposed fix
 std::unique_ptr<table> filter(table_view const& predicate_table,
                               ast::expression const& predicate_expr,
                               table_view const& filter_table,
                               rmm::cuda_stream_view stream,
                               rmm::device_async_resource_ref mr)
 {
+  CUDF_FUNC_RANGE();
   auto args = cudf::detail::row_ir::ast_converter::filter(cudf::detail::row_ir::target::CUDA,

As per coding guidelines: "Add CUDF_FUNC_RANGE() in public functions before delegating to detail:: functions".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/stream_compaction/filter/filter.cu` around lines 73 - 96, The public
function filter is missing NVTX instrumentation — add a CUDF_FUNC_RANGE() call
at the start of the filter(table_view const& predicate_table, ast::expression
const& predicate_expr, table_view const& filter_table, rmm::cuda_stream_view
stream, rmm::device_async_resource_ref mr) function before it builds args and
delegates to detail::filter so it matches the instrumentation used by
filter_extended; place the CUDF_FUNC_RANGE() as the first statement in that
function to wrap the call to cudf::detail::row_ir::ast_converter::filter and
subsequent detail::filter invocation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@cpp/src/stream_compaction/filter/filter.cu`:
- Around line 122-157: The public overload filter(...) is missing NVTX profiling
instrumentation; add a CUDF_FUNC_RANGE() call as the first statement inside the
public function filter (the one that builds inputs and then calls
detail::filter) so the function is instrumented for profiling before delegating
to detail::filter; ensure the call appears before any work (i.e., before
building inputs/iterating predicate_columns) to mirror the predicate_expr
overload's placement.
- Around line 73-96: The public function filter is missing NVTX instrumentation
— add a CUDF_FUNC_RANGE() call at the start of the filter(table_view const&
predicate_table, ast::expression const& predicate_expr, table_view const&
filter_table, rmm::cuda_stream_view stream, rmm::device_async_resource_ref mr)
function before it builds args and delegates to detail::filter so it matches the
instrumentation used by filter_extended; place the CUDF_FUNC_RANGE() as the
first statement in that function to wrap the call to
cudf::detail::row_ir::ast_converter::filter and subsequent detail::filter
invocation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1decddf2-15ea-4cbe-a5b4-2a0299b6e318

📥 Commits

Reviewing files that changed from the base of the PR and between 0f0c134 and c612ac8.

📒 Files selected for processing (1)
  • cpp/src/stream_compaction/filter/filter.cu

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
cpp/src/jit/row_ir.cpp (1)

445-448: ⚡ Quick win

Use the returned output_id instead of hard-coding output index 0.

instance_.add_output() already returns the index, but output_reference{0} ignores it. This is fragile if generate_code() is reused or expanded beyond a single output.

♻️ Proposed fix
-  [[maybe_unused]] auto output_id = instance_.add_output();
+  auto output_id = instance_.add_output();

-  output_irs_.emplace_back(std::make_unique<row_ir::node>(output_reference{0}, expr.accept(*this)));
+  output_irs_.emplace_back(
+    std::make_unique<row_ir::node>(output_reference{output_id}, expr.accept(*this)));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/jit/row_ir.cpp` around lines 445 - 448, The code calls
instance_.add_output() but ignores its return value by constructing
output_reference{0}; update the emplace_back call to use the actual output index
returned by output_id so the created row_ir::node references
output_reference{output_id} instead of hard-coded 0; locate the call to
instance_.add_output(), the local variable output_id, and the
output_irs_.emplace_back(std::make_unique<row_ir::node>(output_reference{0},
expr.accept(*this))) and replace the literal with the output_id to make the
mapping robust if multiple outputs are added.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@cpp/src/jit/row_ir.cpp`:
- Around line 445-448: The code calls instance_.add_output() but ignores its
return value by constructing output_reference{0}; update the emplace_back call
to use the actual output index returned by output_id so the created row_ir::node
references output_reference{output_id} instead of hard-coded 0; locate the call
to instance_.add_output(), the local variable output_id, and the
output_irs_.emplace_back(std::make_unique<row_ir::node>(output_reference{0},
expr.accept(*this))) and replace the literal with the output_id to make the
mapping robust if multiple outputs are added.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0d07a580-0293-4f4f-ad0d-625583cd90c4

📥 Commits

Reviewing files that changed from the base of the PR and between c612ac8 and 2830fc4.

📒 Files selected for processing (1)
  • cpp/src/jit/row_ir.cpp

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (1)
cpp/src/join/jit/filter_join_kernel.cuh (1)

22-23: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update the @param text for the raw index pointers.

These two entries still describe left_indices and right_indices as device spans, but the signature now takes raw cudf::size_type const* pointers. Please keep the docs aligned with the declaration.

Suggested doc fix
- * `@param` left_indices Device span of left table indices
- * `@param` right_indices Device span of right table indices
+ * `@param` left_indices Pointer to left table indices
+ * `@param` right_indices Pointer to right table indices
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cpp/src/join/jit/filter_join_kernel.cuh` around lines 22 - 23, Update the
documentation for the raw index pointer parameters in filter_join_kernel.cuh so
they describe device pointers rather than device spans: change the `@param`
entries for left_indices and right_indices to indicate they are raw device
pointers (cudf::size_type const*), e.g., "Device pointer to left table indices"
and "Device pointer to right table indices", and ensure any wording matches the
function signature where these parameters are declared.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@cpp/src/join/jit/filter_join_kernel.cuh`:
- Around line 22-23: Update the documentation for the raw index pointer
parameters in filter_join_kernel.cuh so they describe device pointers rather
than device spans: change the `@param` entries for left_indices and right_indices
to indicate they are raw device pointers (cudf::size_type const*), e.g., "Device
pointer to left table indices" and "Device pointer to right table indices", and
ensure any wording matches the function signature where these parameters are
declared.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 091aae27-5f3c-4aa5-a8c7-9e5bf4ddbcb9

📥 Commits

Reviewing files that changed from the base of the PR and between 2830fc4 and 451da98.

📒 Files selected for processing (1)
  • cpp/src/join/jit/filter_join_kernel.cuh

Comment thread cpp/src/join/jit/filter_join_kernel.cu
Comment thread cpp/src/join/filter_join_indices_jit.cu Outdated
Co-authored-by: Bradley Dice <bdice@bradleydice.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@cpp/src/join/filter_join_indices_jit.cu`:
- Around line 51-58: build_join_filter_template_params hardcodes the kernel
template argument has_user_data to false which can disagree with the PTX
signature built in build_join_filter_kernel when has_user_data is true; update
build_join_filter_template_params to accept/propagate the actual has_user_data
value (rather than hardcoding false) into the template_params (and do the same
for the other overload(s) around lines 91-123), ensuring the kernel template arg
and the PTX signature both use the same has_user_data value referenced by
build_join_filter_kernel.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: eadf5c04-d1ea-4792-abdc-76f08101cf67

📥 Commits

Reviewing files that changed from the base of the PR and between 451da98 and ac99883.

📒 Files selected for processing (1)
  • cpp/src/join/filter_join_indices_jit.cu

Comment thread cpp/src/join/filter_join_indices_jit.cu
@lamarrr

lamarrr commented May 20, 2026

Copy link
Copy Markdown
Contributor Author

/merge

@rapids-bot
rapids-bot Bot merged commit 339616b into NVIDIA:main May 20, 2026
216 of 219 checks passed
@davidwendt

Copy link
Copy Markdown
Contributor

This got merged with only a single C++ review approval.

@vuule vuule moved this from Burndown to Landed in libcudf May 20, 2026
rapids-bot Bot pushed a commit that referenced this pull request Jun 2, 2026
…22514)

Split from #22224

Preceded by #22511 

Story: #22598

This Pull request:

- Implements error codes for row operators
- Ports AST's operators to re-usable functions that can be used with JIT codegen
- Adds new ANSI-compliant operators:
   - ANSI_ADD
   - ANSI_SUB
   - ANSI_MUL
   - ANSI_DIV
   - ANSI_MOD
   - ANSI_ABS
   - ANSI_NEG
- Adds the `coalesce` operator
- Introduces an operator `result` type to allow error returns from operators
- Transitioned AST `operator_functors` to use the operator library

Authors:
  - Basit Ayantunde (https://github.com/lamarrr)

Approvers:
  - Lawrence Mitchell (https://github.com/wence-)
  - Yunsong Wang (https://github.com/PointKernel)

URL: #22514
@GregoryKimball GregoryKimball removed this from libcudf Jun 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature request New feature or request libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants