H. J. Lu wrote:
__builtin_ia32_vec_set_v2di will be expanded to
  [(set (match_operand:V2DI 0 "register_operand" "=x")
        (vec_merge:V2DI
          (vec_duplicate:V2DI
            (match_operand:DI 2 "nonimmediate_operand" "rm"))
          (match_operand:V2DI 1 "register_operand" "0")
          (match_operand:SI 3 "const_pow2_1_to_2_operand" "n")))]

Named rtl expanders aren't allowed to clobber their inputs. You will need to generate a pseudo-reg temp in the expander, copy the first input to the temp, and then use the temp as the output/input argument.

There are probably lots of existing examples in the i386 *.md files to look at. See for instance the reduc_splus_v4sf pattern in the sse.md file.
--
Jim Wilson, GNU Tools Support, http://www.specifix.com

Reply via email to