diff options
-rw-r--r-- | gcc/cse.cc | 10 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr108193.f90 | 24 |
2 files changed, 29 insertions, 5 deletions
@@ -1169,14 +1169,14 @@ compute_const_anchors (rtx cst, HOST_WIDE_INT *lower_base, HOST_WIDE_INT *lower_offs, HOST_WIDE_INT *upper_base, HOST_WIDE_INT *upper_offs) { - HOST_WIDE_INT n = INTVAL (cst); + unsigned HOST_WIDE_INT n = UINTVAL (cst); *lower_base = n & ~(targetm.const_anchor - 1); - if (*lower_base == n) + if ((unsigned HOST_WIDE_INT) *lower_base == n) return false; - *upper_base = - (n + (targetm.const_anchor - 1)) & ~(targetm.const_anchor - 1); + *upper_base = ((n + (targetm.const_anchor - 1)) + & ~(targetm.const_anchor - 1)); *upper_offs = n - *upper_base; *lower_offs = n - *lower_base; return true; @@ -1193,7 +1193,7 @@ insert_const_anchor (HOST_WIDE_INT anchor, rtx reg, HOST_WIDE_INT offs, rtx anchor_exp; rtx exp; - anchor_exp = GEN_INT (anchor); + anchor_exp = gen_int_mode (anchor, mode); hash = HASH (anchor_exp, mode); elt = lookup (anchor_exp, hash, mode); if (!elt) diff --git a/gcc/testsuite/gfortran.dg/pr108193.f90 b/gcc/testsuite/gfortran.dg/pr108193.f90 new file mode 100644 index 0000000..3a3655f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr108193.f90 @@ -0,0 +1,24 @@ +! PR rtl-optimization/108193 +! { dg-do compile { target pthread } } +! { dg-options "-O2 -fsplit-loops -ftree-parallelize-loops=2 -fno-tree-dominator-opts" } + +subroutine foo (n, r) + implicit none + integer :: i, j, n + real :: s, r(*) + + s = 0.0 + + do j = 1, 2 + do i = j, n + s = r(i) + end do + end do + + do i = 1, n + do j = i, n + s = s + 1 + end do + r(i) = s + end do +end subroutine foo |