RFR: 8259619: C1, x86: 3-arg StubAssembler::call_RT stack-use condition is incorrect
Christian Hagedorn
chagedorn at openjdk.java.net
Tue Jan 12 12:41:54 UTC 2021
On Tue, 12 Jan 2021 12:21:15 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> SonarCould instance reports this code smell in c1_Runtime_x86.cpp: Identical sub-expressions on both sides of operator "||"
>
> int StubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2, Register arg3) {
> #ifdef _LP64
> // if there is any conflict use the stack
> if (arg1 == c_rarg2 || arg1 == c_rarg3 ||
> arg2 == c_rarg1 || arg1 == c_rarg3 ||
> arg3 == c_rarg1 || arg1 == c_rarg2) { <---- HERE
> push(arg3);
> push(arg2);
> push(arg1);
> pop(c_rarg1);
> pop(c_rarg2);
> pop(c_rarg3);
> } else {
> mov(c_rarg1, arg1);
> mov(c_rarg2, arg2);
> mov(c_rarg3, arg3);
> }
>
> It seems obvious that the right column in the condition should have been `arg1`, `arg2`, `arg3`.
>
> Additional testing:
> - [x] Linux x86_64 `tier1`
Good catch! That looks reasonable to me.
Can you also fix this in [c1_Runtime1_aarch64.cpp](https://github.com/openjdk/jdk/blob/563b268c8f23a1f9f5e70065419d4e8661d1d0b4/src/hotspot/cpu/aarch64/c1_Runtime1_aarch64.cpp#L144-L148)?
-------------
Changes requested by chagedorn (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/2048
More information about the hotspot-compiler-dev
mailing list