http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55829
--- Comment #6 from Uros Bizjak <ubizjak at gmail dot com> 2013-01-09 16:33:02 UTC --- (In reply to comment #3) > BTW, there is a slight inconsistency between the two patterns, the first > pattern uses sselog1 type for both the unpckldp %0, %0 and %vmovddup %1, %0 > and > V2DFmode mode attribute, while the second pattern uses sselog type for both of > those and DFmode mode attribute for the movddup case. Actually, the sselog/sselog1 difference is OK, it makes difference only in the calculation of "memory" attribute. By default, sselog looks at operand[2], which is missing when the pattern has only two operands. So, sselog1 (and all _1 types) looks at operand[1]. Regarding mode: length calculation depends on it, so for V2DF non-avx sse insns prefix_data16 is added, and for DF non-avx sse insn prefix_rep is added. While for sselog insns, V2DF vs. DF makes no difference in length, movddup uses prefix_rex, so the correct mode for movddup is DF. I will submit a trivial patch to change this inconsistency.