re PR target/67506 ([SH]: error: unrecognizable insn when compiling texlive-binaries)
authorOleg Endo <olegendo@gcc.gnu.org>
Thu, 10 Sep 2015 14:53:48 +0000 (14:53 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Thu, 10 Sep 2015 14:53:48 +0000 (14:53 +0000)
gcc/
PR target/67506
* config/sh/sh.c (sh_extending_set_of_reg::use_as_extended_reg): Add
missing simplify_gen_subreg.

gcc/testsuite/
PR target/67506
* gcc.c-torture/compile/pr67506.c: New test.

From-SVN: r227646

gcc/ChangeLog
gcc/config/sh/sh.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr67506.c [new file with mode: 0644]

index 14e8f5eeee0db697c397746646ab205b970a85a3..67367eb8939cc1a01369b98c0e4aac0a6df0a17b 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-10  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/67506
+       * config/sh/sh.c (sh_extending_set_of_reg::use_as_extended_reg): Add
+       missing simplify_gen_subreg.
+
 2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * config/s390/s390.c (s390_contiguous_bitmask_vector_p): Reject if
index 1442b7fc7907c678256f014f9ef777c0d8952a4e..25149a60ff73e1bd0ff39ffc8216db2293d4b62f 100644 (file)
@@ -14016,6 +14016,9 @@ sh_extending_set_of_reg::use_as_extended_reg (rtx_insn* use_at_insn) const
   else
     {
       rtx extension_dst = XEXP (set_rtx, 0);
+      if (GET_MODE (extension_dst) != SImode)
+       extension_dst = simplify_gen_subreg (SImode, extension_dst,
+                                            GET_MODE (extension_dst), 0);
       if (modified_between_p (extension_dst, insn, use_at_insn))
        {
          if (dump_file)
index aee33f62db009724236e4c8d4a04263144d1cd09..844e2a105ee6ee439b79d4e6d5b68e73304c7ea3 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-10  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       PR target/67506
+       * gcc.c-torture/compile/pr67506.c: New test.
+
 2015-09-10  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        * gcc.target/s390/vector/vec-genbytemask-1.c: Add check for V1TI
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr67506.c b/gcc/testsuite/gcc.c-torture/compile/pr67506.c
new file mode 100644 (file)
index 0000000..2826d0b
--- /dev/null
@@ -0,0 +1,53 @@
+extern struct _IO_FILE *stderr;
+typedef long integer;
+typedef unsigned char byte;
+short nl;
+byte * tfmfilearray;
+integer charbase, ligkernbase;
+unsigned char charsonline;
+short c;
+unsigned short r;
+struct {
+  short cc;
+  integer rr;
+} labeltable[259];
+short sortptr;
+unsigned char activity[(32510) + 1];
+integer ai, acti;
+extern void _IO_putc (char, struct _IO_FILE *);
+
+void
+mainbody (void)
+{
+  register integer for_end;
+  if (c <= for_end)
+    do {
+      if (((tfmfilearray + 1001)[4 * (charbase + c) + 2] % 4) == 1)
+       {
+         if ( r < nl )
+           ;
+         else
+           {
+             while (labeltable[sortptr ].rr > r)
+               labeltable[sortptr + 1 ]= labeltable[sortptr];
+           }
+       }
+    } while (c++ < for_end);
+
+  if (ai <= for_end)
+    do {
+      if (activity[ai]== 2)
+       {
+         r = (tfmfilearray + 1001)[4 * (ligkernbase + (ai))];
+         if (r < 128)
+           {
+             r = r + ai + 1 ;
+             if (r >= nl)
+               {
+                 if (charsonline > 0)
+                   _IO_putc ('\n', stderr);
+               }
+           }
+       }
+    } while (ai++ < for_end);
+}