On Thu, 21 Nov 2013, Cong Hou wrote:
While I added the new define_insn_and_split for vec_merge, a bug is exposed: in config/i386/sse.md, [ define_expand "xop_vmfrcz<mode>2" ] only takes one input, but the corresponding builtin functions have two inputs, which are shown in i386.c:{ OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_2_SF }, { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_2_DF }, In consequence, the ix86_expand_multi_arg_builtin() function tries to check two args but based on the define_expand of xop_vmfrcz<mode>2, the content of insn_data[CODE_FOR_xop_vmfrczv4sf2].operand[2] may be incorrect (because it only needs one input). The patch below fixed this issue. Bootstrapped and tested on ax x86-64 machine. Note that this patch should be applied before the one I sent earlier (sorry for sending them in wrong order).
This is PR 56788. Your patch seems strange to me and I don't think it fixes the real issue, but I'll let more knowledgeable people answer. -- Marc Glisse
