diff options
author | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2022-05-28 12:08:38 -0600 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2022-07-01 15:27:02 +0000 |
commit | 962e7f0803f163f9cf44d64a2e199935d3f361fe (patch) | |
tree | 5d048ff525a5c0f6e4d542467dbe17447cfcaf4d /gcc | |
parent | b1c8ee2627696717013ebdb1ca3f5f97a76b1cb9 (diff) |
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.
(cherry picked from commit ce1580252ea57de23a595e9804ea87ed4353aa6a)
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/sh/sh.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/config/sh/sh.cc b/gcc/config/sh/sh.cc index 8d4056338a5..03e1c04ec7e 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); } |