re PR target/5309 (Infinite loop in cc1 on sparcv9-sun-solaris2.8 with -m64, short...
authorJakub Jelinek <jakub@redhat.com>
Wed, 16 Jan 2002 17:44:24 +0000 (18:44 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 16 Jan 2002 17:44:24 +0000 (18:44 +0100)
PR target/5309:
        * config/sparc/sparc.c (ultrasparc_adjust_cost): Handle TYPE_IDIV the
same way as TYPE_IMUL.
(ultrasparc_sched_reorder): Likewise.
* config/sparc/sparc.md (type): Add comment to update
ultrasparc_sched_reorder when making changes.

* gcc.dg/ultrasp4.c: New test.

From-SVN: r48917

gcc/ChangeLog
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ultrasp4.c [new file with mode: 0644]

index 28d4243f5cc69da785e17563539e88e72b24914f..17bc3862ae0406ac8da6764e7881ad6370337335 100644 (file)
@@ -1,3 +1,12 @@
+2002-01-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/5309:
+        * config/sparc/sparc.c (ultrasparc_adjust_cost): Handle TYPE_IDIV the
+       same way as TYPE_IMUL.
+       (ultrasparc_sched_reorder): Likewise.
+       * config/sparc/sparc.md (type): Add comment to update
+       ultrasparc_sched_reorder when making changes.
+
 2002-01-16  Kazu Hirata  <kazu@hxi.com>
 
        * doc/invoke.texi: Change the dump file name of block
index 3e3d1a8e1cced0e1b131eb116718714892559b9c..53f8c41bf3d70423618e255b2b1e52fb5a47d8d3 100644 (file)
@@ -7202,7 +7202,7 @@ ultrasparc_adjust_cost (insn, link, dep_insn, cost)
   /* Nothing issues in parallel with integer multiplies, so
      mark as zero cost since the scheduler can not do anything
      about it.  */
-  if (insn_type == TYPE_IMUL)
+  if (insn_type == TYPE_IMUL || insn_type == TYPE_IDIV)
     return 0;
 
 #define SLOW_FP(dep_type) \
@@ -7902,7 +7902,7 @@ ultrasparc_sched_reorder (dump, sched_verbose, ready, n_ready)
       {
        /* If the pipeline is (still) empty and we have any single
           group insns, get them out now as this is a good time.  */
-       rtx *ip = ultra_find_type ((TMASK (TYPE_RETURN) |
+       rtx *ip = ultra_find_type ((TMASK (TYPE_RETURN) | TMASK (TYPE_IDIV) |
                                    TMASK (TYPE_IMUL) | TMASK (TYPE_CMOVE) |
                                    TMASK (TYPE_MULTI) | TMASK (TYPE_MISC)),
                                   ready, this_insn);
index 0ae0f8342cfceead06cc679a08568c5bbfa5f9c8..451abf81e877162366b06a56f2c0803bf6b156a3 100644 (file)
@@ -82,6 +82,7 @@
 
 ;; Insn type.
 
+;; If you add any new type here, please update ultrasparc_sched_reorder too.
 (define_attr "type"
   "ialu,compare,shift,load,sload,store,uncond_branch,branch,call,sibcall,call_no_delay_slot,return,imul,idiv,fpload,fpstore,fp,fpmove,fpcmove,fpcmp,fpmul,fpdivs,fpdivd,fpsqrts,fpsqrtd,cmove,multi,misc"
   (const_string "ialu"))
index 28eeb14be3e5a69a663fb48020cafa29d62b3dd2..8aa2757fce38081a10a15dafe79cdb27ae141ba9 100644 (file)
@@ -1,3 +1,7 @@
+2002-01-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.dg/ultrasp4.c: New test.
+
 2002-01-16  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc.dg/20020116-2.c: New test.
diff --git a/gcc/testsuite/gcc.dg/ultrasp4.c b/gcc/testsuite/gcc.dg/ultrasp4.c
new file mode 100644 (file)
index 0000000..b421688
--- /dev/null
@@ -0,0 +1,13 @@
+/* Simplified from PR target/5309.  */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-options "-O2 -m64 -mcpu=ultrasparc" { target sparc64-*-* } } */
+/* { dg-options "-O2 -m64 -mcpu=ultrasparc" { target sparcv9-*-* } } */
+/* { dg-options "-O2" { target sparc-*-solaris2.[0-6] } } */
+/* { dg-options "-O2" { target sparc-*-solaris2.[0-6].* } } */
+
+long bar (unsigned int);
+long foo (long x, unsigned int y)
+{
+  return *(((long *) (bar (y) - 1)) + 1 + (x >> 2) % 359);
+}