diff options
author | Robin Dapp <rdapp@linux.ibm.com> | 2022-02-08 14:56:29 +0100 |
---|---|---|
committer | Robin Dapp <rdapp@linux.ibm.com> | 2022-02-08 15:28:53 +0100 |
commit | 1e3185e714e877b2b4d14ade0865322f71a8cbf6 (patch) | |
tree | 189545d046eac4085f79dd745f925d88ec4a9e61 /gcc/config/s390 | |
parent | 38a177fa4c2fd1ce75581145b3b8f12592b4aacd (diff) | |
download | gcc-1e3185e714e877b2b4d14ade0865322f71a8cbf6.zip gcc-1e3185e714e877b2b4d14ade0865322f71a8cbf6.tar.gz gcc-1e3185e714e877b2b4d14ade0865322f71a8cbf6.tar.bz2 |
s390: Increase costs for load on condition and change movqicc expander.
This patch changes the costs for a load on condition from 5 to 6 in
order to ensure that we only if-convert two and not three or more SETS like
if (cond)
{
a = b;
c = d;
e = f;
}
In the movqicc expander we emit a paradoxical subreg directly that
combine would otherwise try to create by using a non-optimal sequence
(which would be too expensive).
Also, fix two oversights in ifcvt testcases.
gcc/ChangeLog:
* config/s390/s390.cc (s390_rtx_costs): Increase costs for load
on condition.
* config/s390/s390.md: Use paradoxical subreg.
gcc/testsuite/ChangeLog:
* gcc.target/s390/ifcvt-two-insns-int.c: Fix array size.
* gcc.target/s390/ifcvt-two-insns-long.c: Dito.
Diffstat (limited to 'gcc/config/s390')
-rw-r--r-- | gcc/config/s390/s390.cc | 2 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index c6cfe41..d2af6d8 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -3636,7 +3636,7 @@ s390_rtx_costs (rtx x, machine_mode mode, int outer_code, /* It is going to be a load/store on condition. Make it slightly more expensive than a normal load. */ - *total = COSTS_N_INSNS (1) + 1; + *total = COSTS_N_INSNS (1) + 2; rtx dst = SET_DEST (x); rtx then = XEXP (SET_SRC (x), 1); diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index e3ccbac..5eee8e8 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -7003,9 +7003,9 @@ if (!CONSTANT_P (els)) els = simplify_gen_subreg (E_SImode, els, <MODE>mode, 0); - rtx tmp_target = gen_reg_rtx (E_SImode); + rtx tmp_target = simplify_gen_subreg (E_SImode, operands[0], <MODE>mode, 0); + emit_insn (gen_movsicc (tmp_target, operands[1], then, els)); - emit_move_insn (operands[0], gen_lowpart (<MODE>mode, tmp_target)); DONE; }) |