This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: c/3917
- To: gcc-gnats at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, gbv at ctv dot es, gcc-bugs at gcc dot gnu dot org, wilson at gcc dot gnu dot org
- Subject: Re: c/3917
- From: Jim Wilson <wilson at redhat dot com>
- Date: Mon, 17 Sep 2001 22:28:53 -0700
- Organization: Red Hat
I included the patch as a file attachment, and it didn't get included in
the mail
message. Maybe that wasn't smart, so I am including it again here.
Index: ia64.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64.c,v
retrieving revision 1.120
diff -p -r1.120 ia64.c
*** ia64.c 2001/08/23 19:27:54 1.120
--- ia64.c 2001/09/14 02:08:41
*************** itanium_split_issue (p, begin)
*** 5153,5161 ****
enum attr_type t = (t0 == TYPE_L ? TYPE_F
: t0 == TYPE_X ? TYPE_I
: t0);
! int max = (t == TYPE_B ? 3 : t == TYPE_F ? 1 : 2);
if (type_count[t] == max)
return i;
type_count[t]++;
}
return split;
--- 5153,5165 ----
enum attr_type t = (t0 == TYPE_L ? TYPE_F
: t0 == TYPE_X ? TYPE_I
: t0);
!
! /* Itanium can execute up to 3 branches, 2 floating point, 2
memory, and! 2 integer per cycle. */
! int max = (t == TYPE_B ? 3 : 2);
if (type_count[t] == max)
return i;
+
type_count[t]++;
}
return split;
*************** insn_matches_slot (p, itype, slot, insn)
*** 5347,5353 ****
{
int i;
for (i = sched_data.first_slot; i < slot; i++)
! if (p->t[i] == stype)
return 0;
}
if (GET_CODE (insn) == CALL_INSN)
--- 5351,5359 ----
{
int i;
for (i = sched_data.first_slot; i < slot; i++)
! if (p->t[i] == stype
! || (stype == TYPE_F && p->t[i] == TYPE_L)
! || (stype == TYPE_I && p->t[i] == TYPE_X))
return 0;
}
if (GET_CODE (insn) == CALL_INSN)
*************** cycle_end_fill_slots (dump)
*** 5487,5492 ****
--- 5493,5504 ----
sched_data.types[slot] = packet->t[slot];
sched_data.insns[slot] = 0;
sched_data.stopbit[slot] = 0;
+
+ /* ??? TYPE_L instructions always fill up two slots, but we don't
+ support TYPE_L nops. */
+ if (packet->t[slot] == TYPE_L)
+ abort ();
+
slot++;
}
/* Do _not_ use T here. If T == TYPE_A, then we'd risk changing
the
*************** cycle_end_fill_slots (dump)
*** 5495,5500 ****
--- 5507,5515 ----
sched_data.insns[slot] = tmp_insns[i];
sched_data.stopbit[slot] = 0;
slot++;
+ /* TYPE_L instructions always fill up two slots. */
+ if (t == TYPE_L)
+ slot++;
}
/* This isn't right - there's no need to pad out until the forced
split;
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3917&database=gcc