Integrated: 8290917: x86: Memory-operand arithmetic instructions have too low costs

Quan Anh Mai duke at openjdk.org
Fri Sep 16 20:11:31 UTC 2022


On Sat, 6 Aug 2022 09:53:01 GMT, Quan Anh Mai <duke at openjdk.org> wrote:

> The pattern `AddI (LoadI mem) imm` should be matched by a load followed by an add with constant, instead, it is currently matched as a constant load followed by an add with memory. The reason is that the cost of `addI_rReg_mem` is too low, this patch fixes this by increasing the cost of this fused instruction.
> 
> Testing: Manually run the test case in the JBS and look at the compiled code.
> 
> I also do some small clean-ups in x86_64.ad:
> 
> - The `mulHiL` rules have unnecessary constraints on the input registers, these can be removed. The `no_rax_RegL` operand as a consequence can also be removed.
> - The rules involving long division by a constant can be removed because it has been covered by the optimiser during idealisation.
> - The pattern `SubI src imm` and the likes never match because they are converted to `AddI src -imm` by the optimiser. As a result, these rules can be removed
> - The rules involving shifting the argument by 1 are covered by and exactly the same as the corresponding rules of shifting by an immediate. As a result, they can be removed.
> - Some rules involving and-ing with a bit mask have unnecessary constraints on the target register.
> 
> Please kindly review, thank you very much.

This pull request has now been integrated.

Changeset: 01e7b881
Author:    Quan Anh Mai <anhmdq99 at gmail.com>
Committer: Sandhya Viswanathan <sviswanathan at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/01e7b8819918906082e315870e667b15910cee99
Stats:     447 lines in 4 files changed: 131 ins; 282 del; 34 mod

8290917: x86: Memory-operand arithmetic instructions have too low costs

Reviewed-by: kvn, sviswanathan, jbhateja

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

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


More information about the hotspot-compiler-dev mailing list