[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