[code-reflection] RFR: Add HATPtrOps to array view

Juan Fumero jfumero at openjdk.org
Fri Dec 19 08:12:11 UTC 2025


On Thu, 18 Dec 2025 20:42:08 GMT, Ruby Chen <duke at openjdk.org> wrote:

> Add four new HATPtrOps to support array views.
> 
> Also update array view tests and add a new test to check for correct memory copies for a write only buffer.
> 
> Minor change in BufferTagger to change access types into bytes.

Thanks @rbrchen . I added some comments. 
All tests passing from my side.

hat/core/src/main/java/hat/buffer/BF16Array.java line 51:

> 49:     }
> 50: 
> 51:     default BF16Impl[] arrayview() {return null;}

Rename to `arrayView` for consistency with the other types.

hat/core/src/main/java/hat/codebuilders/C99HATKernelBuilder.java line 535:

> 533:     }
> 534: 
> 535:     T ptrAccess(ScopedCodeBuilderContext builderContext, HATPtrOp hatPtrOp) {

method private to this class? Consider adding `private`

hat/core/src/main/java/hat/codebuilders/C99HATKernelBuilder.java line 571:

> 569:         return switch (op) {
> 570:             case CoreOp.VarOp varOp -> varOp.varName();
> 571:             case HATLocalVarOp hatLocalVarOp -> hatLocalVarOp.varName();

Consider using the base class for both Local and Private `HATMemoryOp` and call the varName method. So the switch will be simplified.

hat/core/src/main/java/hat/phases/HATDialectifyArrayViewPhase.java line 226:

> 224:     record Node<T>(T value, List<Node<T>> edges) {
> 225:         ArrayAccessInfo getInfo(Map<Op.Result, Op.Result> replaced) {
> 226:             List<Node<T>> wl = new ArrayList<>();

what `wl` stands for?

hat/core/src/main/java/hat/phases/HATDialectifyArrayViewPhase.java line 237:

> 235:                     if (res.op() instanceof JavaOp.ArrayAccessOp || res.op() instanceof JavaOp.ArrayLengthOp) {
> 236:                         buffer = res;
> 237:                         indices.addFirst(res.op() instanceof JavaOp.ArrayAccessOp ? ((Op.Result) res.op().operands().get(1)) : ((Op.Result) res.op().operands().get(0)));

Consider adding a private method that returns the right operand. 

private Op.Result getOperand(...) {
  return res.op() instanceof JavaOp.ArrayAccessOp ? ((Op.Result) res.op().operands().get(1)) : ((Op.Result) res.op().operands().get(0));
 }
 ```

-------------

Changes requested by jfumero (Reviewer).

PR Review: https://git.openjdk.org/babylon/pull/765#pullrequestreview-3597382361
PR Review Comment: https://git.openjdk.org/babylon/pull/765#discussion_r2634053525
PR Review Comment: https://git.openjdk.org/babylon/pull/765#discussion_r2634074070
PR Review Comment: https://git.openjdk.org/babylon/pull/765#discussion_r2634087399
PR Review Comment: https://git.openjdk.org/babylon/pull/765#discussion_r2634104833
PR Review Comment: https://git.openjdk.org/babylon/pull/765#discussion_r2634115923


More information about the babylon-dev mailing list