[13] RFR (S): 8217918: C2: -XX:+AggressiveUnboxing is broken

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Sat Feb 2 02:12:25 UTC 2019

>>> This ID value can't be random one.
>> The code you refer to compares PHI nodes using is_same_inst_field() 
>> which looks for the node with the same inst_id (among other things).
>> Placeholder ID is chosen to be unique (no node in the graph with the 
>> same ID is present or will be in the future), but the ID is shared 
>> between all the embedded usages. It doesn't refer to any existing 
>> node, but it didn't before the renumbering pass as well.
> But before renumbering it could be the same ID - and now it will be 
> different. What I am trying to say some nodes could have the same ID 
> which came from already dead node. I think we should preserve that - 
> keep the same ID (which could be different after renumbering.

Yes, that's exactly how it works after the fix:

+int PhaseRenumberLive::new_index(int old_idx) {
+  assert(_is_pass_finished, "not finished");
+  if (_old2new_map.at(old_idx) == -1) { // absent
+    // Allocate a placeholder to preserve uniqueness
+    _old2new_map.at_put(old_idx, _live_node_count);
+    _live_node_count++;
+  }
+  return _old2new_map.at(old_idx);

PhaseRenumberLive::new_index() consults _old2new_map first and updates 
it with placeholder ID. All consequent requests will see it.

Best regards,
Vladimir Ivanov

More information about the hotspot-compiler-dev mailing list