This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, commited]: Fix reg-stack.c UNSPEC_TRUNC_NOOP handling
- 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
- Date: Sat, 25 Nov 2006 22:41:23 +0100
- Subject: [PATCH, commited]: Fix reg-stack.c UNSPEC_TRUNC_NOOP handling
- 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'll pre-approve that correction (as obvious?), if it bootstraps and
regression tests without problems. My apologies for missing this
during review.
Attached patch fixes these failures. Patch was regression tested on
x86_64-pc-linux-gnu for c, c++ and fortran.
2006-11-25 Uros Bizjak <ubizjak@gmail.com>
* reg-stack.c (get_true_reg): Fix UNSPEC_TRUNC_NOOP handling.
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)