> To do `acmp`, if the pointer comparison fails, we check nullity of operands, 
> whether operands have the same class, and if this class is a value class. And 
> if everything works, we call `isSubstitutable`.
> 
> Currently, when we have profiling information, we use it to speculate that 
> operands are null or of an identity class (in which case, pointer comparison 
> is all we should do). This patch proposes to take advantage of the profiling 
> when it hints that operands are value objects. By speculating that at least 
> one operand is of a given value class, the call to `isSubstitutable` can be 
> intrinsified later, and thus, spare the Java call.
> 
> Speculating on one operand is enough since we will check that operands are of 
> the same type.
> 
> 
> Some relevant microbenchmark in `valhalla.acmp.array.Value032` (in ns/op 
> (lower is better)):
> 
> |               | branch_obj_equals000 | branch_val_equals000 | 
> branch_obj_equals025 | branch_val_equals025 |
> |---------------|----------------------|----------------------|----------------------|----------------------|
> | Before        | 4.361 ± 0.153  ns/op | 0.907 ± 0.015  ns/op | 3.332 ± 0.040 
>  ns/op | 0.845 ± 0.032  ns/op |
> | With this fix | 0.911 ± 0.019  ns/op | 0.899 ± 0.021  ns/op | 0.838 ± 0.023 
>  ns/op | 0.806 ± 0.012  ns/op |
> 
> 
> 
> <details>
> <summary>Full results of <tt>micro:valhalla.acmp.array.Value032</tt></summary>
> In more details, before:
> 
> 
> Benchmark                                       Mode  Cnt  Score   Error  
> Units
> Value032.branch_obj_equals000                   avgt   15  4.087 ± 0.122  
> ns/op
> Value032.branch_obj_equals025                   avgt   15  3.117 ± 0.067  
> ns/op
> Value032.branch_obj_equals050                   avgt   15  2.235 ± 0.083  
> ns/op
> Value032.branch_obj_equals075                   avgt   15  1.292 ± 0.077  
> ns/op
> Value032.branch_obj_equals100                   avgt   15  0.316 ± 0.004  
> ns/op
> Value032.branch_val_equals000                   avgt   15  0.891 ± 0.024  
> ns/op
> Value032.branch_val_equals025                   avgt   15  0.839 ± 0.033  
> ns/op
> Value032.branch_val_equals050                   avgt   15  0.869 ± 0.087  
> ns/op
> Value032.branch_val_equals075                   avgt   15  0.816 ± 0.023  
> ns/op
> Value032.branch_val_equals100                   avgt   15  0.906 ± 0.032  
> ns/op
> Value032.result_obj_equals000                   avgt   15  4.115 ± 0.185  
> ns/op
> Value032.result_obj_equals025                   avgt   15  3.326 ± 0.346  
> ns/op
> Value032.result_obj_equals050                   avgt   15  2.353 ± 0.516  n...

Marc Chevalier has updated the pull request incrementally with one additional 
commit since the last revision:

  Indentation

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

Changes:
  - all: https://git.openjdk.org/valhalla/pull/2237/files
  - new: https://git.openjdk.org/valhalla/pull/2237/files/728d2220..3873dbfa

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=valhalla&pr=2237&range=01
 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=2237&range=00-01

  Stats: 8 lines in 1 file changed: 0 ins; 0 del; 8 mod
  Patch: https://git.openjdk.org/valhalla/pull/2237.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/2237/head:pull/2237

PR: https://git.openjdk.org/valhalla/pull/2237

Reply via email to