&& (operand_reg[m] == NULL_RTX
|| hard_regno[m] < 0))
{
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " %d Matched operand reload: "
+ "losers++\n", m);
losers++;
reload_nregs
+= (ira_reg_class_max_nregs[curr_alt[m]]
" Strict low subreg reload -- refuse\n");
goto fail;
}
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " %d Operand reload: losers++\n", nop);
losers++;
}
if (operand_reg[nop] != NULL_RTX
{
const_to_mem = 1;
if (! no_regs_p)
- losers++;
+ {
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " %d Constant reload through memory: "
+ "losers++\n", nop);
+ losers++;
+ }
}
/* Alternative loses if it requires a type of reload not
if (this_alternative != NO_REGS
&& REG_P (op) && (cl = get_reg_class (REGNO (op))) != NO_REGS
&& ((curr_static_id->operand[nop].type != OP_OUT
- && targetm.secondary_memory_needed (GET_MODE (op), cl,
+ && targetm.secondary_memory_needed (mode, cl,
this_alternative))
|| (curr_static_id->operand[nop].type != OP_IN
&& (targetm.secondary_memory_needed
- (GET_MODE (op), this_alternative, cl)))))
- losers++;
+ (mode, this_alternative, cl)))))
+ {
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " %d Secondary memory reload needed: "
+ "losers++\n", nop);
+ losers++;
+ }
if (MEM_P (op) && offmemok)
addr_losers++;
if (lra_dump_file != NULL)
fprintf
(lra_dump_file,
- " %d Conflict early clobber reload: reject--\n",
+ " %d Conflict early clobber reload: losers++\n",
i);
}
else
{
curr_alt_match_win[j] = false;
losers++;
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " %d Matching conflict early clobber "
+ "reloads: losers++\n",
+ j);
overall += LRA_LOSER_COST_FACTOR;
}
if (! curr_alt_match_win[i])
fprintf
(lra_dump_file,
" %d Matched conflict early clobber reloads: "
- "reject--\n",
+ "losers++\n",
i);
}
/* Early clobber was already reflected in REJECT. */
--- /dev/null
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O -fno-split-wide-types -mavx512f" } */
+
+typedef unsigned short U __attribute__((__vector_size__(64)));
+typedef int V __attribute__((__vector_size__(64)));
+typedef __int128 W __attribute__((__vector_size__(64)));
+
+W
+foo(U u, V v)
+{
+ W w;
+ /* __asm__ volatile ("" : "=v"(w)); prevents the -Wuninitialized warning */
+ u[0] >>= 1;
+ v %= (V)w;
+ return (W)u + (W)v;
+}