Hello,

now that the apply_distributive_law change is in, I'd like to pick up
Richard's original patch, see discussion here:
http://gcc.gnu.org/ml/gcc-patches/2011-09/msg00852.html

The version below integrates all requests for changes that were raised.
It's been part of Linaro GCC releases in this form for a while with no
problem reported.  We see performance improvements in several libav loops,
as described in Richard's original mail.  We've seen no test case so far
where this patch (against current baseline) has shown any significant
performance regressions.

Re-tested on arm-linux-gnueabi and i386-linux-gnu with no regressions.

OK for mainline?

Bye,
Ulrich


ChangeLog:

        * fwprop.c (propagate_rtx): Also set PR_CAN_APPEAR for subregs.

=== modified file 'gcc/fwprop.c'
--- gcc/fwprop.c        2011-12-19 22:05:28 +0000
+++ gcc/fwprop.c        2012-02-22 11:57:19 +0000
@@ -664,7 +664,12 @@
     return NULL_RTX;
 
   flags = 0;
-  if (REG_P (new_rtx) || CONSTANT_P (new_rtx))
+  if (REG_P (new_rtx)
+      || CONSTANT_P (new_rtx)
+      || (GET_CODE (new_rtx) == SUBREG
+         && REG_P (SUBREG_REG (new_rtx))
+         && (GET_MODE_SIZE (mode)
+             <= GET_MODE_SIZE (GET_MODE (SUBREG_REG (new_rtx))))))
     flags |= PR_CAN_APPEAR;
   if (!for_each_rtx (&new_rtx, varying_mem_p, NULL))
     flags |= PR_HANDLE_MEM;

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  ulrich.weig...@de.ibm.com

Reply via email to