[Patch, Fortran] Implement Unsigned for SUM and PRODUCT
Thomas Koenig
tkoenig@netcologne.de
Thu Sep 19 17:18:19 GMT 2024
Am 19.09.24 um 11:55 schrieb Andre Vehreschild:
> Hi Thomas,
>
> thanks for the patch. I have one proposal/question and one missing verb (IMO).
> Else the patch looks fine to me. Ok for trunk.
>
>> diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
>> index 829ab00c665..e5ffe67eeee 100644
>> --- a/gcc/fortran/gfortran.texi
>> +++ b/gcc/fortran/gfortran.texi
>> @@ -2788,7 +2788,7 @@ As of now, the following intrinsics take unsigned
>> arguments: @item @code{MVBITS}
>> @item @code{RANGE}
>> @item @code{TRANSFER}
>> -@item @code{MATMUL} and @code{DOT_PRODUCT}
>> +@item @code{SUM}, @code{PRODUCT}, @code{MATMUL} and @code{DOT_PRODUCT}
>
> How about sorting those alphabetically and putting each on a separate line?
> This might make it more viewable. Just a suggestion.
I tried to group them somewhat logically, but you're right, this may be
better. Eventually, I want to document the UNSIGNED arguments to
all intrinsics so they are in the right place.
I think I will re-sort this after all intrinsics have been finished.
>> @end itemize
>> This list will grow in the near future.
>> @c ---------------------------------------------------------------------
>> diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc
>> index 32b31432e58..92a591cf6d7 100644
>> --- a/gcc/fortran/iresolve.cc
>> +++ b/gcc/fortran/iresolve.cc
>> @@ -175,9 +175,11 @@ resolve_bound (gfc_expr *f, gfc_expr *array, gfc_expr
>> *dim, gfc_expr *kind,
>> static void
>> resolve_transformational (const char *name, gfc_expr *f, gfc_expr *array,
>> - gfc_expr *dim, gfc_expr *mask)
>> + gfc_expr *dim, gfc_expr *mask,
>> + bool use_integer = false)
>> {
>> const char *prefix;
>> + bt type;
>>
>> f->ts = array->ts;
>>
>> @@ -200,9 +202,18 @@ resolve_transformational (const char *name, gfc_expr *f,
>> gfc_expr *array, gfc_resolve_dim_arg (dim);
>> }
>>
>> + /* For those intrinsic like SUM where we the integer version
>
> There is a verb missing here, IMO. ... where we _use_ the ... ???
This sentence no verb, correct :-)
>> + actually uses unsigned, but we call it as the integer
>> + version. */
>> +
>> + if (use_integer && array->ts.type == BT_UNSIGNED)
>> + type = BT_INTEGER;
>> + else
>> + type = array->ts.type;
>> +
>> f->value.function.name
>> = gfc_get_string (PREFIX ("%s%s_%c%d"), prefix, name,
>> - gfc_type_letter (array->ts.type),
>> + gfc_type_letter (type),
>> gfc_type_abi_kind (&array->ts));
>> }
>>
>
> Regards and thanks for the patch,
> Andre
Thanks!
Best regards
Thomas
More information about the Fortran
mailing list