RFR: 8273454: C2: Transform (-a)*(-b) into a*b [v4]
Eric Liu
eliu at openjdk.java.net
Fri Sep 10 02:59:02 UTC 2021
On Thu, 9 Sep 2021 15:02:32 GMT, Zhengyu Gu <zgu at openjdk.org> wrote:
>> The transformation reduce instructions in generated code.
>>
>> ### x86_64:
>>
>> Before:
>> ```
>> 0x00007fb92c78b3ac: neg %esi
>> 0x00007fb92c78b3ae: neg %edx
>> 0x00007fb92c78b3b0: mov %esi,%eax
>> 0x00007fb92c78b3b2: imul %edx,%eax ;*imul {reexecute=0 rethrow=0 return_oop=0}
>> ; - TestSub::runSub at 4 (line 9)
>>
>> After:
>>
>> ; - TestSub::runSub at -1 (line 9)
>> 0x00007fc8c05b74ac: mov %esi,%eax
>> 0x00007fc8c05b74ae: imul %edx,%eax ;*imul {reexecute=0 rethrow=0 return_oop=0}
>> ; - TestSub::runSub at 4 (line 9)
>>
>>
>>
>> ### AArch64:
>> Before:
>>
>> 0x0000ffff814b4a70: neg w11, w1
>> 0x0000ffff814b4a74: mneg w0, w2, w11 ;*imul {reexecute=0 rethrow=0 return_oop=0}
>> ; - TestSub::runSub at 4 (line 9)
>>
>>
>> After:
>>
>> 0x0000ffff794a67f0: mul w0, w1, w2 ;*imul {reexecute=0 rethrow=0 return_oop=0}
>> ; - TestSub::runSub at 4 (line 9)
>
> Zhengyu Gu has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix node in place instead of creating new node
test/hotspot/jtreg/compiler/integerArithmetic/TestNegMultiply.java line 44:
> 42:
> 43: private static void testInt(int a, int b) {
> 44: int expected = (-a) * (-b);
Are you sure about this is the expected value? As the method has been invoked 2000 times, I think it would be compiled by c2.
test/hotspot/jtreg/compiler/integerArithmetic/TestNegMultiply.java line 63:
> 61: }
> 62: }
> 63: }
How about calculating the expected value outside the iteration to avoid it to be compiled?
``` java
private static void testLong() {
for (int i = 0; i < 20_000; i++) {
long a = random.nextLong();
long b = random.nextLong();
long expected = (-a) * (-b);
if (expected != test(a, b)) {
throw new RuntimeException("Incorrect result.");
}
}
}
-------------
PR: https://git.openjdk.java.net/jdk/pull/5403
More information about the hotspot-compiler-dev
mailing list