[RFC] enable flags-unchanging asms, add_overflow/expand/combine woes

Segher Boessenkool segher@kernel.crashing.org
Fri Sep 4 14:51:52 GMT 2020


Hi!

On Thu, Sep 03, 2020 at 04:31:35PM -0300, Alexandre Oliva wrote:
> Except when it doesn't ;-)

Heh.  PRs welcome :-)

> Under:
> 
>   /* If the actions of the earlier insns must be kept
>      in addition to substituting them into the latest one,
>      we must make a new PARALLEL for the latest insn
>      to hold additional the SETs.  */
> 
> it turns the RMW add pattern into a PARALLEL and adds to it i0's
> flags-setter, that had been split out of i2.  The PARALLEL 
> has the flag-setter as the second in the parallel, as you can see below,
> and nothing (other than my patch) attempts to change that order.

Please open a PR?  (But see below first.)

> > What does that RTL look like exactly?
> 
> Trying 5, 7 -> 15:
>     5: r91:SI=zero_extend([`i'])
>     7: {flags:CCC=cmp(r91:SI#0+0x1,r91:SI#0);r92:QI=r91:SI#0+0x1;}
>       REG_DEAD r91:SI
>    15: [`i']=r92:QI
>       REG_DEAD r92:QI
> Successfully matched this instruction:
> (parallel [
>         (set (mem/c:QI (symbol_ref:DI ("i") [flags 0x2]  <var_decl 0x7ffff7ff7b4
> 0 i>) [0 i+0 S1 A8])
>             (plus:QI (mem/c:QI (symbol_ref:DI ("i") [flags 0x2]  <var_decl 0x7ff
> ff7ff7b40 i>) [0 i+0 S1 A8])
>                 (const_int 1 [0x1])))
>         (set (reg:CCC 17 flags)
>             (compare:CCC (plus:QI (mem/c:QI (symbol_ref:DI ("i") [flags 0x2]  <var_decl 0x7ffff7ff7b40 i>) [0 i+0 S1 A8])
>                     (const_int 1 [0x1]))
>                 (mem/c:QI (symbol_ref:DI ("i") [flags 0x2]  <var_decl 0x7ffff7ff7b40 i>) [0 i+0 S1 A8])))
>     ])

This isn't the case with the canonical form (the compare is not a
compare against 0).


Btw, we could perhaps try permuting arms in combine itself (not in
recog)?  In combine we know that there are at most 4 sets (and usually
at most 3), and we also often have a good idea what swaps are likely
to work and which not, so maybe trying just one extra thing will have
good results already.


Segher


More information about the Gcc-patches mailing list