Committed: fix PR49285, breakage building libgcc2 for MMIX

Hans-Peter Nilsson
Mon Jun 6 04:10:00 GMT 2011

I needed a baseline for PR48542 (problems with setjmp/longjmp), but
building MMIX was broken on trunk.  It was "bitten" by the fixups to
predicate matching done recentlish.  The comment above the MMIX
truncdfsf2 expander complains about having to use an expander to
force an operand to memory - and then goes on and uses memory_operand
for that operand anyway!  That accidentally worked before the fixup,
because after copying the failing operand to a new pseudo, the
expander was called without the optabs machinery doublechecking the
new pseudo against the predicate.  While I stand by the comment and
still think the optabs machinery could automatically fix up operands
as needed to force an operand into memory when the predicate says so,
it hasn't worked like that before, and I guess it's no use adding
something like that just for one port, where an expander will do.

Committed after building and regtesting for MMIX, where the build
failed in libgcc2.c.  FWIW, there's a whopping 252 regressions on the
4.6-branch and 256 on trunk (after this patch) according to Geoff's
test-script compared to gcc-4.5 era, with "just" 1..6 regressions for
the 4.3, 4.4 and 4.5 branches.  Ouch.


	PR target/49285
	* config/mmix/ ("truncdfsf2", "extendsfdf2"): Correct
	predicate to nonimmediate_operand from memory_operand for the
	operand that is to be forced to memory by the expander.  Lose
	the constraints.

Index: gcc/config/mmix/
--- gcc/config/mmix/	(revision 174376)
+++ gcc/config/mmix/	(working copy)
@@ -625,8 +625,8 @@ (define_insn "fixuns_truncdfdi2"
 ;; define_expand with the old pattern as "anonymous".
 (define_expand "truncdfsf2"
-  [(set (match_operand:SF 0 "memory_operand" "")
-	(float_truncate:SF (match_operand:DF 1 "register_operand" "")))]
+  [(set (match_operand:SF 0 "nonimmediate_operand")
+	(float_truncate:SF (match_operand:DF 1 "register_operand")))]
@@ -660,8 +660,8 @@ (define_insn "*truncdfsf2_real"

 ;; Same comment as for truncdfsf2.
 (define_expand "extendsfdf2"
-  [(set (match_operand:DF 0 "register_operand" "=r")
-	(float_extend:DF (match_operand:SF 1 "memory_operand" "m")))]
+  [(set (match_operand:DF 0 "register_operand")
+	(float_extend:DF (match_operand:SF 1 "nonimmediate_operand")))]

brgds, H-P

More information about the Gcc-patches mailing list