RFR: 8273021: C2: Improve Add and Xor ideal optimizations [v4]
Tobias Hartmann
thartmann at openjdk.java.net
Fri Sep 10 06:18:06 UTC 2021
On Fri, 10 Sep 2021 02:27:38 GMT, Yi Yang <yyang at openjdk.org> wrote:
>> Greetings. This patch adds the following identical equations for Add and Xor node, respectively, which probably drives further optimizations.
>>
>>
>> ~(x-1) => -x
>> ~x + 1 => -x
>>
>>
>>
>> Verified by generated opto assembly, maybe an IR verification test can be added later.
>>
>> Compiled method (c2) 71 1 compiler.c2.TestAddXorIdeal::test1 (6 bytes)
>> 0x00007f9e11514800: sub $0x18,%rsp
>> 0x00007f9e11514807: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test1 at -1 (line 39)
>> 0x00007f9e1151480c: mov %esi,%eax
>> 0x00007f9e1151480e: neg %eax ;*iadd {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test1 at 4 (line 39)
>> 0x00007f9e11514810: add $0x10,%rsp
>> 0x00007f9e11514814: pop %rbp
>> 0x00007f9e11514815: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e1151481c: ja 0x00007f9e11514823
>> 0x00007f9e11514822: retq
>>
>> Compiled method (c2) 73 2 compiler.c2.TestAddXorIdeal::test2 (6 bytes)
>> 0x00007f9e11512480: sub $0x18,%rsp
>> 0x00007f9e11512487: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test2 at -1 (line 43)
>> 0x00007f9e1151248c: mov %esi,%eax
>> 0x00007f9e1151248e: neg %eax ;*ixor {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test2 at 4 (line 43)
>> 0x00007f9e11512490: add $0x10,%rsp
>> 0x00007f9e11512494: pop %rbp
>> 0x00007f9e11512495: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e1151249c: ja 0x00007f9e115124a3
>> 0x00007f9e115124a2: retq
>>
>> Compiled method (c2) 72 3 compiler.c2.TestAddXorIdeal::test3 (8 bytes)
>> 0x00007f9e11514b00: sub $0x18,%rsp
>> 0x00007f9e11514b07: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test3 at -1 (line 47)
>> 0x00007f9e11514b0c: mov %rsi,%rax
>> 0x00007f9e11514b0f: neg %rax ;*ladd {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test3 at 6 (line 47)
>> 0x00007f9e11514b12: add $0x10,%rsp
>> 0x00007f9e11514b16: pop %rbp
>> 0x00007f9e11514b17: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e11514b1e: ja 0x00007f9e11514b25
>> 0x00007f9e11514b24: retq
>>
>> Compiled method (c2) 72 4 compiler.c2.TestAddXorIdeal::test4 (8 bytes)
>> 0x00007f9e11514500: sub $0x18,%rsp
>> 0x00007f9e11514507: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test4 at -1 (line 51)
>> 0x00007f9e1151450c: mov %rsi,%rax
>> 0x00007f9e1151450f: neg %rax ;*lxor {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test4 at 6 (line 51)
>> 0x00007f9e11514512: add $0x10,%rsp
>> 0x00007f9e11514516: pop %rbp
>> 0x00007f9e11514517: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e1151451e: ja 0x00007f9e11514525
>> 0x00007f9e11514524: retq
>>
>> Compiled method (c2) 72 5 compiler.c2.TestAddXorIdeal::test5 (6 bytes)
>> 0x00007f9e11518500: sub $0x18,%rsp
>> 0x00007f9e11518507: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test5 at -1 (line 55)
>> 0x00007f9e1151850c: mov %esi,%eax
>> 0x00007f9e1151850e: neg %eax ;*iadd {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test5 at 4 (line 55)
>> 0x00007f9e11518510: add $0x10,%rsp
>> 0x00007f9e11518514: pop %rbp
>> 0x00007f9e11518515: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e1151851c: ja 0x00007f9e11518523
>> 0x00007f9e11518522: retq
>>
>> Compiled method (c2) 74 6 compiler.c2.TestAddXorIdeal::test6 (6 bytes)
>> 0x00007f9e11512180: sub $0x18,%rsp
>> 0x00007f9e11512187: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test6 at -1 (line 59)
>> 0x00007f9e1151218c: mov %esi,%eax
>> 0x00007f9e1151218e: neg %eax ;*ixor {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test6 at 4 (line 59)
>> 0x00007f9e11512190: add $0x10,%rsp
>> 0x00007f9e11512194: pop %rbp
>> 0x00007f9e11512195: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e1151219c: ja 0x00007f9e115121a3
>> 0x00007f9e115121a2: retq
>>
>> Compiled method (c2) 74 7 compiler.c2.TestAddXorIdeal::test7 (8 bytes)
>> 0x00007f9e11511e80: sub $0x18,%rsp
>> 0x00007f9e11511e87: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test7 at -1 (line 63)
>> 0x00007f9e11511e8c: mov %rsi,%rax
>> 0x00007f9e11511e8f: neg %rax ;*ladd {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test7 at 6 (line 63)
>> 0x00007f9e11511e92: add $0x10,%rsp
>> 0x00007f9e11511e96: pop %rbp
>> 0x00007f9e11511e97: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e11511e9e: ja 0x00007f9e11511ea5
>> 0x00007f9e11511ea4: retq
>>
>>
>> Compiled method (c2) 73 8 compiler.c2.TestAddXorIdeal::test8 (10 bytes)
>> 0x00007f9e11512780: sub $0x18,%rsp
>> 0x00007f9e11512787: mov %rbp,0x10(%rsp) ;*synchronization entry
>> ; - compiler.c2.TestAddXorIdeal::test8 at -1 (line 67)
>> 0x00007f9e1151278c: mov %rsi,%rax
>> 0x00007f9e1151278f: neg %rax ;*lxor {reexecute=0 rethrow=0 return_oop=0}
>> ; - compiler.c2.TestAddXorIdeal::test8 at 8 (line 67)
>> 0x00007f9e11512792: add $0x10,%rsp
>> 0x00007f9e11512796: pop %rbp
>> 0x00007f9e11512797: cmp 0x338(%r15),%rsp ; {poll_return}
>> 0x00007f9e1151279e: ja 0x00007f9e115127a5
>> 0x00007f9e115127a4: retq
>
> Yi Yang has updated the pull request incrementally with one additional commit since the last revision:
>
> review from Tobias
Marked as reviewed by thartmann (Reviewer).
-------------
PR: https://git.openjdk.java.net/jdk/pull/5266
More information about the hotspot-compiler-dev
mailing list