[cfe-dev] Matrix Support in Clang
John McCall via cfe-dev
cfe-dev at lists.llvm.org
Thu Apr 2 13:49:18 PDT 2020
On 2 Apr 2020, at 16:17, Florian Hahn wrote:
> > On Apr 2, 2020, at 17:32, John McCall <rjmccall at apple.com> wrote:
>>
>> On 2 Apr 2020, at 9:47, Florian Hahn wrote:
>>
>> On Apr 1, 2020, at 20:48, Stephen Canon <scanon at apple.com> wrote:
>>
>> On Apr 1, 2020, at 1:23 PM, John McCall via cfe-dev
>> <cfe-dev at lists.llvm.org> wrote:
>>
>> On 1 Apr 2020, at 13:15, Florian Hahn wrote:
>> I agree that ideally we would not allow mis-matched binary operations
>> to avoid surprises. It looks like the existing vector type does not
>> perform implicit conversion for binary operations with 2 vector
>> operands (unless the there is a type mis-match and the data size
>> matches, then the LHS type is chosen). For binary ops with vector and
>> scalar operands, the scalar operand is converted to the vector
>> element type. So short4 + short4 -> short4, short4 + int -> short4,
>> short4 + int4 -> invalid.
>>
>> Given that precedence, I think we should opt for not providing
>> conversions for binary operators with two matrix operands. For the
>> matrix and scalar versions, we could convert to the element type
>> automatically for convenience. But at that point, the gain is
>> probably quite small and it would be simpler to don’t do
>> conversions in any case. Does that sound reasonable?
>>
>> I think converting scalars is a necessary convenience in C given that
>> e.g. literals are normally of type int, but yes, I think it’s fine
>> to not implicitly convert matrices as long as you have a way to
>> convert them explicitly.
>>
>> Converting them explicitly should be covered by the standard
>> conversion rules, right?
>>
>> Do you want matrices to be implicitly convertible in non-operator
>> contexts? Like, if you assign a float4x4 to an int4x4, should that
>> implicitly convert the elements or be ill-formed?
>>
>>
> I think the current formulation allows for implicit conversions for
> matrixes.
>
> But given the recent changes in the arithmetic context, it might be
> better to only allow explicit conversions. Having implicit conversions
> for non-operator contexts and not in operator contexts seems a bit
> inconsistent. I think we should keep the conversion rules based on the
> element types, but limit them to explicit conversions. Does that make
> sense?\
That makes sense to me. If it’s actually a usability issue in
practice, we can revisit, but I suspect that if we start strict we’ll
avoid that.
John.
More information about the cfe-dev
mailing list