Skip to content

Commit

Permalink
[flang] Don't needlessly instantiate distinct UNSIGNED cases for FIND…
Browse files Browse the repository at this point in the history
…LOC (#120471)

The FINDLOC runtime doesn't need to distinguish between INTEGER and
UNSIGNED data, so use the code for INTEGER also for UNSIGNED.
  • Loading branch information
klausler authored Dec 18, 2024
1 parent 6e8b3a3 commit 9f3a611
Showing 1 changed file with 3 additions and 18 deletions.
21 changes: 3 additions & 18 deletions flang/runtime/findloc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,14 +159,9 @@ struct NumericFindlocHelper {
Terminator &terminator) const {
switch (targetCat) {
case TypeCategory::Integer:
ApplyIntegerKind<
HELPER<CAT, KIND, TypeCategory::Integer>::template Functor, void>(
targetKind, terminator, result, x, target, kind, dim, mask, back,
terminator);
break;
case TypeCategory::Unsigned:
ApplyIntegerKind<
HELPER<CAT, KIND, TypeCategory::Unsigned>::template Functor, void>(
HELPER<CAT, KIND, TypeCategory::Integer>::template Functor, void>(
targetKind, terminator, result, x, target, kind, dim, mask, back,
terminator);
break;
Expand Down Expand Up @@ -235,13 +230,8 @@ void RTDEF(Findloc)(Descriptor &result, const Descriptor &x,
RUNTIME_CHECK(terminator, xType.has_value() && targetType.has_value());
switch (xType->first) {
case TypeCategory::Integer:
ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Integer,
TotalNumericFindlocHelper>::template Functor,
void>(xType->second, terminator, targetType->first, targetType->second,
result, x, target, kind, 0, mask, back, terminator);
break;
case TypeCategory::Unsigned:
ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Unsigned,
ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Integer,
TotalNumericFindlocHelper>::template Functor,
void>(xType->second, terminator, targetType->first, targetType->second,
result, x, target, kind, 0, mask, back, terminator);
Expand Down Expand Up @@ -331,13 +321,8 @@ void RTDEF(FindlocDim)(Descriptor &result, const Descriptor &x,
RUNTIME_CHECK(terminator, xType.has_value() && targetType.has_value());
switch (xType->first) {
case TypeCategory::Integer:
ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Integer,
PartialNumericFindlocHelper>::template Functor,
void>(xType->second, terminator, targetType->first, targetType->second,
result, x, target, kind, dim, mask, back, terminator);
break;
case TypeCategory::Unsigned:
ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Unsigned,
ApplyIntegerKind<NumericFindlocHelper<TypeCategory::Integer,
PartialNumericFindlocHelper>::template Functor,
void>(xType->second, terminator, targetType->first, targetType->second,
result, x, target, kind, dim, mask, back, terminator);
Expand Down

0 comments on commit 9f3a611

Please sign in to comment.