[code-reflection] RFR: [hat][codegen] Parenthesis in Expressions for binaryOps fixed [v4]
Juan Fumero
jfumero at openjdk.org
Mon Sep 22 16:21:30 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
Juan Fumero has updated the pull request incrementally with one additional commit since the last revision:
clean-up
-------------
Changes:
- all: https://git.openjdk.org/babylon/pull/579/files
- new: https://git.openjdk.org/babylon/pull/579/files/0e49c6c2..a8920a21
Webrevs:
- full: https://webrevs.openjdk.org/?repo=babylon&pr=579&range=03
- incr: https://webrevs.openjdk.org/?repo=babylon&pr=579&range=02-03
Stats: 5 lines in 1 file changed: 0 ins; 4 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