As we discussed in the V6 patches #1 and #2, before submitting the patches
adding eI support for movdi and movsi, you prefered that I reformat the patches
to make them easier in the future to identify the changes.

This patch changes just the movdi_internal64 insn.  All of the constraints are
in the same order as the current sources.  I did add setting "num_insns" to
this patch, but I left in setting "length".  I found otherwise the Spec
benchmarks did not generate the same code with the patch.

I have bootstrapped the compiler with this change and the movdi_internal64
patch that will be submitted next, and there were no problems with the
bootstrap or tests that regressed.  I compared Spec 2017 INT benchmarks and the
number of each instruction matches the previous version I tested.  Can I check
this into the GCC trunk?

2019-11-26  Michael Meissner  <meiss...@linux.ibm.com>

        * config/rs6000/rs6000.md (movdi_internal64): Logically align the
        columns of constraints and attributes to make it easier to add new
        patterns in the middle.  Set the num_insns insn attribute.

Index: gcc/config/rs6000/rs6000.md
===================================================================
--- gcc/config/rs6000/rs6000.md (revision 278747)
+++ gcc/config/rs6000/rs6000.md (working copy)
@@ -8838,24 +8838,35 @@ (define_split
   DONE;
 })
 
-;;              GPR store  GPR load   GPR move   GPR li     GPR lis     GPR #
-;;              FPR store  FPR load   FPR move   AVX store  AVX store   AVX 
load
-;;              AVX load   VSX move   P9 0       P9 -1      AVX 0/-1    VSX 0
-;;              VSX -1     P9 const   AVX const  From SPR   To SPR      
SPR<->SPR
+;;              GPR store  GPR load   GPR move
+;;              GPR li     GPR lis    GPR #
+;;              FPR store  FPR load   FPR move
+;;              AVX store  AVX store  AVX load   AVX load   VSX move
+;;              P9 0       P9 -1      AVX 0/-1   VSX 0      VSX -1
+;;              P9 const   AVX const
+;;              From SPR   To SPR     SPR<->SPR
 ;;              VSX->GPR   GPR->VSX
+
 (define_insn "*movdi_internal64"
   [(set (match_operand:DI 0 "nonimmediate_operand"
-               "=YZ,       r,         r,         r,         r,          r,
-                m,         ^d,        ^d,        wY,        Z,          $v,
-                $v,        ^wa,       wa,        wa,        v,          wa,
-                wa,        v,         v,         r,         *h,         *h,
+               "=YZ,       r,         r,
+                r,         r,         r,
+                m,         ^d,        ^d,
+                wY,        Z,         $v,        $v,        ^wa,
+                wa,        wa,        v,         wa,        wa,
+                v,         v,
+                r,         *h,        *h,
                 ?r,        ?wa")
+
        (match_operand:DI 1 "input_operand"
-               "r,         YZ,        r,         I,         L,          nF,
-                ^d,        m,         ^d,        ^v,        $v,         wY,
-                Z,         ^wa,       Oj,        wM,        OjwM,       Oj,
-                wM,        wS,        wB,        *h,        r,          0,
+               "r,         YZ,        r,
+                I,         L,         nF,
+                ^d,        m,         ^d,        ^v,        $v,
+                wY,        Z,         ^wa,       Oj,        wM,
+                OjwM,      Oj,        wM,        wS,        wB,
+                *h,        r,         0,
                 wa,        r"))]
+
   "TARGET_POWERPC64
    && (gpc_reg_operand (operands[0], DImode)
        || gpc_reg_operand (operands[1], DImode))"
@@ -8887,23 +8898,41 @@ (define_insn "*movdi_internal64"
    mfvsrd %0,%x1
    mtvsrd %x0,%1"
   [(set_attr "type"
-               "store,      load,      *,         *,         *,         *,
-                fpstore,    fpload,     fpsimple,  fpstore,   fpstore,   
fpload,
-                fpload,     veclogical, vecsimple, vecsimple, vecsimple, 
veclogical,
-                veclogical, vecsimple,  vecsimple, mfjmpr,    mtjmpr,    *,
-                mftgpr,    mffgpr")
+               "store,      load,      *,
+                *,          *,          *,
+                fpstore,    fpload,    fpsimple,
+                fpstore,    fpstore,   fpload,     fpload,     veclogical,
+                vecsimple,  vecsimple, vecsimple,  veclogical, veclogical,
+                vecsimple,  vecsimple,
+                mfjmpr,     mtjmpr,    *,
+                mftgpr,     mffgpr")
    (set_attr "size" "64")
    (set_attr "length"
-               "*,         *,         *,         *,         *,          20,
-                *,         *,         *,         *,         *,          *,
-                *,         *,         *,         *,         *,          *,
-                *,         8,         *,         *,         *,          *,
-                *,         *")
+                "*,         *,         *,
+                *,          *,         20,
+                *,          *,         *,
+                *,          *,         *,          *,          *,
+                *,          *,         *,          *,          *,
+                8,          *,
+                *,          *,          *,
+                *,          *")
+   (set_attr "num_insns"
+                "*,         *,         *,
+                *,          *,         5,
+                *,          *,         *,
+                *,          *,         *,           *,          *,
+                *,          *,         *,           *,          *,
+                2,          *,
+                *,          *,         *,
+                *,          *")
    (set_attr "isa"
-               "*,         *,         *,         *,         *,          *,
-                *,         *,         *,         p9v,       p7v,        p9v,
-                p7v,       *,         p9v,       p9v,       p7v,        *,
-                *,         p7v,       p7v,       *,         *,          *,
+               "*,         *,         *,
+                *,         *,         *,
+                *,         *,         *,
+                p9v,       p7v,       p9v,         p7v,        *,
+                p9v,       p9v,       p7v,         *,          *,
+                p7v,       p7v,
+                *,         *,         *,
                 p8v,       p8v")])
 
 ; Some DImode loads are best done as a load of -1 followed by a mask


-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meiss...@linux.ibm.com, phone: +1 (978) 899-4797

Reply via email to