https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116738
--- Comment #16 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Jakub Jelinek from comment #12) > I think the problem is the mixing of four different substitutions in a > single pattern, > in particular round_saeonly and round_saeonly_scalar and mask and > mask_scalar. > <round_saeonly_scalar_name> is from the second, > <round_saeonly_mode_condition> and > <round_saeonly_mask_arg3> from the first and <mask_operand_arg34> and > <mask_mode512bit_condition> from the third and <mask_scalar_name> from the > fourth. > I think it only should use 2 substs, likely mask_scalar and > round_saeonly_scalar, like the previous pattern. And if something needs to > be added to those two subst attributes (likely to ensure the right extra > arguments are passed to the gen* routine), it should be added. Yeah, after confirming that UNSPEC works for the testcase, I copypasted from similar pattern, and after some tires I lost my will to hunt down the remaining causes of duplicate definitions.