conditional move

Gilles Duboscq duboscq at ssw.jku.at
Wed Jun 19 06:25:16 PDT 2013


I think that we should rather always go for ConditionalNodes, it should
then be a backend specific decision about how to optimally compute them.
But in this case we would need a backend specific phase near that does the
correct transformation.


On Wed, Jun 19, 2013 at 3:19 PM, Lukas Stadler <Lukas.Stadler at jku.at> wrote:

> There's a heuristic in the canonicalization of IfNodes that says that it
> is only beneficial to create a ConditionalNode if the two values are
> constant integers or constant longs.
> You can see it in IfNode.removeOrMaterializeIf. This restriction on types
> is AMD64 - specific, and I think we should remove it anyway.
> (because the only downside could be that we have to create the if again at
> a lower level).
>
> The restriction on constants, however, makes sense - because if we need to
> do work to calculate the values then this work should happen only if we
> need it.
>
> - Lukas
>
> On Jun 19, 2013, at 3:07 PM, "Deneau, Tom" <tom.deneau at amd.com> wrote:
>
> > Wondering whether anyone knows the reason for the problem below?
> > For the HSAIL backend, we would like both to emit conditional moves.
> > Is there a backend property that enables this?
> >
> > -- Tom
> >
> >
> > -----Original Message-----
> > From: Deneau, Tom
> > Sent: Friday, May 24, 2013 6:42 PM
> > To: 'Doug Simon'; Frost, Gary
> > Cc: Lukas Stadler; graal-dev at openjdk.java.net
> > Subject: RE: conditional move
> >
> > I noticed that this code emits a Conditional Move node
> >
> >       public int test(int a, int b) {
> >               return (a < b ? 1 : 2);
> >       }
> >
> > but this one does not
> >       public float test(int a, int b) {
> >               return (a < b ? 1.0f : 2.0f);
> >       }
> >
> > -- Tom
> >
> > -----Original Message-----
> > From: Doug Simon [mailto:doug.simon at oracle.com]
> > Sent: Friday, May 24, 2013 10:28 AM
> > To: Frost, Gary
> > Cc: Lukas Stadler; Deneau, Tom; graal-dev at openjdk.java.net
> > Subject: Re: conditional move
> >
> > Yes, because ternaries are compiled by javac as if-statements.
> >
> > On May 24, 2013, at 5:17 PM, "Frost, Gary" <Gary.Frost at amd.com> wrote:
> >
> >> Presumably, ternaries are good candidates for this.
> >>
> >> boolean isOdd(int i){
> >>   boolean odd=((i%2)!=0)?0:1;
> >>   return odd;
> >> }
> >>
> >> -----Original Message-----
> >> From: graal-dev-bounces at openjdk.java.net [mailto:
> graal-dev-bounces at openjdk.java.net] On Behalf Of Lukas Stadler
> >> Sent: Friday, May 24, 2013 3:51 AM
> >> To: Deneau, Tom
> >> Cc: graal-dev at openjdk.java.net
> >> Subject: Re: conditional move
> >>
> >> The ConditionalNode is most of the time not created by the GraphBuilder
> directly, but it will appear later when a simple if/then/else is
> canonicalized.
> >> So a simple snippet that boils down to a conditional move could look
> like this:
> >>
> >> public static int testSnippet(int i) {
> >> if (i == 0) {
> >>   return 1;
> >> } else {
> >>   return 2;
> >> }
> >> }
> >>
> >> - Lukas
> >>
> >>
> >> On May 24, 2013, at 1:04 AM, "Deneau, Tom" <tom.deneau at amd.com> wrote:
> >>
> >>> While compiling a larger chunk of code we were handed a
> >>> ConditionalMove node (which we have not implemented yet).  I would
> >>> like to make a smaller test case for this but java patterns that I
> >>> thought would be mapping to conditional move aren't doing so.  What
> >>> would be a typical small test case for generating the ConditionalMove
> node?
> >>>
> >>> -- Tom Deneau
> >>>
> >>
> >>
> >>
> >
> >
> >
>
>


More information about the graal-dev mailing list