Hi!

On 11/17/21 5:06 PM, Bill Schmidt wrote:
> On 11/17/21 3:32 PM, Segher Boessenkool wrote:
>> On Wed, Nov 17, 2021 at 02:58:54PM -0600, Bill Schmidt wrote:
>>> Hi!  This patch is broken out of the previous patch for all the builtins 
>>> test
>>> suite adjustments.  Here we have some slight changes in error messages due 
>>> to
>>> how the internals have changed between the old and new builtins methods.
>>>
>>> For scalar-extract-exp-2.c we change:
>>>   error: '__builtin_vec_scalar_extract_exp is not supported in this 
>>> compiler configuration'
>>>
>>> to:
>>>   error: '__builtin_vsx_scalar_extract_exp' requires the '-mcpu=power9' 
>>> option and either the '-m64' or '-mpowerpc64' option
>>>   note: builtin '__builtin_vec_scalar_extract_exp' requires builtin 
>>> '__builtin_vsx_scalar_extract_exp'
>> I don't like that at all.  The user didn't write the _vsx thing, and it
>> isn't documented either (neither is the _vec one, but that is a separate
>> issue, specific to this builtin).
> I feel like I haven't explained this well.  This kind of thing has been in
> existence forever even in the old builtins code.  The combination of the
> error showing the internal builtin name, and the note tying the overload
> name to the internal builtin name, has been there all along.  The name of
> the internal builtin is pretty meaningless.  The only thing that's interesting
> in this case is that we previously didn't get this *for this specific case*
> because the old code went to a generic fallback.  But in many other cases
> you get exactly this same kind of error message for the old code.
>
>>> The new message provides more information.  In both cases, it is less than
>>> ideal that we don't refer to scalar_extract_exp, which is referenced in
>>> the source line, but this is because scalar_extract_exp is #define'd to
>>> __builtin_vec_scalar_extract_exp, so it's unavoidable.  Certainly this is no
>>> worse than before, and arguably better.
>> It is a macro, enough said there
>>
>> The __builtin_ implementation should be documented (in the GCC manual,
>> if not elsewhere).  The warnings should talk about _vec, because the
>> _vsx thing only exists as implementation detail, and we should never
>> talk about those.  We don't have errors about adddi3 either!
>>
>>>   error: '__builtin_vsx_scalar_extract_sig' requires the '-mcpu=power9' 
>>> option and either the '-m64' or '-mpowerpc64' option
>>>   note: builtin '__builtin_vec_scalar_extract_sig' requires builtin 
>>> '__builtin_vsx_scalar_extract_sig'
>> The rhs in the note does not *exist*, as far as the user is concerned.
>> One builtin requiring another is all gobbledygook.
> As stated above, this isn't something new that I've added.  That's what
> we already do.  It's how the overload error messages have always been.

That said, I don't like the "requires" language at all, either.  How about
replacing "builtin X requires builtin Y" with "overloaded builtin X is
implemented by builtin Y" as a better explanation?

That could be done easily with a standalone patch that doesn't affect the
test suite, since none of the tests check for the note diagnostic.

Thanks,
Bill

>
> I haven't been able to eradicate everything awful here...
>
> Thanks,
> Bill
>
>>> For scalar-test-neg-{2,3,5}.c, we actually change the test case.  This is
>>> because we deliberately removed some undocumented and pointless     
>>> overloads,
>>> where each overload mapped to a single builtin.  These were:
>>>     __builtin_vec_scalar_test_neg_sp
>>>     __builtin_vec_scalar_test_neg_dp
>>>     __builtin_vec_scalar_test_neg_qp
>>> which are redundant with the "real" overload:
>>>     __builtin_vec_scalar_test_neg
>>> The latter maps to three builtins of the appropriate type.
>> Yes.  And the new ones are undocumented and useless just as well, they
>> just have better names.
>>
>>
>> Segher

Reply via email to