On Fri, Mar 4, 2016 at 6:06 PM, Richard Biener
<richard.guent...@gmail.com> wrote:
>
> On March 4, 2016 5:35:13 PM GMT+01:00, "Bin.Cheng" <amker.ch...@gmail.com> 
> wrote:
> >On Fri, Mar 4, 2016 at 11:57 AM, Richard Biener
> ><richard.guent...@gmail.com> wrote:
> >> On Fri, Mar 4, 2016 at 12:07 PM, Bin Cheng <bin.ch...@arm.com> wrote:
> >>> Hi,
> >>> A address canonicalization interface was introduced by my original
> >patch to PR69052.  The interface sorts sub-parts in an address
> >expression based on precedences defined by function
> >commutative_operand_precedence.  It also assumes that all CONST_INT
> >sub-parts are at the end of vector after sorting.  But this is not
> >always true because commutative_operand_precedence sets the same
> >precedence to both CONST_INT and CONST_WIDE_INT.  The patch could be
> >broken in cases which have CONST_WIDE_INT sorted after CONST_INT.  Even
> >though I don't think we can really run into such complicated case, I
> >worked out a patch forcing CONST_INT to lower precedence than
> >CONST_WIDE_INT, so that for sure it will be sorted after all other
> >kinds sub-parts.
> >>>
> >>> This is an obvious change.  Bootstrap&test on x86_64, bootstrap&test
> >on AArch64.  Is it OK for this stage?
> >>
> >> I believe the obvious change would be to change
> >> commutative_operand_precedence to pre-CONST_WIDE_INT behavior, namely
> >> giving CONST_WIDE_INT the same precedence as CONST_DOUBLE.
> >Yes, but I am not sure what else this change will affect, so I made
> >the smallest change in the original code.
>
> I don't like going with this kind of weirdo changes out of caution.  If you 
> think it's too dangerous the push it back to gcc 7 and consider backporting 
> for 6.2

Hi,
Attachment is the patch setting precedence of CONST_WIDE_INT to the
same value as CONST_DOUBLE.  Bootstrap and test on x86_64 and AArch64,
no regressions.

Thanks,
bin

2016-03-03  Bin Cheng  <bin.ch...@arm.com>

    PR rtl-optimization/69052
    * rtlanal.c (commutative_operand_precedence): Set higher precedence
    to CONST_WIDE_INT.
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 642611f..bacc5f2 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -3358,7 +3358,7 @@ commutative_operand_precedence (rtx op)
   if (code == CONST_INT)
     return -8;
   if (code == CONST_WIDE_INT)
-    return -8;
+    return -7;
   if (code == CONST_DOUBLE)
     return -7;
   if (code == CONST_FIXED)

Reply via email to