Hi!

On Mon, Dec 13, 2021 at 05:22:06PM -0500, David Edelsohn wrote:
> On Sun, Dec 12, 2021 at 10:00 PM HAO CHEN GUI <guih...@linux.ibm.com> wrote:
> > --- a/gcc/config/rs6000/vsx.md
> > +++ b/gcc/config/rs6000/vsx.md
> > @@ -6589,3 +6589,19 @@ (define_insn "xxeval"
> >     [(set_attr "type" "vecperm")
> >      (set_attr "prefixed" "yes")])
> >
> > +;; split TI to V1TI move

Please comment that this splitter tries to generate mtvsrdd insns, and
don't say the obvious things :-)

> > +(define_split
> > +  [(set (match_operand:V1TI 0 "vsx_register_operand")
> > +       (subreg:V1TI
> > +         (match_operand:TI 1 "int_reg_operand") 0 ))]
> > +  "TARGET_P9_VECTOR && !reload_completed"

Why the "!reload_completed"?  Is this generated after reload as well,
and that is bad for some reason?

> > +  [(const_int 0)]
> > +{
> > +  rtx tmp1 = simplify_gen_subreg (DImode, operands[1], TImode, 0);
> > +  rtx tmp2 = simplify_gen_subreg (DImode, operands[1], TImode, 8);
> > +  rtx tmp3 = gen_reg_rtx (V2DImode);
> > +  emit_insn (gen_vsx_concat_v2di (tmp3, tmp1, tmp2));
> > +  rtx tmp4 = simplify_gen_subreg (V1TImode, tmp3, V2DImode, 0);
> > +  emit_move_insn (operands[0], tmp4);
> > +  DONE;
> > +})

Ah, it is bad because it generates a pseudo.

So either you just make it work when everything is hard regs, or you do
this *and comment it*.

The first option is not very easy to do.  You need to make sure you can
do those subregs (and get GPRs!), and you need to use a hard reg instead
of the new pseudo (you can use operand 0 for this here though, it can
never be the same as operand 1 :-) (but only do this if this *is* after
reload)).

But, it sounds like you actually saw problems when allowing it after
reload, so it sounds like it would actually be useful to do it then?

> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/powerpc/pr103124.c
> > @@ -0,0 +1,11 @@
> > +/* { dg-do compile { target { powerpc*-*-* && lp64 } } */
> 
> Please don't include the "powerpc" target selector in the
> gcc.target/powerpc directory.  Just use lp64.

Or actually, don't use anything, and do a  dg-require int128  instead.


Segher

Reply via email to