aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-02-19 22:01:17 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-02-19 22:01:17 +0000
commit3d8504ac3262976d2c63d547a07aef0874f530b6 (patch)
tree548133d8c92115bf18fa7c2d6f3e7800dbd456bb /gcc/loop.c
parentc2a8530e21c7a3bc4824d00e0bb8ff39009da43a (diff)
downloadgcc-3d8504ac3262976d2c63d547a07aef0874f530b6.zip
gcc-3d8504ac3262976d2c63d547a07aef0874f530b6.tar.gz
gcc-3d8504ac3262976d2c63d547a07aef0874f530b6.tar.bz2
gcse.c (want_to_gcse_p): On STACK_REGS targets...
* gcse.c (want_to_gcse_p): On STACK_REGS targets, look through constant pool references to identify stack mode constants. * rtlanal.c (constant_pool_constant_p): New predicate to check whether operand is a floating point constant in the pool. * rtl.h (constant_pool_constant_p): Prototype here. * loop.c (scan_loop): Avoid hoisting constants from the constant pool on STACK_REGS targets. (load_mems): Likewise. * loop-invariant.c (get_inv_cost): Make hoisting constant pool loads into x87 registers expensive in terms of register pressure. Co-Authored-By: Steven Bosscher <stevenb.gcc@gmail.com> From-SVN: r111283
Diffstat (limited to 'gcc/loop.c')
-rw-r--r--gcc/loop.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index 1beb4dc..dc9d3a03 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -1222,6 +1222,12 @@ scan_loop (struct loop *loop, int flags)
if (GET_MODE_CLASS (GET_MODE (SET_DEST (set))) == MODE_CC
&& CONSTANT_P (src))
;
+#ifdef STACK_REGS
+ /* Don't hoist constant pool constants into stack regs. */
+ else if (IS_STACK_MODE (GET_MODE (SET_SRC (set)))
+ && constant_pool_constant_p (SET_SRC (set)))
+ ;
+#endif
/* Don't try to optimize a register that was made
by loop-optimization for an inner loop.
We don't know its life-span, so we can't compute
@@ -10823,6 +10829,13 @@ load_mems (const struct loop *loop)
&& SCALAR_FLOAT_MODE_P (GET_MODE (mem)))
loop_info->mems[i].optimize = 0;
+#ifdef STACK_REGS
+ /* Don't hoist constant pool constants into stack registers. */
+ if (IS_STACK_MODE (GET_MODE (mem))
+ && constant_pool_constant_p (mem))
+ loop_info->mems[i].optimize = 0;
+#endif
+
/* If this MEM is written to, we must be sure that there
are no reads from another MEM that aliases this one. */
if (loop_info->mems[i].optimize && written)