RFR: JDK-8213489: GC/C2 abstraction for Compile::final_graph_reshaping()

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Nov 8 19:15:24 UTC 2018

You missed change (n->Opcode() -> opcode) again :)

+bool ZBarrierSetC2::final_graph_reshaping(Compile* compile, Node* n, uint opcode) const {
+  bool handled;
+  switch (n->Opcode()) {

 > http://cr.openjdk.java.net/~rkennke/JDK-8213489/webrev.02/

The rest looks good.


On 11/8/18 10:50 AM, Roman Kennke wrote:
> Hi Vladimir,
>>>> +        assert(n->is_Mem(), "");
>>>> +        MemNode* mem  = (MemNode*)n;
>>>> could be replaced with
>>>> +        MemNode* mem  = n->as_Mem();
>>> Right. I copied existing code from final_graph_reshaping. New changeset
>>> fixes it.
>> Would be nice if you also fix existing code which you copied.
> Right. See below for new changeset.
>>>> I don't see removal of moved ZGC code in
>>>> Compile::final_graph_reshaping_impl()
>>> Oops, my bad. Fixed.
>>>> Why you skip only assert and not whole switch() (or return) ? Do you
>>>> want to process some nodes twice: by GC first and then in main switch?
>>> Yes. We have a case in Shenandoah where we want to process a CallNode
>>> Shenandoah-specific and then also want to verify/reshape generically.
>> What "verify/reshape generically" code you are referencing here? If
>> opcode of Shenandoah's node is not listed in main switch only 'default:'
>> code will be executed. And you are skipping code there in such case. I
>> still do not get why you need to execute main switch when gc_handled is
>> 'true'.
> We want to handle CallLeaf to remove a call to a (useless) SATB barrier
> for which the corresponding store has been eliminated. G1 does something
> similar, but can figure it out coming from the post-barrier, which has a
> link to the pre-barrier. We need to do it this way. After we've done
> that, we still want the rest of CallLeaf processing to apply.
> See:
> https://builds.shipilev.net/patch-openjdk-shenandoah-jdk-only-shared/latest/src/hotspot/share/opto/compile.cpp.sdiff.html
> around line 2861.
>> Do you want to process any nodes already listed in main switch? In such
>> cases you would need to return 'false' and execute main switch - asserts
>> will be valid in such case.
> Right, that would be a more intuitive way to do it. My original idea was
> to avoid touching the default branch if GC handled the node so that we
> don't accidentally trip one of the asserts there, but we can use the
> same flag to avoid the switch altogether.
> In order to make this sane, I moved the main switch into its own method.
> Updated webrev:
> Incremental:
> http://cr.openjdk.java.net/~rkennke/JDK-8213489/webrev.02.diff/
> Full:
> http://cr.openjdk.java.net/~rkennke/JDK-8213489/webrev.02/
> Roman

More information about the hotspot-compiler-dev mailing list