]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/54674 (ICE in build2_stat, at tree.c:3835)
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Wed, 26 Sep 2012 16:49:32 +0000 (16:49 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Wed, 26 Sep 2012 16:49:32 +0000 (16:49 +0000)
2012-09-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

PR tree-optimization/54674
* gimple-ssa-strength-reduction.c (analyze_increments): Don't
introduce a multiplication with a pointer operand.

From-SVN: r191765

gcc/ChangeLog
gcc/gimple-ssa-strength-reduction.c

index c2c072db98558916c91bc8e2392cc9cf1949ea5b..afcee648f33a1786cbb7cd0a1f713dfc5e5fceeb 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-26  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       PR tree-optimization/54674
+       * gimple-ssa-strength-reduction.c (analyze_increments): Don't
+       introduce a multiplication with a pointer operand.
+
 2012-09-26  Georg-Johann Lay  <avr@gjlay.de>
 
        PR middle-end/54635
index 87684b3054362c3bceb050478d01cd8bfff81f9c..46600a57f8132a38bf2d4f6f4fafcbe31676dfcb 100644 (file)
@@ -2028,6 +2028,17 @@ analyze_increments (slsr_cand_t first_dep, enum machine_mode mode, bool speed)
 
        incr_vec[i].cost = COST_INFINITE;
 
+      /* If we need to add an initializer, make sure we don't introduce
+        a multiply by a pointer type, which can happen in certain cast
+        scenarios.  FIXME: When cleaning up these cast issues, we can
+         afford to introduce the multiply provided we cast out to an
+         unsigned int of appropriate size.  */
+      else if (!incr_vec[i].initializer
+              && TREE_CODE (first_dep->stride) != INTEGER_CST
+              && POINTER_TYPE_P (TREE_TYPE (first_dep->stride)))
+
+       incr_vec[i].cost = COST_INFINITE;
+
       /* For any other increment, if this is a multiply candidate, we
         must introduce a temporary T and initialize it with
         T_0 = stride * increment.  When optimizing for speed, walk the