On Thu, Mar 28, 2019 at 12:10:06AM +1030, Alan Modra wrote:
> Also, using a register move cost of 2 for for power9 direct moves
> gives these fails, even with the .md file tweaks:
> +FAIL: gcc.target/powerpc/vec-set-char.c scan-assembler-not mtvsrwz
> +FAIL: gcc.target/powerpc/vec-set-char.c scan-assembler vspltisb
> +FAIL: gcc.target/powerpc/vec-set-char.c scan-assembler xxspltib
> +FAIL: gcc.target/powerpc/vec-set-int.c scan-assembler-not mtvsrwz
> +FAIL: gcc.target/powerpc/vec-set-int.c scan-assembler vspltisw
> +FAIL: gcc.target/powerpc/vec-set-short.c scan-assembler-not mtvsrwz
> +FAIL: gcc.target/powerpc/vec-set-short.c scan-assembler vspltish
> +FAIL: gcc.target/powerpc/vec-set-short.c scan-assembler xxspltib
> +FAIL: gcc.target/powerpc/vsx-himode3.c scan-assembler lxsihzx
> +FAIL: gcc.target/powerpc/vsx-qimode3.c scan-assembler lxsibzx
> These can be all be fixed by removing "?"s disparaging vector
> alternatives in movsi_internal1 and mov<mode>_internal.

Like this.  Bootstrapped and regression tested powerpc64le-linux.
OK for stage1?

        * config/rs6000/rs6000.c (rs6000_register_move_cost): Reduce
        power9 direct move cost.
        * config/rs6000/rs6000.md (movsi_internal1): Don't disparage
        vector alternatives.
        (mov<mode>_internal): Likewise, excepting alternative that
        will be split.

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index fbc16c65de4..a9e27b356df 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -35010,7 +35010,7 @@ rs6000_register_move_cost (machine_mode mode,
              if (rs6000_tune == PROCESSOR_POWER8)
                ret = 4 * hard_regno_nregs (0, mode);
              else
-               ret = 3 * hard_regno_nregs (0, mode);
+               ret = 2 * hard_regno_nregs (0, mode);
              /* SFmode requires a conversion when moving between gprs
                 and vsx.  */
              if (mode == SFmode)
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index d383504c600..2fbab973907 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -6832,10 +6832,10 @@ (define_insn "movsi_low"
 ;;             MF%1         MT%0         NOP
 (define_insn "*movsi_internal1"
   [(set (match_operand:SI 0 "nonimmediate_operand"
-               "=r,         r,           r,           ?wI,         ?wH,
-                m,          ?Z,          ?Z,          r,           r,
-                r,          ?wIwH,       ?wJwK,       ?wJwK,       ?wu,
-                ?wJwK,      ?wH,         ?wK,         ?wIwH,       ?r,
+               "=r,         r,           r,           wI,          wH,
+                m,          Z,           Z,           r,           r,
+                r,          wIwH,        wJwK,        wJwK,        wu,
+                wJwK,       wH,          wK,          wIwH,        r,
                 r,          *h,          *h")
 
        (match_operand:SI 1 "input_operand"
@@ -7106,13 +7106,13 @@ (define_expand "mov<mode>"
 ;;             MTVSRWZ     MF%1       MT%1       NOP
 (define_insn "*mov<mode>_internal"
   [(set (match_operand:QHI 0 "nonimmediate_operand"
-               "=r,        r,         ?wJwK,     m,         Z,         r,
-                ?wJwK,     ?wJwK,     ?wJwK,     ?wK,       ?wK,       r,
-                ?wJwK,     r,         *c*l,      *h")
+               "=r,        r,         wJwK,      m,         Z,         r,
+                wJwK,      wJwK,      wJwK,      wK,        ?wK,       r,
+                wJwK,      r,         *c*l,      *h")
 
        (match_operand:QHI 1 "input_operand"
                "r,         m,         Z,         r,         wJwK,      i,
-                wJwK,      O,         wM,        wB,        wS,        ?wJwK,
+                wJwK,      O,         wM,        wB,        wS,        wJwK,
                 r,         *h,        r,         0"))]
 
   "gpc_reg_operand (operands[0], <MODE>mode)


-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to