RFR: Make in_cset checks use signed bytes to match C2 better

Roman Kennke rkennke at redhat.com
Tue Jun 26 17:12:46 UTC 2018


Am 26.06.2018 um 18:13 schrieb Aleksey Shipilev:
> On 06/20/2018 01:34 PM, Aleksey Shipilev wrote:
>> This makes the similar change we did for gc_state checks earlier:
>>   http://hg.openjdk.java.net/shenandoah/jdk/rev/cd5a82e54311
>>
>> It turns this:
>>
>>    +0: movzbl (%r11,%r10,1),%r10d
>>    +5: test   %r10d,%r10d
>>    +8: je     0x00007f7b0fc44e15
>>   +10: mov    %r8,%rdi
>>
>> ...into this:
>>
>>
>>    +0: cmpb   $0x0,(%r11,%r10,1)
>>    +5: je     0x00007f3de0ce067e
>>    +7: mov    %r8,%rdi
>>
>> Fix:
>>
>> diff -r 50cc7d208f81 src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
>> --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp	Wed Jun 20 13:23:30 2018 +0200
>> +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp	Wed Jun 20 13:29:11 2018 +0200
>> @@ -3931,7 +3931,7 @@
>>      uint in_cset_fast_test_idx = Compile::AliasIdxRaw;
>>      const TypePtr* in_cset_fast_test_adr_type = NULL; // debug-mode-only argument
>>      debug_only(in_cset_fast_test_adr_type = phase->C->get_adr_type(in_cset_fast_test_idx));
>> -    Node* in_cset_fast_test_load = new LoadUBNode(c, raw_mem, in_cset_fast_test_adr,
>> in_cset_fast_test_adr_type, TypeInt::BOOL, MemNode::unordered);
>> +    Node* in_cset_fast_test_load = new LoadBNode(c, raw_mem, in_cset_fast_test_adr,
>> in_cset_fast_test_adr_type, TypeInt::BYTE, MemNode::unordered);
>>      phase->register_new_node(in_cset_fast_test_load, c);
>>      Node* in_cset_fast_test_cmp = new CmpINode(in_cset_fast_test_load, phase->igvn().zerocon(T_INT));
>>      phase->register_new_node(in_cset_fast_test_cmp, c);
>>
>> Testing: tier3_gc_shenandoah
> 
> The patch still applies on top of sh/jdk without conflicts and passes tier3_gc_shenandoah. OK to push?

Yes. Thanks!
Roman




More information about the shenandoah-dev mailing list