diff options
author | Eric Botcazou <ebotcazou@libertysurf.fr> | 2005-10-19 16:42:17 +0200 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2005-10-19 14:42:17 +0000 |
commit | e48050bd060e5faeae80c4c833e14fe3885ed599 (patch) | |
tree | 78ff2fa79db3827d5cfd641d055766a3bbc93414 /gcc/cfgrtl.c | |
parent | 486516b60ba69fa8bd5fd13a9e4f630642d18546 (diff) | |
download | gcc-e48050bd060e5faeae80c4c833e14fe3885ed599.zip gcc-e48050bd060e5faeae80c4c833e14fe3885ed599.tar.gz gcc-e48050bd060e5faeae80c4c833e14fe3885ed599.tar.bz2 |
re PR middle-end/23199 (ICE in int_mode_for_mode, at stor-layout.c:251)
PR middle-end/23199
* cfgrtl.c (safe_insert_insn_on_edge): Use can_copy_p to detect
whether registers live on the edge can be saved/restored.
From-SVN: r105618
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r-- | gcc/cfgrtl.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 00a219d4..f49eceb 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1456,16 +1456,9 @@ safe_insert_insn_on_edge (rtx insn, edge e) regset killed; rtx save_regs = NULL_RTX; unsigned regno; - int noccmode; enum machine_mode mode; reg_set_iterator rsi; -#ifdef AVOID_CCMODE_COPIES - noccmode = true; -#else - noccmode = false; -#endif - killed = ALLOC_REG_SET (®_obstack); for (x = insn; x; x = NEXT_INSN (x)) @@ -1491,7 +1484,8 @@ safe_insert_insn_on_edge (rtx insn, edge e) if (mode == VOIDmode) return false; - if (noccmode && mode == CCmode) + /* Avoid copying in CCmode if we can't. */ + if (!can_copy_p (mode)) return false; save_regs = alloc_EXPR_LIST (0, |