This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]