This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, i386]: Rewrite x87 sqrt patterns, take 2a (macroized)
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: Roger Sayle <roger at eyesopen dot com>
- Cc: Eric Botcazou <ebotcazou at libertysurf dot fr>, gcc-patches at gcc dot gnu dot org, Michael Matz <matz at suse dot de>, Andrew Haley <aph at redhat dot com>
- Date: Sat, 25 Nov 2006 22:06:21 +0100
- Subject: Re: [PATCH, i386]: Rewrite x87 sqrt patterns, take 2a (macroized)
- References: <Pine.LNX.4.44.0611251124040.24281-100000@www.eyesopen.com>
Roger Sayle wrote:
internal compiler error: RTL check: expected elt 0 type 'e' or 'u',
have 'E' (rtx unspec) in get_true_reg, at reg-stack.c:452
Grr, it looks like Uros meant to write:
+ case UNSPEC:
+ if (XINT (*pat, 1) == UNSPEC_TRUNC_NOOP)
+ pat = & XVECEXP (*pat, 0, 0);
+ break;
Or else we fall through to the FLOAT_TRUNCATE case for UNSPECs other
than UNSPEC_TRUNC_NOOP.
I'm digging through my brown paper bag collection to find appropriate
bag, but I _did_ make a full bootstrap & regression test, and there was
no RTL check message!
I'll pre-approve that correction (as obvious?), if it bootstraps and
regression tests without problems. My apologies for missing this
during review.
Please accept my apologies...
Attached to this message is an emergency patch that passed bootstrap and
my collection of quick tests on x86_64-pc-linux-gnu (-m32) and is in
regression test right now...
Uros.
Index: reg-stack.c
===================================================================
--- reg-stack.c (revision 119198)
+++ reg-stack.c (working copy)
@@ -441,10 +441,8 @@
case UNSPEC:
if (XINT (*pat, 1) == UNSPEC_TRUNC_NOOP)
- {
- pat = & XVECEXP (*pat, 0, 0);
- break;
- }
+ pat = & XVECEXP (*pat, 0, 0);
+ return pat;
case FLOAT_TRUNCATE:
if (!flag_unsafe_math_optimizations)