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

Aleksey Shipilev shade at redhat.com
Wed Jun 20 11:34:54 UTC 2018


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

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list