https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81034

--- Comment #2 from Sebastian Peryt <sebastian.peryt at intel dot com> ---
I agree, that vec_merge takes 3 operands. And 3 are in my md (naming according
to GCC internals):

vec1:
(vec_merge:V2DF
    (match_operand:V2DF 1 "nonimmediate_operand" "m")
    (match_operand:V2DF 2 "vector_move_operand" "0C")
    (match_operand:QI 3 "register_operand" "Yk"))

vec2:
(const_vector:V2DF [(const_int 0) (const_int 0)])

items:
(const_int 1)

I am not sure if const_vec should have been here match operand actually. Maybe
not with vec_merge, but still similar use can be seen already in sse.md e.g. -
<floatsuffix>floatv2div2sf2_mask.

Also, if md would be wrong I'd expect some other issue show up also, and both
intrinsic not work. 

My best guess is that the problem might be due to the fact that with mask 0 or
2 all of the elements in the vector are actually 0 and this might be getting
optimized.

Reply via email to