RFA: Fix combine.c combining a move and a non-move into two non-moves, PR93372

Segher Boessenkool segher@kernel.crashing.org
Fri Jul 17 00:05:19 GMT 2020


On Tue, Jul 14, 2020 at 04:33:42PM -0500, Segher Boessenkool wrote:
> > If combine only did lower-cost combinations (perhaps with
> > Richard Sandifords lower-size-when-tied suggestion), I guess
> > this wouldn't happen. 0:-)
> 
> And we would regress (a LOT).

Like this.  C0 is an unmodified compiler.  C1 is with the single_set
modification to is_just_move I committed a minute ago (84c5396d4bdb).
C2 is with this patch:

-- 8< --
diff --git a/gcc/combine.c b/gcc/combine.c
index 3a81bb6..619ba77 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -939,7 +939,7 @@ combine_validate_cost (rtx_insn *i0, rtx_insn *i1, rtx_insn 
 
   /* Disallow this combination if both new_cost and old_cost are greater than
      zero, and new_cost is greater than old cost.  */
-  int reject = old_cost > 0 && new_cost > old_cost;
+  int reject = old_cost > 0 && new_cost >= old_cost;
 
   if (dump_file)
     {
-- 8< --

[segher@gcc135 buildall]$ perl sizes.pl --percent C[012]
                    C0        C1        C2
       alpha   6045560  100.000%  100.518%
         arc   3529016  100.000%   99.933%
         arm  14173370  100.000%  101.607%
       arm64  12958466  100.000%  100.477%
         c6x   2341205  100.000%  100.154%
        csky   3320386  100.000%  100.838%
       h8300   1163584  100.000%  100.331%
        i386         0         0         0
        ia64  18079744  100.000%  100.857%
        m68k   3711195  100.000%  100.327%
  microblaze   4930937  100.000%  100.054%
        mips   8403293  100.000%  100.049%
      mips64   6975860  100.000%   99.986%
       nds32   4450951  100.000%   99.992%
       nios2   3641733  100.000%  100.206%
    openrisc   4182260  100.000%  100.025%
      parisc   7706299  100.000%  101.500%
    parisc64   8677365  100.000%  101.491%
     powerpc  10016575  100.000%  100.001%
   powerpc64  17331518  100.000%   99.974%
 powerpc64le  17331518  100.000%   99.974%
     riscv32         0         0         0
     riscv64         0         0         0
        s390  13091897  100.000%  100.396%
          sh   3213207  100.000%  100.031%
     shnommu   1610444  100.000%  100.031%
       sparc   4356641  100.000%  101.521%
     sparc64   6745123  100.000%  101.450%
      x86_64  19663507  100.000%  100.007%
      xtensa   2105610  100.000%  100.425%


Segher


More information about the Gcc-patches mailing list