This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/49781] [x32] Unnecessary lea in x32 mode
- From: "hjl.tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 3 Aug 2011 16:49:31 +0000
- Subject: [Bug target/49781] [x32] Unnecessary lea in x32 mode
- Auto-submitted: auto-generated
- References: <bug-49781-4@http.gcc.gnu.org/bugzilla/>
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)