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