On Tue, 20 Aug 2019, Uros Bizjak wrote:

> >> Uros noted that STV with !TImode isn't supposed to run before combine.
> >> The following adjusts things accordingly and now the pass runs twice
> >> for TARGET_64BIT.  I've also adjusted another gpr->xmm move to
> >> use (vec_merge (vec_duplicate..)) style rather than using a subreg.
> >> This isn't strictly neccesary to fix the bug though and my previous
> >> needs to do this might have been caused by the pass running too early.
> >>
> >> So - with or without this consistency part?
> 
> The true STV pass (SI/DImode) is intended to run after combine, so
> memory operands are merged to the instruction together with other
> scalar simplications combine can perform.
> 
> As noted by HJ, there is intended pessimization of moves betwen
> register sets that was introduced before IRA and
> preffered_for_{speed,size} attribute.
> 
> >> Bootstrap / regtest running on x86_64-unknown-linux-gnu, OK?
> 
> IMO, the patch is OK, the regression should be solved by retuning
> iter-regset move cost. We should not trick the compiler by hiding the
> move using tricks where we make the move RTX more complex, this is
> fragile and will regress as soon as the compiler learns corresponding
> simplification. One example is the referred failing minmax-6.c case.

OK, I have applied the patch now and the minmax-6.c testcase now FAILs
(while the added minmax-7.c one passes).

Let's work from this state, testers will pick up any other fallout.

Richard.

> Uros.
> 
> > It regresses
> >
> > FAIL: gcc.target/i386/minmax-6.c scan-assembler-not rsp
> >
> > Have to investigate that again then (it caused the change to
> > use (vec_merge (vec_duplicate..)) for conversion in the first place)
> >
> > Richard.
> >
> >> Thanks,
> >> Richard.
> >>
> >> 2019-08-19  Richard Biener  <rguent...@suse.de>
> >>
> >> PR target/91154
> >> * config/i386/i386-features.c (general_scalar_chain::convert_op):
> >> Use (vec_merge (vec_duplicate..)) style vector from scalar move.
> >> (convert_scalars_to_vector): Add timode_p parameter and use it
> >> to guard TImode-only operation.
> >> (pass_stv::gate): Adjust so STV runs twice for TARGET_64BIT.
> >> (pass_stv::execute): Pass down timode_p.
> >>
> >> * gcc.target/i386/minmax-7.c: New testcase.
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany;
GF: Felix Imendörffer, Mary Higgins, Sri Rasiah; HRB 21284 (AG Nürnberg)

Reply via email to