diff options
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/loop.c | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f2b22fa98a2..3b723f917eb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2005-11-15 Daniel Jacobowitz <dan@codesourcery.com> + * loop.c (scan_loop): Do not insert temporaries for hard registers. + +2005-11-15 Daniel Jacobowitz <dan@codesourcery.com> + * config/arm/lib1funcs.asm (div0) [L_dvmd_lnx]: Call raise instead of making syscalls. * config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define. Set r7 also. diff --git a/gcc/loop.c b/gcc/loop.c index 6df63026ab8..9efc84eff93 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -1238,13 +1238,15 @@ scan_loop (struct loop *loop, int flags) - with -Os (this certainly increases size), - if the mode doesn't support copy operations (obviously), - if the source is already a reg (the motion will gain nothing), - - if the source is a legitimate constant (likewise). */ + - if the source is a legitimate constant (likewise), + - if the dest is a hard register (may be unrecognizable). */ else if (insert_temp && (optimize_size || ! can_copy_p (GET_MODE (SET_SRC (set))) || REG_P (SET_SRC (set)) || (CONSTANT_P (SET_SRC (set)) - && LEGITIMATE_CONSTANT_P (SET_SRC (set))))) + && LEGITIMATE_CONSTANT_P (SET_SRC (set))) + || REGNO (SET_DEST (set)) < FIRST_PSEUDO_REGISTER)) ; else if ((tem = loop_invariant_p (loop, src)) && (dependencies == 0 |