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