aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-04-16 23:33:51 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-04-16 23:33:51 +0000
commitd763e13096d2a3f3da4889b97e07673978e16a2c (patch)
treee3ffdcf8b285a07768bf399be78316a46a82390c /gcc/expr.c
parent2ff619482da2a22a0099aacfd9e3118e25256aac (diff)
downloadgcc-d763e13096d2a3f3da4889b97e07673978e16a2c.zip
gcc-d763e13096d2a3f3da4889b97e07673978e16a2c.tar.gz
gcc-d763e13096d2a3f3da4889b97e07673978e16a2c.tar.bz2
re PR middle-end/25474 (Extra load for some FP code)
PR middle-end/25474 * expr.c (compress_float_constant): Copy the narrow constant into a new pseudo before extending it to its final width. From-SVN: r112991
Diffstat (limited to 'gcc/expr.c')
-rw-r--r--gcc/expr.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 8d2839f..b0e958c 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -3346,7 +3346,11 @@ compress_float_constant (rtx x, rtx y)
}
else
continue;
-
+
+ /* For CSE's benefit, force the compressed constant pool entry
+ into a new pseudo. This constant may be used in different modes,
+ and if not, combine will put things back together for us. */
+ trunc_y = force_reg (srcmode, trunc_y);
emit_unop_insn (ic, x, trunc_y, UNKNOWN);
last_insn = get_last_insn ();