This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Your change to emit_group_{load,store}
On Tue, Oct 26, 2004 at 11:53:49AM -0700, Richard Henderson wrote:
> On Tue, Oct 26, 2004 at 01:58:26PM -0400, Aldy Hernandez wrote:
> > On Tue, Oct 26, 2004 at 01:54:05PM -0400, Richard Kenner wrote:
> > > I don't understand the test for !SCALAR_INT_MODE_P. That include BLKmode,
> > > but you call emit_move_insn in the new code, which won't work for BLKmode.
> > > What did you mean here? Perhaps SCALAR_FLOAT_MODE_P?
> > >
> > > The test case is compiling the Ada RTS file a-calend.adb with -O2 on x864-64.
> >
> > Hmmm... perhaps what we want is SCALAR_FLOAT_MODE_P or
> > (!SCALAR_INT_MODE_P && !BLKmode).
>
> The later I would think.
In that case... Kenner, could you try this patch to see if it fixes
your problem.
Pinski, could you try it on the non-Ada case to see if it works?
Thanks folks.
Aldy
* expr.c (emit_group_store): Do not treat floats as BLKmode.
(emit_group_load): Same.
Index: expr.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/expr.c,v
retrieving revision 1.735
diff -c -p -r1.735 expr.c
*** expr.c 26 Oct 2004 10:56:31 -0000 1.735
--- expr.c 26 Oct 2004 22:19:07 -0000
*************** emit_group_load (rtx dst, rtx orig_src,
*** 1567,1576 ****
{
rtx *tmps, src;
int start, i;
gcc_assert (GET_CODE (dst) == PARALLEL);
! if (!SCALAR_INT_MODE_P (GET_MODE (orig_src)))
{
enum machine_mode imode = int_mode_for_mode (GET_MODE (orig_src));
if (imode == BLKmode)
--- 1567,1577 ----
{
rtx *tmps, src;
int start, i;
+ enum machine_mode m = GET_MODE (orig_src);
gcc_assert (GET_CODE (dst) == PARALLEL);
! if (!SCALAR_INT_MODE_P (m) && m != BLKmode)
{
enum machine_mode imode = int_mode_for_mode (GET_MODE (orig_src));
if (imode == BLKmode)
*************** emit_group_store (rtx orig_dst, rtx src,
*** 1740,1749 ****
{
rtx *tmps, dst;
int start, i;
gcc_assert (GET_CODE (src) == PARALLEL);
! if (!SCALAR_INT_MODE_P (GET_MODE (orig_dst)))
{
enum machine_mode imode = int_mode_for_mode (GET_MODE (orig_dst));
if (imode == BLKmode)
--- 1741,1751 ----
{
rtx *tmps, dst;
int start, i;
+ enum machine_mode m = GET_MODE (orig_dst);
gcc_assert (GET_CODE (src) == PARALLEL);
! if (!SCALAR_INT_MODE_P (m) && m != BLKmode)
{
enum machine_mode imode = int_mode_for_mode (GET_MODE (orig_dst));
if (imode == BLKmode)