RFR: 8347901: C2 should remove unused leaf / pure runtime calls

Marc Chevalier mchevalier at openjdk.org
Fri May 2 08:07:57 UTC 2025


A first part toward a better support of pure functions.

## Pure Functions

Pure functions (considered here) are functions that have no side effects, no effect on the control flow (no exception or such), cannot deopt etc.. It's really a function that you can execute anywhere, with whichever arguments without effect other than wasting time. Integer division is not pure as dividing by zero is throwing. But many floating point functions will just return `NaN` or `+/-infinity` in problematic cases.

## Scope

We are not going all powerful for now! It's mostly about identifying some pure functions and being able to remove them if the result is unused. Some other things are not part of this PR, on purpose. Especially, this PR doesn't propose a way to move pure calls around. The reason is that pure calls are macro nodes later expanded into other, regular calls, which require a control input. To be able to do the expansion, we just keep the control in the pure call as well.

## Implementation Overview

We created here some new node kind for pure calls that are expanded into regular calls during macro expansion. This also allows the removal of `ModD` and `ModF` nodes that have their pure equivalent now. They are surprisingly hard to unify with other floating point functions from an implementation point of view!

IR framework and IGV needed a little bit of fixing.

Thanks,
Marc

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

Commit messages:
 - Clean up IRNode
 - cleanup
 - hash and cmp
 - get_early_ctrl_for_expensive
 - depends_only_on_test
 - depends_only_on_test
 - First try

Changes: https://git.openjdk.org/jdk/pull/24966/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24966&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8347901
  Stats: 694 lines in 15 files changed: 449 ins; 226 del; 19 mod
  Patch: https://git.openjdk.org/jdk/pull/24966.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24966/head:pull/24966

PR: https://git.openjdk.org/jdk/pull/24966


More information about the graal-dev mailing list