[PATCH] Be less conservative in process_{output,input}_constraints (PR target/65689)

Jakub Jelinek jakub@redhat.com
Thu Apr 9 06:58:00 GMT 2015


On Thu, Apr 09, 2015 at 12:20:40AM +0200, Jakub Jelinek wrote:
> On Wed, Apr 08, 2015 at 05:16:08PM -0500, Segher Boessenkool wrote:
> > On Wed, Apr 08, 2015 at 05:12:07PM -0500, Segher Boessenkool wrote:
> > > On Wed, Apr 08, 2015 at 11:00:59PM +0200, Jakub Jelinek wrote:
> > > > +    case MATCH_CODE:
> > > > +      if (*XSTR (exp, 1) == '\0')
> > > > +	{
> > > > +	  const char *code, *codes = XSTR (exp, 0);
> > > > +	  int ret = 0;
> > > > +	  while ((code = scan_comma_elt (&codes)) != 0)
> > > > +	    if (strncmp (code, "reg", 3) == 0
> > > > +		&& (code[3] == ',' || code[3] == '\0' || code[3] == ' '))
> > > 
> > > This doesn't allow other whitespace.  Maybe it's cleaner written as e.g.
> > > 
> > > 	&& codes - code == 3
> > 
> > ... and that doesn't handle trailing whitespace.  Ugh.
> 
> Yeah.  Guess I should use
> 	&& (code[3] == ',' || code[3] == '\0' || ISSPACE (code[3]))
> instead then.

Or another option is just to follow what genpreds.c uses earlier:
          || (!strstr (XSTR (exp, 0), "const_int")
              && !strstr (XSTR (exp, 0), "const_double")))
if (strstr (XSTR (exp, 0), "reg"))
  ret |= 1;
if (strstr (XSTR (exp, 0), "mem"))
  ret |= 2;
would match besides reg/subreg or mem also define_register_constraint
or define_memory_constraint, but those surely won't appear in sane
constraints.md (and even if they would, all we need is conservative test).

	Jakub



More information about the Gcc-patches mailing list