On Wed, 24 Jan 2024 18:48:03 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> wrote:
> Naive question: the right way to use this would be almost invariably be like > this: > > ``` > if (isCompileConstant(foo) && fooHasCertainStaticProperties(foo)) { > // fast-path > } > // slow path > ``` > > Right? Then the expectation is that during interpreter and C1, > `isCompileConstant` always returns false, so we just never take the fast path > (but we probably still pay for the branch, right?). And, when we get to C2 > and this method is inlined, at this point we know that either `foo` is > constant or not. If it is constant we can check other conditions on foo > (which presumably is cheap because `foo` is constant) and maybe take the > fast-path. In both cases, there's no branch in the generated code because we > know "statically" when inlining if `foo` has the right shape or not. Correct? P.S. if this is correct, please consider adding something along those lines in the javadoc of `isCompileConstant`; as it stands it is a bit obscure to understand how this thing might be used, and what are the common pitfalls to avoid when using it. ------------- PR Comment: https://git.openjdk.org/jdk/pull/17527#issuecomment-1908729766