[code-reflection] RFR: [hat][codegen] Parenthesis in Expressions for binaryOps fixed

Juan Fumero jfumero at openjdk.org
Mon Sep 22 13:49:09 UTC 2025


HAT Code gen was not generated parenthesis correctly. This PR forces to use an open and closed parenthesis for binaryOps. 

Code reflection generates code models in SSA form. Therefore, priority is given by computing values first the values before carrying out the result-op to other ops. 

For instance: 


final int TN = 2;
final int TF = 128;
final int MAX = 1024;
int c = MAX / (TN * TF);


Generates the following code model:


    %10 : java.type:"int" = var.load %9 @loc="50:17";
    %11 : java.type:"int" = var.load %5 @loc="50:24";
    %12 : java.type:"int" = var.load %7 @loc="50:29";
    %13 : java.type:"int" = mul %11 %12 @loc="50:24";    >> mult
    %14 : java.type:"int" = div %10 %13 @loc="50:17";      >> div
    %15 : Var<java.type:"int"> = var %14 @loc="50:9" @"c";


while 


final int TN = 2;
final int TF = 128;
final int MAX = 1024;
int c = MAX / TN * TF;


Generates the following code model.


    %10 : java.type:"int" = var.load %9 @loc="50:17";
    %11 : java.type:"int" = var.load %5 @loc="50:23";
    %12 : java.type:"int" = div %10 %11 @loc="50:17";
    %13 : java.type:"int" = var.load %7 @loc="50:28";
    %14 : java.type:"int" = mul %12 %13 @loc="50:17";
    %15 : Var<java.type:"int"> = var %14 @loc="50:9" @"c";


The issue was that in the HAT codegen, parentheses were computed based on pure precedence of the operator, not based on the dependencies. 

How to test:


HAT=SHOW_CODE java @hat/test ffi-opencl oracle.code.hat.TestParenthesis

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

Commit messages:
 - [hat] Expressions for binaryOps fixed

Changes: https://git.openjdk.org/babylon/pull/579/files
  Webrev: https://webrevs.openjdk.org/?repo=babylon&pr=579&range=00
  Stats: 86 lines in 3 files changed: 85 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/babylon/pull/579.diff
  Fetch: git fetch https://git.openjdk.org/babylon.git pull/579/head:pull/579

PR: https://git.openjdk.org/babylon/pull/579


More information about the babylon-dev mailing list