Don't propagate hard registers in forward_propagate_subreg.
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 5 Jul 2011 12:47:35 +0000 (12:47 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 5 Jul 2011 12:47:35 +0000 (05:47 -0700)
2011-07-05  H.J. Lu  <hongjiu.lu@intel.com>

PR rtl-optimization/47449
* fwprop.c (forward_propagate_subreg): Don't propagate hard
register nor zero/sign extended hard register.

From-SVN: r175849

gcc/ChangeLog
gcc/fwprop.c

index 154c7cace3dff02bfac81ec3a484959f11c68c65..29eeb6491630e4b1f52ad0f7272a968c725388bd 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR rtl-optimization/47449
+       * fwprop.c (forward_propagate_subreg): Don't propagate hard
+       register nor zero/sign extended hard register.
+
 2011-07-05  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/49518
index 444a539cf7975d3be4ab903b6a63adc9b6e44c36..5db9ed88887b38843f40fe0d9fdf067e11aa8876 100644 (file)
@@ -1101,6 +1101,7 @@ forward_propagate_subreg (df_ref use, rtx def_insn, rtx def_set)
       src = SET_SRC (def_set);
       if (GET_CODE (src) == SUBREG
          && REG_P (SUBREG_REG (src))
+         && REGNO (SUBREG_REG (src)) >= FIRST_PSEUDO_REGISTER
          && GET_MODE (SUBREG_REG (src)) == use_mode
          && subreg_lowpart_p (src)
          && all_uses_available_at (def_insn, use_insn))
@@ -1119,6 +1120,7 @@ forward_propagate_subreg (df_ref use, rtx def_insn, rtx def_set)
       if ((GET_CODE (src) == ZERO_EXTEND
           || GET_CODE (src) == SIGN_EXTEND)
          && REG_P (XEXP (src, 0))
+         && REGNO (XEXP (src, 0)) >= FIRST_PSEUDO_REGISTER
          && GET_MODE (XEXP (src, 0)) == use_mode
          && !free_load_extend (src, def_insn)
          && all_uses_available_at (def_insn, use_insn))