Commit 068b04fe by Thomas Koenig

re PR fortran/57071 (Optimize (-1)**k to 1 - 2 * mod(K, 2))

2013-04-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/57071
	* frontend-passes.c (optimize_power):  Simplify
	1**k to 1.

2013-04-30  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/57071
	* gfortran.dg/power_5.f90:  New test.

From-SVN: r198476
parent dc4ea06f
2013-04-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/57071
* frontend-passes.c (optimize_power): Simplify
1**k to 1.
2013-04-28 Tobias Burnus <burnus@net-b.de> 2013-04-28 Tobias Burnus <burnus@net-b.de>
PR fortran/57114 PR fortran/57114
......
...@@ -1148,6 +1148,24 @@ optimize_power (gfc_expr *e) ...@@ -1148,6 +1148,24 @@ optimize_power (gfc_expr *e)
*e = *ishft; *e = *ishft;
return true; return true;
} }
else if (mpz_cmp_si (op1->value.integer, 1L) == 0)
{
op2 = e->value.op.op2;
if (op2 == NULL)
return false;
gfc_free_expr (op1);
gfc_free_expr (op2);
e->expr_type = EXPR_CONSTANT;
e->value.op.op1 = NULL;
e->value.op.op2 = NULL;
mpz_init_set_si (e->value.integer, 1);
/* Typespec cand location are still OK. */
return true;
}
return false; return false;
} }
......
2013-04-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/57071
* gfortran.dg/power_5.f90: New test.
2013-04-30 Richard Biener <rguenther@suse.de> 2013-04-30 Richard Biener <rguenther@suse.de>
PR middle-end/57122 PR middle-end/57122
......
! { dg-do run }
! { dg-options "-ffrontend-optimize -fdump-tree-original" }
! PR 57071 - Check that 1**k is transformed into 1
program main
implicit none
integer, parameter :: n = 3
integer(kind=8), dimension(-n:n) :: a
integer, dimension(-n:n) :: c, d
integer :: m
integer :: i, v
integer (kind=2) :: i2
v = 1
m = n
! Test in scalar expressions
do i=-n,n
if (v /= 1**i) call abort
end do
! Test in array constructors
a(-m:m) = [ (1**i, i= -m, m) ]
if (any(a .ne. v)) call abort
! Test in array expressions
c = [ ( i, i = -n , n ) ]
d = 1**c
if (any(d .ne. v)) call abort
! Test in different kind expressions
do i2=-n,n
if (v /= 1**i2) call abort
end do
end program main
! { dg-final { scan-tree-dump-times "_gfortran_pow_i4_i4" 0 "original" } }
! { dg-final { cleanup-tree-dump "original" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment