OSDN Git Service

PR middle-end/25474
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Apr 2006 23:33:51 +0000 (23:33 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Apr 2006 23:33:51 +0000 (23:33 +0000)
* expr.c (compress_float_constant): Copy the narrow constant into
a new pseudo before extending it to its final width.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112991 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expr.c

index 9fbdca0..53e1029 100644 (file)
@@ -1,4 +1,10 @@
 2006-04-16  Roger Sayle  <roger@eyesopen.com>
+
+       PR middle-end/25474
+       * expr.c (compress_float_constant): Copy the narrow constant into
+       a new pseudo before extending it to its final width.
+
+2006-04-16  Roger Sayle  <roger@eyesopen.com>
            Andrew Pinski  <pinskia@gcc.gnu.org>
            Dale Johannesen  <dalej@apple.com>
 
index 8d2839f..b0e958c 100644 (file)
@@ -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 ();