This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, commited]: Fix reg-stack.c UNSPEC_TRUNC_NOOP handling


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)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]