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