On Mon, Jun 23, 2014 at 4:25 PM, Richard Henderson <r...@redhat.com> wrote:
> On 06/20/2014 01:42 PM, Marek Polacek wrote:
>> 2014-06-20  Marek Polacek  <pola...@redhat.com>
>>
>>       * genpreds.c (verify_rtx_codes): New function.
>>       (main): Call it.
>>       * rtl.h (RTX_FLD_WIDTH, RTX_HWINT_WIDTH): Define.
>>       (struct rtx_def): Use them.
>
> Looks pretty good.  Just a few nits.
>
>> +static void
>> +verify_rtx_codes (void)
>> +{
>> +  unsigned int i, j;
>> +
>> +  for (i = 0; i < NUM_RTX_CODE; i++)
>> +    if (strchr (GET_RTX_FORMAT (i), 'w') == NULL)
>> +      {
>> +     if (strlen (GET_RTX_FORMAT (i)) > RTX_FLD_WIDTH)
>> +       internal_error ("%s format %s longer than RTX_FLD_WIDTH %d\n",
>> +                       GET_RTX_NAME (i), GET_RTX_FORMAT (i),
>> +                       (int) RTX_FLD_WIDTH);
>> +      }
>> +    else
>> +      {
>> +     const size_t len = strlen (GET_RTX_FORMAT (i));
>
> The strlen result is used in both arms of the if.  Tidier to hoist it, I 
> think.
>
>> +     for (j = 0; j < len; j++)
>> +       if (GET_RTX_FORMAT (i)[j] != 'w')
>> +         internal_error ("%s format %s should contain only w, but "
>> +                         "has %c\n", GET_RTX_NAME (i), GET_RTX_FORMAT (i),
>> +                         GET_RTX_FORMAT (i)[j]);
>
> The loop is strspn.  Perhaps tidier as
>
>   const size_t spn = strspn(GET_RTX_FORMAT (i), "w");
>   if (spn != len)
>     internal_error (...);

Note that RTX_HWINT_WIDTH is wrong because of CONST_WIDE_INT.

Also I don't like increasing the array sizes - this is wrong in the same
way as [1] is.

Can we instead refactor expmed.c to avoid allocating rtx_def directly?
Like by using rtx in init_expmed_rtl and allocating from an obstack
(or not care and GC-allocate anyway).

Richard.

>
> r~
>

Reply via email to