This is the mail archive of the gcc-patches@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: Fwd: [PATCH] Scheduling result adjustment to enable macro-fusion


> > +  gcc_assert (ok);
> > +  base = parts.base;
> > +  index = parts.index;
> > +  disp = parts.disp;
> > +
> > +  if (TARGET_64BIT && !base && !index)
> > +    {
> > +      rtx symbol = disp;
> > +
> > +      if (GET_CODE (disp) == CONST
> > +         && GET_CODE (XEXP (disp, 0)) == PLUS
> > +         && CONST_INT_P (XEXP (XEXP (disp, 0), 1)))
> > +       symbol = XEXP (XEXP (disp, 0), 0);
> > +
> > +      if (GET_CODE (symbol) == LABEL_REF
> > +         || (GET_CODE (symbol) == SYMBOL_REF
> > +             && SYMBOL_REF_TLS_MODEL (symbol) == 0))
> > +       return true;
> > +    }
> > +  if (flag_pic && !base && !index)
> > +    {
> > +      if (GET_CODE (disp) == CONST
> > +         && GET_CODE (XEXP (disp, 0)) == UNSPEC
> > +         && (XINT (XEXP (disp, 0), 1) == UNSPEC_PCREL
> > +             || XINT (XEXP (disp, 0), 1) == UNSPEC_GOTPCREL
> > +             || (TARGET_64BIT
> > +                 && XINT (XEXP (disp, 0), 1) == UNSPEC_GOTNTPOFF)))
> > +       return true;
> > +    }
> > +  return false;
> > +}
> > +
> 
> It doesn't look right.  IP relative address is only possible
> with TARGET_64BIT and
> 
> 1. base == pc. Or
> 2. UUNSPEC_PCREL,  UNSPEC_GOTPCREL, and
> NSPEC_GOTNTPOFF.

Target 64bit should be tested above.  We however output RIP addresses
also for basic symbol references.  I.e. when base is an symbol addresss.
such as in:
int a;
int t()
{
  return a;
}

memory_address_length already contains logic to figure out if there is IP
relative addressing going on (I am not sure it is completely accurate either).
Better to break it out to a common predicate and perhaps unify with what
ix86_print_operand_address is doing.

Honza
> 
> 
> -- 
> H.J.


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