http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49781
--- Comment #15 from H.J. Lu <hjl.tools at gmail dot com> 2011-08-03 16:49:12 UTC --- (In reply to comment #13) > (In reply to comment #10) > > > > This additional patch prevents zero_extend when we deal with > > wider-than-word-size moves. These moves need offsetable_operand, which > > zero_extend (...) isn't. > > > > Index: i386.c > > =================================================================== > > --- i386.c (revision 177281) > > +++ i386.c (working copy) > > @@ -11681,6 +11689,10 @@ ix86_legitimate_address_p (enum machine_ > > rtx base, index, disp; > > HOST_WIDE_INT scale; > > > > + if (GET_CODE (addr) == ZERO_EXTEND > > + && GET_MODE_SIZE (mode) > UNITS_PER_WORD) > > + return false; > > + > > if (ix86_decompose_address (addr, &parts) <= 0) > > /* Decomposition failed. */ > > return false; > > > Doesn't work. I got > > FAIL: gcc.dg/graphite/pr35356-2.c (internal compiler error) > FAIL: gcc.dg/graphite/pr35356-2.c (test for excess errors) > FAIL: libgomp.fortran/omp_parse4.f90 -Os (internal compiler error) > FAIL: libgomp.fortran/omp_parse4.f90 -Os (test for excess errors) > FAIL: gfortran.dg/gomp/crayptr5.f90 -O (internal compiler error) > FAIL: gfortran.dg/gomp/crayptr5.f90 -O (test for excess errors) Total regressions: FAIL: gcc.c-torture/compile/20000717-1.c -Os (internal compiler error) FAIL: gcc.c-torture/compile/20000717-1.c -Os (test for excess errors) FAIL: gcc.c-torture/execute/builtins/strcat.c compilation, -O1 (internal compiler error) FAIL: gcc.c-torture/unsorted/xdi.c, -O1 (internal compiler error) FAIL: gcc.dg/graphite/pr35356-2.c (internal compiler error) FAIL: gcc.dg/graphite/pr35356-2.c (test for excess errors) FAIL: gcc.dg/torture/pr45636.c -O1 (internal compiler error) FAIL: gcc.dg/torture/pr45636.c -O1 (test for excess errors) FAIL: gfortran.dg/alloc_comp_assign_4.f90 -O1 (internal compiler error) FAIL: gfortran.dg/alloc_comp_assign_4.f90 -O1 (test for excess errors) FAIL: gfortran.dg/alloc_comp_assign_4.f90 -O2 (internal compiler error) FAIL: gfortran.dg/alloc_comp_assign_4.f90 -O2 (test for excess errors) FAIL: gfortran.dg/alloc_comp_assign_4.f90 -Os (internal compiler error) FAIL: gfortran.dg/alloc_comp_assign_4.f90 -Os (test for excess errors) FAIL: gfortran.dg/bounds_check_array_ctor_1.f90 -O1 (internal compiler error) FAIL: gfortran.dg/bounds_check_array_ctor_1.f90 -O1 (test for excess errors) FAIL: gfortran.dg/bounds_check_array_ctor_6.f90 -O1 (internal compiler error) FAIL: gfortran.dg/bounds_check_array_ctor_6.f90 -O1 (test for excess errors) FAIL: gfortran.dg/bounds_check_array_ctor_8.f90 -O1 (internal compiler error) FAIL: gfortran.dg/bounds_check_array_ctor_8.f90 -O1 (test for excess errors) FAIL: gfortran.dg/character_array_constructor_1.f90 -O1 (internal compiler error) FAIL: gfortran.dg/character_array_constructor_1.f90 -O1 (test for excess errors) FAIL: gfortran.dg/char_expr_3.f90 -O1 (internal compiler error) FAIL: gfortran.dg/char_expr_3.f90 -O1 (test for excess errors) FAIL: gfortran.dg/char_length_3.f90 -O (internal compiler error) FAIL: gfortran.dg/char_length_3.f90 -O (test for excess errors) FAIL: gfortran.dg/extends_1.f03 -O1 (internal compiler error) FAIL: gfortran.dg/extends_1.f03 -O1 (test for excess errors) FAIL: gfortran.dg/g77/7388.f -O1 (internal compiler error) FAIL: gfortran.dg/g77/7388.f -O1 (test for excess errors) FAIL: gfortran.dg/gomp/crayptr5.f90 -O (internal compiler error) FAIL: gfortran.dg/gomp/crayptr5.f90 -O (test for excess errors) FAIL: gfortran.dg/namelist_66.f90 -O2 (internal compiler error) FAIL: gfortran.dg/namelist_66.f90 -O2 (test for excess errors) FAIL: gfortran.dg/proc_ptr_22.f90 -O2 (internal compiler error) FAIL: gfortran.dg/proc_ptr_22.f90 -O2 (test for excess errors) FAIL: gfortran.dg/proc_ptr_22.f90 -O3 -fomit-frame-pointer (internal compiler error) FAIL: gfortran.dg/proc_ptr_22.f90 -O3 -fomit-frame-pointer (test for excess errors) FAIL: gfortran.dg/proc_ptr_22.f90 -O3 -g (internal compiler error) FAIL: gfortran.dg/proc_ptr_22.f90 -O3 -g (test for excess errors) FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O2 (internal compiler error) FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O2 (test for excess errors) FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O3 -fomit-frame-pointer (internal compiler error) FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O3 -fomit-frame-pointer (test for excess errors) FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O3 -g (internal compiler error) FAIL: gfortran.dg/proc_ptr_comp_12.f90 -O3 -g (test for excess errors) FAIL: gfortran.fortran-torture/execute/where_11.f90, -Os (internal compiler error) FAIL: gfortran.fortran-torture/execute/where_2.f90, -Os (internal compiler error) FAIL: libgomp.fortran/omp_parse4.f90 -Os (internal compiler error) FAIL: libgomp.fortran/omp_parse4.f90 -Os (test for excess errors)