Commit 54f6892e by H.J. Lu Committed by H.J. Lu

Permute conversion and addition of constant for zero-extend.

gcc/

2011-08-19  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/49721
	* explow.c (convert_memory_address_addr_space): Also permute the
	conversion and addition of constant for zero-extend.

gcc/testsuite/

2011-08-19  H.J. Lu  <hongjiu.lu@intel.com>

	PR middle-end/49721
	* gfortran.dg/pr49721-1.f: New.
	* gfortran.fortran-torture/compile/pr49721-1.f: Likewise.

From-SVN: r177914
parent d4a83c10
2011-08-19 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/49721
* explow.c (convert_memory_address_addr_space): Also permute the
conversion and addition of constant for zero-extend.
2011-08-19 Joseph Myers <joseph@codesourcery.com> 2011-08-19 Joseph Myers <joseph@codesourcery.com>
* c-parser.c (c_parser_postfix_expression): Handle * c-parser.c (c_parser_postfix_expression): Handle
......
...@@ -384,18 +384,23 @@ convert_memory_address_addr_space (enum machine_mode to_mode ATTRIBUTE_UNUSED, ...@@ -384,18 +384,23 @@ convert_memory_address_addr_space (enum machine_mode to_mode ATTRIBUTE_UNUSED,
case PLUS: case PLUS:
case MULT: case MULT:
/* For addition we can safely permute the conversion and addition /* FIXME: For addition, we used to permute the conversion and
operation if one operand is a constant and converting the constant addition operation only if one operand is a constant and
does not change it or if one operand is a constant and we are converting the constant does not change it or if one operand
using a ptr_extend instruction (POINTERS_EXTEND_UNSIGNED < 0). is a constant and we are using a ptr_extend instruction
(POINTERS_EXTEND_UNSIGNED < 0) even if the resulting address
may overflow/underflow. We relax the condition to include
zero-extend (POINTERS_EXTEND_UNSIGNED > 0) since the other
parts of the compiler depend on it. See PR 49721.
We can always safely permute them if we are making the address We can always safely permute them if we are making the address
narrower. */ narrower. */
if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode)
|| (GET_CODE (x) == PLUS || (GET_CODE (x) == PLUS
&& CONST_INT_P (XEXP (x, 1)) && CONST_INT_P (XEXP (x, 1))
&& (XEXP (x, 1) == convert_memory_address_addr_space && (POINTERS_EXTEND_UNSIGNED != 0
(to_mode, XEXP (x, 1), as) || XEXP (x, 1) == convert_memory_address_addr_space
|| POINTERS_EXTEND_UNSIGNED < 0))) (to_mode, XEXP (x, 1), as))))
return gen_rtx_fmt_ee (GET_CODE (x), to_mode, return gen_rtx_fmt_ee (GET_CODE (x), to_mode,
convert_memory_address_addr_space convert_memory_address_addr_space
(to_mode, XEXP (x, 0), as), (to_mode, XEXP (x, 0), as),
......
2011-08-19 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/49721
* gfortran.dg/pr49721-1.f: New.
* gfortran.fortran-torture/compile/pr49721-1.f: Likewise.
2011-08-19 Joseph Myers <joseph@codesourcery.com> 2011-08-19 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/builtin-complex-err-1.c, gcc.dg/builtin-complex-err-2.c, * gcc.dg/builtin-complex-err-1.c, gcc.dg/builtin-complex-err-2.c,
......
! PR middle-end/49721
! { dg-do compile }
! { dg-options "-O3 -funroll-loops" }
subroutine midbloc6(c,a2,a2i,q)
parameter (ndim2=6)
parameter (ndim=3)
dimension ri(ndim2),cr(ndim2,ndim2),xj(ndim2,ndim2),q(*)
@,sai(ndim2,ndim2),cm(ndim2,ndim2),w(ndim2,ndim2)
dimension vr(ndim2,ndim2),vi(ndim2,ndim2),s1(ndim2,ndim2),p(ndim)
dimension xq(6),qb(2),qc(2),ifl(6),iplane(3)
save
call eig66(cr,rr,ri,vr,vi)
xq(i)=asin(ri(i))/x2pi
i9=6
qb(1)=q(1)/x2pi
do 180 i=1,2
do 170 j=1,6
120 if(xq(j)) 130,190,140
130 if(qb(i)-0.5d0) 160,150,150
140 if(qb(i)-0.5d0) 150,150,160
150 continue
tst=abs(abs(qb(i))-abs(xq(j)))
160 continue
170 continue
iplane(i)=k
180 continue
190 continue
n1=iplane(3)
if(i9.eq.6) then
z=vr(1,n1)*vi(2,n1)-vr(2,n1)*vi(1,n1)+vr(3,n1)*vi(4,n1)-vr(4,n1)
endif
sai(6,i)=vi(i,n1)/z
call dacond6(a2,zero)
end
PARAMETER( LM=7 )
PARAMETER( NM=2+2**LM, NV=NM**3 )
PARAMETER( NR = (8*(NM**3+NM**2+5*NM-23+7*LM))/7 )
COMMON /X/ U, V, R, A
REAL*8 U(NR),V(NV),R(NR),A(0:3)
DO 20 IT=1,NIT
CALL RESID(U,V,R,N,A)
20 CONTINUE
END
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