On Fri, Nov 8, 2013 at 10:13 PM, Steven Bosscher wrote:
> On Thu, Nov 7, 2013 at 10:42 AM, Yvan Roux wrote:
> This store_minmaxsi insn is not recognized because
> optimize_function_for_size_p() is false. The problem is in the place
> where this insn was created. Trying to figure that out now...
LRA fails to set up cfun->maybe_hot_insn_p via rtl_profile_for_bb.
Doing that fixes the problem (diff -upbw to keep the patch small):
Index: lra.c
===================================================================
--- lra.c (revision 204565)
+++ lra.c (working copy)
@@ -2022,6 +2022,11 @@ check_rtl (bool final_p)
lra_assert (! final_p || reload_completed);
FOR_EACH_BB (bb)
+ {
+ /* Whether an insn is recognized or not may depend on the hotness of
+ the insn: Some back ends use it as a layman's "enable" attribute. */
+ rtl_profile_for_bb (bb);
+
FOR_BB_INSNS (bb, insn)
if (NONDEBUG_INSN_P (insn)
&& GET_CODE (PATTERN (insn)) != USE
@@ -2043,6 +2048,7 @@ check_rtl (bool final_p)
fatal_insn_not_found (insn);
}
}
+}
#endif /* #ifdef ENABLE_CHECKING */
/* Determine if the current function has an exception receiver block