+2001-09-20 Jim Wilson <wilson@redhat.com>
+
+ * config/ia64/ia64.c (itanium_split_issue): Allow max 2 FP per cycle.
+ (insn_matches_slot): Handle TYPE_L and TYPE_X slots when checking
+ for issue port conflicts.
+ (cycle_end_fill_slots): TYPE_L instructions take two slots.
+
2001-09-20 Andrew MacLeod <amacleod@redhat.com>
* testsuite/gcc.c-torture/execute/990208-1.x: New. XFAIL at -O3
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);
+
+ /* 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;
{
int i;
for (i = sched_data.first_slot; i < slot; i++)
- if (p->t[i] == stype)
+ 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)
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
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;