OSDN Git Service

2008-03-11 Paolo Bonzini <bonzini@gnu.org>
authorbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Mar 2008 16:48:28 +0000 (16:48 +0000)
committerbonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 11 Mar 2008 16:48:28 +0000 (16:48 +0000)
PR rtl-optimization/35281
* expr.c (convert_move): Use a new pseudo for the intermediate
from_mode->word_mode result.

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

gcc/ChangeLog
gcc/expr.c

index 0c26540..7b7f9d7 100644 (file)
@@ -1,5 +1,11 @@
 2008-03-11  Paolo Bonzini  <bonzini@gnu.org>
 
+       PR rtl-optimization/35281
+       * expr.c (convert_move): Use a new pseudo for the intermediate
+       from_mode->word_mode result.
+
+2008-03-11  Paolo Bonzini  <bonzini@gnu.org>
+
         * langhooks-def.h (LANG_HOOKS_CLEAR_BINDING_STACK): Delete.
         * langhooks.h (struct lang_hooks): Delete clear_binding_stack member.
         * toplev.c (compile_file): Don't call it.
index 300b63d..3294f1a 100644 (file)
@@ -552,15 +552,15 @@ convert_move (rtx to, rtx from, int unsignedp)
               && ((code = can_extend_p (to_mode, word_mode, unsignedp))
                   != CODE_FOR_nothing))
        {
+         rtx word_to = gen_reg_rtx (word_mode);
          if (REG_P (to))
            {
              if (reg_overlap_mentioned_p (to, from))
                from = force_reg (from_mode, from);
              emit_insn (gen_rtx_CLOBBER (VOIDmode, to));
            }
-         convert_move (gen_lowpart (word_mode, to), from, unsignedp);
-         emit_unop_insn (code, to,
-                         gen_lowpart (word_mode, to), equiv_code);
+         convert_move (word_to, from, unsignedp);
+         emit_unop_insn (code, to, word_to, equiv_code);
          return;
        }