diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28d4243f5cc..17bc3862ae0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2002-01-16 Jakub Jelinek + + 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 * doc/invoke.texi: Change the dump file name of block diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 3e3d1a8e1cc..53f8c41bf3d 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -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); diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index 0ae0f8342cf..451abf81e87 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -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")) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 28eeb14be3e..8aa2757fce3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-01-16 Jakub Jelinek + + * gcc.dg/ultrasp4.c: New test. + 2002-01-16 Jakub Jelinek * 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 index 00000000000..b421688f004 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ultrasp4.c @@ -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); +}