diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h --- a/flang/lib/Evaluate/fold-implementation.h +++ b/flang/lib/Evaluate/fold-implementation.h @@ -1785,20 +1785,6 @@ } return Expr{Constant{product.value}}; } - } else if constexpr (T::category == TypeCategory::Integer) { - if (auto c{GetScalarConstantValue(x.right())}) { - x.right() = std::move(x.left()); - x.left() = Expr{std::move(*c)}; - } - if (auto c{GetScalarConstantValue(x.left())}) { - if (c->IsZero()) { - return std::move(x.left()); - } else if (c->CompareSigned(Scalar{1}) == Ordering::Equal) { - return std::move(x.right()); - } else if (c->CompareSigned(Scalar{-1}) == Ordering::Equal) { - return Expr{Negate{std::move(x.right())}}; - } - } } return Expr{std::move(x)}; } diff --git a/flang/test/Evaluate/rewrite01.f90 b/flang/test/Evaluate/rewrite01.f90 --- a/flang/test/Evaluate/rewrite01.f90 +++ b/flang/test/Evaluate/rewrite01.f90 @@ -44,7 +44,7 @@ subroutine size_test(x, n, m) integer :: x(n, m) - !CHECK: PRINT *, int(size(x,dim=1,kind=8)*size(x,dim=2,kind=8),kind=4) + !CHECK: PRINT *, int(1_8*size(x,dim=1,kind=8)*size(x,dim=2,kind=8),kind=4) print *, size(x) !CHECK: PRINT *, size(returns_array(n,m)) print *, size(returns_array(n, m)) diff --git a/flang/test/Lower/OpenMP/omp-wsloop-chunks.f90 b/flang/test/Lower/OpenMP/omp-wsloop-chunks.f90 --- a/flang/test/Lower/OpenMP/omp-wsloop-chunks.f90 +++ b/flang/test/Lower/OpenMP/omp-wsloop-chunks.f90 @@ -37,7 +37,7 @@ ! CHECK: %[[VAL_17:.*]] = arith.constant 4 : i32 ! CHECK: omp.wsloop schedule(static = %[[VAL_17]] : i32) nowait for (%[[VAL_18:.*]]) : i32 = (%[[VAL_14]]) to (%[[VAL_15]]) inclusive step (%[[VAL_16]]) { ! CHECK: %[[VAL_24:.*]] = arith.constant 2 : i32 -! CHECK: %[[VAL_25:.*]] = arith.muli %[[VAL_24]], %[[VAL_18]] : i32 +! CHECK: %[[VAL_25:.*]] = arith.muli %[[VAL_18]], %[[VAL_24]] : i32 ! CHECK: {{.*}} = fir.call @_FortranAioOutputInteger32({{.*}}, %[[VAL_25]]) : (!fir.ref, i32) -> i1 ! CHECK: omp.yield ! CHECK: } @@ -59,7 +59,7 @@ ! CHECK: %[[VAL_32:.*]] = fir.load %[[VAL_0]] : !fir.ref ! CHECK: omp.wsloop schedule(static = %[[VAL_32]] : i32) nowait for (%[[VAL_33:.*]]) : i32 = (%[[VAL_29]]) to (%[[VAL_30]]) inclusive step (%[[VAL_31]]) { ! CHECK: %[[VAL_39:.*]] = arith.constant 3 : i32 -! CHECK: %[[VAL_40:.*]] = arith.muli %[[VAL_39]], %[[VAL_33]] : i32 +! CHECK: %[[VAL_40:.*]] = arith.muli %[[VAL_33]], %[[VAL_39]] : i32 ! CHECK: {{.*}} = fir.call @_FortranAioOutputInteger32({{.*}}, %[[VAL_40]]) : (!fir.ref, i32) -> i1 ! CHECK: omp.yield ! CHECK: } diff --git a/flang/test/Lower/variable-inquiries.f90 b/flang/test/Lower/variable-inquiries.f90 --- a/flang/test/Lower/variable-inquiries.f90 +++ b/flang/test/Lower/variable-inquiries.f90 @@ -16,6 +16,7 @@ ! CHECK: %[[box_load:.*]] = fir.load %[[a]] : !fir.ref>>> ! CHECK: %[[dim:.*]]:3 = fir.box_dims %[[box_load]], %c0{{.*}} : (!fir.box>>, index) -> (index, index, index) ! CHECK: %[[cast:.*]] = fir.convert %[[dim]]#1 : (index) -> i64 - ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %[[cast]]) : (!fir.ref, i64) -> i1 + ! CHECK: %[[cast_mul1:.*]] = arith.muli %{{.+}}, %[[cast]] : i64 + ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %[[cast_mul1]]) : (!fir.ref, i64) -> i1 print *, size(a, kind=8) end subroutine diff --git a/flang/test/Semantics/modfile17.f90 b/flang/test/Semantics/modfile17.f90 --- a/flang/test/Semantics/modfile17.f90 +++ b/flang/test/Semantics/modfile17.f90 @@ -98,7 +98,7 @@ !end type !type::defaulted(n1,n2,n4,n8) !integer(1),kind::n1=1_1 -!integer(2),kind::n2=int(2_4*int(int(n1,kind=1),kind=4),kind=2) +!integer(2),kind::n2=int(int(int(n1,kind=1),kind=4)*2_4,kind=2) !integer(4),kind::n4=2_4*int(int(n2,kind=2),kind=4) !integer(8),kind::n8=int(12_4-int(n4,kind=4),kind=8) !type(capture(k1=int(n1,kind=1),k2=int(n2,kind=2),k4=int(n4,kind=4),k8=n8))::cap diff --git a/flang/test/Semantics/modfile30.f90 b/flang/test/Semantics/modfile30.f90 --- a/flang/test/Semantics/modfile30.f90 +++ b/flang/test/Semantics/modfile30.f90 @@ -19,11 +19,11 @@ !contains ! function f1(x) result(y) ! integer(4)::x(:) -! integer(4)::y(1_8:size(x,dim=1,kind=8)) +! integer(4)::y(1_8:int(int(1_8*size(x,dim=1,kind=8),kind=4),kind=8)) ! end ! function f2(x) ! integer(4)::x(:) -! integer(4)::f2(1_8:size(x,dim=1,kind=8)) +! integer(4)::f2(1_8:int(int(1_8*size(x,dim=1,kind=8),kind=4),kind=8)) ! end !end