On Wed, 12 Sep 2012, Nathan Froyd wrote:
> ----- Original Message -----
> > Nathan, again thanks.  There are a few minor tweaks compared to your
> > version:
>
> Thanks for fixing this up!
>
> > - Keeping old layout of "mmix_reg_or_8bit_operand".  That looked like
> >   a spurious change and I prefer the ior construct to the
> >   if_then_else.
>
> ISTR without this change, there were lots of assembly changes like:
>
>     set rx, 6
>     cmp rz, ry, rx
>
> instead of the previous and better:
>
>     cmp rz, ry, 6
>
> (apologies if the assembly syntax isn't correct; hopefully the intent is 
> clear)

Yes.  My only guess is a typo in your previous edit, as the two
constructs certainly should be equivalent in *what's* being
recognized.  If they aren't, we have a bug in the gen*
machinery.  If "my" construct is wrong, then that's a separate
bug-fix, ehm.  Seems worth it to double-check, not just for
the sake of MMIX.

> but if you double-checked that the assembly didn't change
> after your changes, maybe something else that you tweaked fixed this.

I have no clue; nothing in the patch below stands out - the
missing "I"-constraint that may explain this (modulo that "H"
wasn't recognizable either) was on an "or" operation, not a
compare.  But maybe one was close enough that it mattered.

What revision was your baseline?  My baseline was r190260 but
configure-patches as posted (required to build, affecting
crtstuff at most) and with:

I'll try with your original patch and see it I can spot
something.

Index: gcc/config/mmix/predicates.md
===================================================================
--- gcc/config/mmix/predicates.md       (revision 190682)
+++ gcc/config/mmix/predicates.md       (working copy)
@@ -118,7 +118,7 @@ (define_predicate "mmix_symbolic_or_addr
        return 1;
       /* Fall through.  */
     default:
-      return address_operand (op, mode);
+      return mmix_extra_constraint (op, 'U', reload_in_progress || 
reload_completed);
     }
 })

Index: gcc/config/mmix/mmix.md
===================================================================
--- gcc/config/mmix/mmix.md     (revision 190682)
+++ gcc/config/mmix/mmix.md     (working copy)
@@ -274,7 +275,7 @@ (define_insn "anddi3"
 (define_insn "iordi3"
   [(set (match_operand:DI 0 "register_operand" "=r,r")
        (ior:DI (match_operand:DI 1 "register_operand" "%r,0")
-               (match_operand:DI 2 "mmix_reg_or_constant_operand" "rH,LS")))]
+               (match_operand:DI 2 "mmix_reg_or_constant_operand" "rI,LS")))]
   ""
   "@
    OR %0,%1,%2

> > - Replacing undefined-constraint-"H" with "I" instead of removing it.
> >   It was either renamed early or a genuine typo.  Good catch.
>
> Hard not to see it; the gen* machinery complains about undefined constraints. 
> :)

Exactly! :)  You don't congratulate the machine, but the
machinist - and sometimes the inventor of the machine.
(Thank you, Zack!)

brgds, H-P

Reply via email to