{
enum reg_class rclass, common_class;
machine_mode reg_mode;
+ rtx src;
int class_size, hard_regno, nregs, i, j;
int regno = REGNO (reg);
}
reg_mode = GET_MODE (reg);
rclass = get_reg_class (regno);
+ src = curr_insn_set != NULL ? SET_SRC (curr_insn_set) : NULL;
if (regno < new_regno_start
/* Do not allow the constraints for reload instructions to
influence the classes of new pseudos. These reloads are
reload pseudos for one alternative may lead to situations
where other reload pseudos are no longer allocatable. */
|| (INSN_UID (curr_insn) >= new_insn_uid_start
- && curr_insn_set != NULL
- && ((OBJECT_P (SET_SRC (curr_insn_set))
- && ! CONSTANT_P (SET_SRC (curr_insn_set)))
- || (GET_CODE (SET_SRC (curr_insn_set)) == SUBREG
- && OBJECT_P (SUBREG_REG (SET_SRC (curr_insn_set)))
- && ! CONSTANT_P (SUBREG_REG (SET_SRC (curr_insn_set)))))))
+ && src != NULL
+ && ((REG_P (src) || MEM_P (src))
+ || (GET_CODE (src) == SUBREG
+ && (REG_P (SUBREG_REG (src)) || MEM_P (SUBREG_REG (src)))))))
/* When we don't know what class will be used finally for reload
pseudos, we use ALL_REGS. */
return ((regno >= new_regno_start && rclass == ALL_REGS)
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
+extern char a[][12][18][17][17];
+extern short b[][12][18][17][17];
+extern int c[][2][8][7];
+short *d;
+void e(signed f, int g, char h, char i, char j) {
+ for (int k = 648; k; k += f)
+ for (short l; l < j; l += 9)
+ for (long m = f + 6LL; m < (h ? h : i); m += 2)
+ for (int n = 0; n < 16; n += 3LL) {
+ for (int o = g; o; o++)
+ a[k][l][m][n][o] = b[k][l][m][n][o] = d[k] ? 2 : 0;
+ c[k][l][m][0] = 0;
+ }
+}