On 2/12/19, H.J. Lu <hjl.to...@gmail.com> wrote: > On Tue, Feb 12, 2019 at 11:44 AM Uros Bizjak <ubiz...@gmail.com> wrote: >> >> On Tue, Feb 12, 2019 at 8:35 PM H.J. Lu <hjl.to...@gmail.com> wrote: >> > >> > On Tue, Feb 12, 2019 at 5:43 AM Uros Bizjak <ubiz...@gmail.com> wrote: >> > > >> > > On Mon, Feb 11, 2019 at 11:55 PM H.J. Lu <hjl.to...@gmail.com> wrote: >> > > > >> > > > PR target/89021 >> > > > * config/i386/i386.c (ix86_expand_vector_init_duplicate): >> > > > Set >> > > > mmx_ok to true if TARGET_MMX_WITH_SSE is true. >> > > > (ix86_expand_vector_init_one_nonzero): Likewise. >> > > > (ix86_expand_vector_init_one_var): Likewise. >> > > > (ix86_expand_vector_init_general): Likewise. >> > > > (ix86_expand_vector_init): Likewise. >> > > > (ix86_expand_vector_set): Likewise. >> > > > (ix86_expand_vector_extract): Likewise. >> > > > * config/i386/mmx.md (*vec_dupv2sf): Changed to >> > > > define_insn_and_split to support SSE emulation. >> > > > (vec_setv2sf): Also allow TARGET_MMX_WITH_SSE. >> > > > (vec_extractv2sf_1 splitter): Likewise. >> > > > (vec_extractv2sfsf): Likewise. >> > > > (vec_setv2si): Likewise. >> > > > (vec_extractv2si_1 splitter): Likewise. >> > > > (vec_extractv2sisi): Likewise. >> > > > (vec_setv4hi): Likewise. >> > > > (vec_extractv4hihi): Likewise. >> > > > (vec_setv8qi): Likewise. >> > > > (vec_extractv8qiqi): Likewise. >> > > > (*vec_extractv2sf_0): Don't allow TARGET_MMX_WITH_SSE. >> > > > (*vec_extractv2sf_1): Likewise. >> > > > (*vec_extractv2si_0): Likewise. >> > > > (*vec_extractv2si_1): Likewise. >> > > > (*vec_extractv2sf_0_sse): New. >> > > > (*vec_extractv2sf_1_sse): Likewise. >> > > > (*vec_extractv2si_0_sse): Likewise. >> > > > (*vec_extractv2si_1_sse): Likewise. >> > > >> > > Please do not introduce new *_sse patterns, use mmx_isa attribute to >> > > disable unwanted alternatives. >> > >> > Will do. >> > >> > > > (define_insn_and_split "*vec_extractv2si_zext_mem" >> > > > - [(set (match_operand:DI 0 "register_operand" "=y,x,r") >> > > > + [(set (match_operand:DI 0 "register_operand" "=x,r") >> > > > (zero_extend:DI >> > > > (vec_select:SI >> > > > - (match_operand:V2SI 1 "memory_operand" "o,o,o") >> > > > + (match_operand:V2SI 1 "memory_operand" "o,o") >> > > > (parallel [(match_operand:SI 2 >> > > > "const_0_to_1_operand")]))))] >> > > > - "TARGET_64BIT && TARGET_MMX" >> > > > + "TARGET_64BIT" >> > > >> > > Here you need TARGET_64BIT && (TARGET_MMX || TARGET_MMX_WITH_SSE) and >> > > mmx_isa attribute. >> > > >> > >> > Why is && (TARGET_MMX || TARGET_MMX_WITH_SSE) needed? The 3rd >> > alternative doesn't need MMX nor SSE2: >> >> Ah, I didn't notice that. LGTM then. >> >> > (define_insn_and_split "*vec_extractv2si_zext_mem" >> > [(set (match_operand:DI 0 "register_operand" "=y,x,r") >> > (zero_extend:DI >> > (vec_select:SI >> > (match_operand:V2SI 1 "memory_operand" "o,o,o") >> > (parallel [(match_operand:SI 2 >> > "const_0_to_1_operand")]))))] >> > "TARGET_64BIT" >> > "#" >> > "&& reload_completed" >> > [(set (match_dup 0) (zero_extend:DI (match_dup 1)))] >> > { >> > operands[1] = adjust_address (operands[1], SImode, INTVAL >> > (operands[2]) * 4); >> > } >> > [(set_attr "mmx_isa" "native,sse2,base")]) >> >> Please write this as "native,*,*". > > Did you mean "native,sse2,*"? The second alternative is SSE2 MOVD:
No, my proposed definition is OK, see below. > MOVD (when destination operand is XMM register) > DEST[31:0] ← SRC; > DEST[127:32] ← 000000000000000000000000H; > DEST[MAXVL-1:128] (Unmodified) You should also add "isa" attribute with "*,sse2,*", which should be there from the beginning. BTW: sse2 is not a member of mmx_isa. attribute. Uros. >> This way, it is clear that we enable alternative 0 only for native >> mmx. It looks to me that we need to add similar treatment to a couple >> of other patterns in sse.md, where we allow "y" constraint, e.g. >> *vec_concatv2sf_sse, *vec_concatv2si_sse4_1, etc. >> > > I will take a look. > > Thanks. > > -- > H.J. >