re PR rtl-optimization/35281 (multiply with 0 generated for 64*32->64)
authorPaolo Bonzini <bonzini@gnu.org>
Tue, 11 Mar 2008 16:48:28 +0000 (16:48 +0000)
committerPaolo Bonzini <bonzini@gcc.gnu.org>
Tue, 11 Mar 2008 16:48:28 +0000 (16:48 +0000)
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.

From-SVN: r133116

gcc/ChangeLog
gcc/expr.c

index 0c265403fd61c3684b0a6630169796601474d6bf..7b7f9d7f735c8cfb71065ced4187de049ed4c644 100644 (file)
@@ -1,3 +1,9 @@
+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.
index 300b63d88165a6a8b2a8c07b703682556a6259ac..3294f1a23e02bf29122880ad67480e2117c14f71 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;
        }