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

Reply via email to