aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/sh
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@gcc.gnu.org>2022-05-28 12:08:38 -0600
committerJeff Law <jeffreyalaw@gmail.com>2022-05-28 12:14:39 -0600
commitce1580252ea57de23a595e9804ea87ed4353aa6a (patch)
tree01e2b3cc0301bee7387e98c84e37be302010e458 /gcc/config/sh
parentad8f6e23923893b76a21b01dd860db911066d7bb (diff)
downloadgcc-ce1580252ea57de23a595e9804ea87ed4353aa6a.zip
gcc-ce1580252ea57de23a595e9804ea87ed4353aa6a.tar.gz
gcc-ce1580252ea57de23a595e9804ea87ed4353aa6a.tar.bz2
Fix ICE on sh
gcc/ PR target/103722 * config/sh/sh.cc (sh_register_move_cost): Avoid cost "2" (which is special) for various scenarios.
Diffstat (limited to 'gcc/config/sh')
-rw-r--r--gcc/config/sh/sh.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/config/sh/sh.cc b/gcc/config/sh/sh.cc
index 8d40563..03e1c04 100644
--- a/gcc/config/sh/sh.cc
+++ b/gcc/config/sh/sh.cc
@@ -10762,6 +10762,12 @@ sh_register_move_cost (machine_mode mode,
&& ! REGCLASS_HAS_GENERAL_REG (dstclass))
return 2 * ((GET_MODE_SIZE (mode) + 7) / 8U);
+ if (((dstclass == FP_REGS || dstclass == DF_REGS)
+ && (srcclass == PR_REGS))
+ || ((srcclass == FP_REGS || srcclass == DF_REGS)
+ && (dstclass == PR_REGS)))
+ return 7;
+
return 2 * ((GET_MODE_SIZE (mode) + 3) / 4U);
}