https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94440
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I need -mfpmath=sse,387 -fexcess-precision=standard -Ofast -msse2 --param=scev-max-expr-size=0 -m32 (-Werror not needed, but -msse2 required) to reproduce. The function suggests that the "enabled" attribute on the pattern in question (*fop_df_comm) violates the documented rules: "All these attributes should use @code{(const_int 1)} to allow an alternative or @code{(const_int 0)} to disallow it. The attributes must be a static property of the subtarget; they cannot for example depend on the current operands, on the current optimization level, on the location of the insn within the body of a loop, on whether register allocation has finished, or on the current compiler pass." Seems like the target is the same for both functions - in particular this_target_recog is the same between f1 and main - default_target_recog in both cases (the two functions don't have different target attribute). So, either we need to consider also -ffast-math options to be part of target and force different this_target_recog if it changes between functions, or the i386 backend can't use enabled attribute for the fast-math dependent checks.