+Tue Aug 18 07:15:27 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * config/sparc/sparc.c (ultra_find_type): Add empty semicolon
+ statement after end of loop label.
+
+Tue Aug 18 07:13:27 1998 David S. Miller <davem@pierdol.cobaltmicro.com>
+
+ * config/sparc/sparc.c (ultra_types_avail): New variable.
+ (ultra_build_types_avail): New function to record mask of insn
+ types in ready list at this cycle.
+ (ultrasparc_sched_reorder): Call it.
+ (ultra_find_type): Use it to quicken the search. Also simplif
+ dependency check, don't use rtx_equal_p because we know exactly
+ what we are looking for.
+
Tue Aug 18 03:20:53 1998 Richard Earnshaw (rearnsha@arm.com)
* arm.h (SECONDARY_INPUT_RELOAD_CLASS): Return NO_REGS if compiling
NOTE: This scheme depends upon the fact that we
have less than 32 distinct type attributes. */
+
+static int ultra_types_avail;
+
static rtx *
ultra_find_type (type_mask, list, start)
int type_mask;
{
int i;
+ /* Short circuit if no such insn exists in the ready
+ at the moment. */
+ if ((type_mask & ultra_types_avail) == 0)
+ return 0;
+
for (i = start; i >= 0; i--)
{
rtx insn = list[i];
|| (check_depend == 1
&& GET_CODE (slot_insn) == INSN
&& GET_CODE (slot_pat) == SET
- && rtx_equal_p (SET_DEST (slot_pat),
- SET_SRC (pat)))
+ && ((GET_CODE (SET_DEST (slot_pat)) == REG
+ && GET_CODE (SET_SRC (pat)) == REG
+ && REGNO (SET_DEST (slot_pat)) ==
+ REGNO (SET_SRC (pat)))
+ || (GET_CODE (SET_DEST (slot_pat)) == SUBREG
+ && GET_CODE (SET_SRC (pat)) == SUBREG
+ && REGNO (SUBREG_REG (SET_DEST (slot_pat))) ==
+ REGNO (SUBREG_REG (SET_SRC (pat)))
+ && SUBREG_WORD (SET_DEST (slot_pat)) ==
+ SUBREG_WORD (SET_SRC (pat))))
|| (check_fpmode_conflict == 1
&& GET_CODE (slot_insn) == INSN
&& GET_CODE (slot_pat) == SET
&& ((GET_MODE (SET_DEST (slot_pat)) == SFmode
|| GET_MODE (SET_DEST (slot_pat)) == DFmode)
- && GET_MODE (SET_DEST (slot_pat)) != fpmode))))
+ && GET_MODE (SET_DEST (slot_pat)) != fpmode)))))
goto next;
}
return &list[i];
}
next:
+ ;
}
return 0;
}
+static void
+ultra_build_types_avail (ready, n_ready)
+ rtx *ready;
+ int n_ready;
+{
+ int i = n_ready - 1;
+
+ ultra_types_avail = 0;
+ while(i >= 0)
+ {
+ rtx insn = ready[i];
+
+ if (recog_memoized (insn) >= 0)
+ ultra_types_avail |= TMASK (get_attr_type (insn));
+
+ i -= 1;
+ }
+}
+
/* Place insn pointed to my IP into the pipeline.
Make element THIS of READY be that insn if it
is not already. TYPE indicates the pipeline class
&& recog_memoized (ready[this_insn]) < 0)
this_insn--;
+ ultra_build_types_avail (ready, this_insn + 1);
+
while (this_insn >= 0) {
int old_group_size = up->group_size;