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

Aleksey Shipilev shade at redhat.com
Tue Jun 26 16:13:54 UTC 2018


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?

-Aleksey




More information about the shenandoah-dev mailing list