RFR(S): 8168283: adlc: fix error expanding expanded nodes.
Lindenmaier, Goetz
goetz.lindenmaier at sap.com
Fri Oct 21 07:36:27 UTC 2016
Hi,
I added an assertion, generated code looks like this now:
// Remove duplicated operands and inputs which use the same name.
if (num_opnds() == 4) {
unsigned num0 = 0;
unsigned num1 = opnd_array(1)->num_edges(); // mem
unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
unsigned idx0 = oper_input_base();
unsigned idx1 = idx0 + num0;
unsigned idx2 = idx1 + num1;
unsigned idx3 = idx2 + num2;
unsigned idx4 = idx3 + num3;
for (int i = idx4 - 1; i >= (int)idx3; i--) {
del_req(i);
}
_num_opnds = 3;
} else {
assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
}
New webrev:
http://cr.openjdk.java.net/~goetz/wr16/8168283-adlc_expand/webrev.02/
Best regards,
Goetz.
> -----Original Message-----
> From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
> Sent: Donnerstag, 20. Oktober 2016 19:09
> To: Lindenmaier, Goetz <goetz.lindenmaier at sap.com>; hotspot-compiler-
> dev at openjdk.java.net
> Subject: Re: RFR(S): 8168283: adlc: fix error expanding expanded nodes.
>
> On 10/19/16 11:16 PM, Lindenmaier, Goetz wrote:
> > Hi Vladimir,
> >
> > thanks for looking at my change.
> >
> >> Should we use next ?
> >> if (num_opnds() > %d) {\n", node->num_unique_opnds());
> >
> > The code within the if accesses the opnd_array up to index
> 'cur_num_opnds'.
> > Therefore num_opnds() must be at least that number.
> > It is opnd_array(cur_num_opnds-1)->num_edges() what is crashing in my
> case.
> >
> > It would be possible to check >=, but I don't think that makes sense.
>
> Yes, num_opnds() >= cur_num_opnds does not make sense. That is why I
> thought to use num_unique_opnds.
>
> > But I could assert that num_opnds() is either cur_num_opnds or
> num_unique_opnds().
>
> Would be nice.
>
> thanks,
> Vladimir
>
> >
> > Best regards,
> > Goetz.
> >
> >
> >> -----Original Message-----
> >> From: hotspot-compiler-dev [mailto:hotspot-compiler-dev-
> >> bounces at openjdk.java.net] On Behalf Of Vladimir Kozlov
> >> Sent: Donnerstag, 20. Oktober 2016 00:26
> >> To: hotspot-compiler-dev at openjdk.java.net
> >> Subject: Re: RFR(S): 8168283: adlc: fix error expanding expanded nodes.
> >>
> >> Should we use next ?
> >>
> >> if (num_opnds() > %d) {\n", node->num_unique_opnds());
> >>
> >> instead of
> >>
> >> + fprintf(fp, " // Remove duplicated operands and inputs which use
> >> the same name.\n");
> >> + fprintf(fp, " if (num_opnds() == %d) {\n", cur_num_opnds);
> >>
> >> Otherwise seems good.
> >>
> >> Thanks,
> >> Vladimir
> >>
> >> On 10/19/16 7:44 AM, Lindenmaier, Goetz wrote:
> >>> Hi,
> >>>
> >>> This fixes a small error in the expand methods usually generated from
> >> expand rules by adlc.
> >>>
> >>> Actually all nodes get an expand method generated, as it's used to finish
> >> construction of nodes after the matcher generated them. E.g., temp
> nodes
> >> are added in the expand.
> >>>
> >>> The error occurs for a 'real' expand generating several sub nodes. The
> 'real'
> >> expand rule calls expand of the newly generated nodes, let's call it sub-
> >> expand.
> >>>
> >>> Unfortunately the matcher sometimes generates superfluous operands
> >> that are removed in the expand methods. The 'real' expand generating
> sub-
> >> nodes does not generate these superfluous operands, therefore running
> the
> >> sub-expand crashes when it tries to remove these.
> >>>
> >>> This change adds a simple check in the sub-expand to avoid this crash.
> Also
> >> it adds setting the correct number of operands in the expand that
> generates
> >> the sub node.
> >>>
> >>> An example of an adl instruct declaration and the generated code is
> >> attached to the bug. We see this in a rule for the s390 port.
> >>>
> >>> http://cr.openjdk.java.net/~goetz/wr16/8168283-
> >> adlc_expand/webrev.01/
> >>> https://bugs.openjdk.java.net/browse/JDK-8168283
> >>>
> >>> Please review this change. I please need a sponsor.
> >>>
> >>> Best regards,
> >>> Goetz.
> >>>
More information about the hotspot-compiler-dev
mailing list