aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@codesourcery.com>2005-11-15 14:33:04 +0000
committerDaniel Jacobowitz <drow@gcc.gnu.org>2005-11-15 14:33:04 +0000
commit616cf694edcb0729c2ee8a01f8fb9676e0627eaa (patch)
tree7c37a694ad475aca692ae54a5897d1e3d4de5632
parent5d7c0add81c2d9ff338e76bf58dce99f9a0410e8 (diff)
downloadgcc-616cf694edcb0729c2ee8a01f8fb9676e0627eaa.zip
gcc-616cf694edcb0729c2ee8a01f8fb9676e0627eaa.tar.gz
gcc-616cf694edcb0729c2ee8a01f8fb9676e0627eaa.tar.bz2
* loop.c (scan_loop): Do not insert temporaries for hard registers.
From-SVN: r107019
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/loop.c6
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f2b22fa..3b723f9 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 6df6302..9efc84ef 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