This is the mail archive of the gcc-bugs@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]

[Bug middle-end/46292] FAIL: gcc.c-torture/execute/vector-shift2.c compilation, -O3 -g


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46292

Uros Bizjak <ubizjak at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2010.11.03 19:11:31
         AssignedTo|unassigned at gcc dot       |ubizjak at gmail dot com
                   |gnu.org                     |
   Target Milestone|---                         |4.6.0
     Ever Confirmed|0                           |1

--- Comment #4 from Uros Bizjak <ubizjak at gmail dot com> 2010-11-03 19:11:31 UTC ---
(In reply to comment #1)

> >     at ../../gcc/gcc/lower-subreg.c:416
> > 416          gcc_assert (VECTOR_MODE_P (innermode));
> > (gdb) p innermode
> > $1 = TImode
> 
> What happens if you just remove the assert?

Ok, it will break further in the compilation.

But following patch will work (tested with the hppa cross):

--cut here--
Index: lower-subreg.c
===================================================================
--- lower-subreg.c    (revision 166266)
+++ lower-subreg.c    (working copy)
@@ -411,10 +411,13 @@ simplify_subreg_concatn (enum machine_mo
   part = XVECEXP (op, 0, byte / inner_size);
   partmode = GET_MODE (part);

+  if (partmode == VOIDmode && VECTOR_MODE_P (innermode))
+    partmode = GET_MODE_INNER (innermode);
+
   if (partmode == VOIDmode)
     {
-      gcc_assert (VECTOR_MODE_P (innermode));
-      partmode = GET_MODE_INNER (innermode);
+      enum mode_class mclass  = GET_MODE_CLASS (innermode);
+      partmode = mode_for_size (inner_size * BITS_PER_UNIT, mclass, 0);
     }

   final_offset = byte % inner_size;
--cut here--

Dave, can you please regression test this patch?


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