[flang-commits] [PATCH] D123520: [flang] Fix UBOUND() folding for constant arrays
Jean Perier via Phabricator via flang-commits
flang-commits at lists.llvm.org
Thu Apr 14 06:45:38 PDT 2022
jeanPerier added inline comments.
================
Comment at: flang/lib/Evaluate/fold-integer.cpp:22
// array that devolves to a type of Constant<T>
-class GetConstantArrayLboundHelper {
+template <typename HelperType> class GetConstantArrayBoundHelper {
public:
----------------
I think the template makes this helper class interface a bit too complex for what it does. I am not sure it is worth making this a template parameter (templates are nice, but they have f18 compile time cost and f18 executable size costs, in this case, I do not think the template adds a lot of type safety).
What about doing having an interface like:
`static Expr<T> GetConstantArrayBound::GetLbound(const Expr<SomeType>&, std::optional<int> dim);`
and
`static Expr<T> GetConstantArrayBound::GetUbound(const Expr<SomeType>&, std::optional<int> dim);`
with the implementation looking something like:
```
template <typename T>
Expr<T> PackageConstantBounds(
const ConstantSubscripts &&bounds, bool asScalar = false) {
// .... like PackageConstant, but returns Expr<T>
}
class GetConstantArrayBound {
public:
static Expr<T> GetConstantArrayBound::GetLbound(const Expr<SomeType>& array, std::optional<ConstantSubscript> dim) {
return PackageConstantBounds<T>(GetConstantArrayBound(dim, /*getLbound=*/true)::Get(array), dim.has_value());
}
//... same for GetUbound
private:
// Private ctor ...
ConstantSubscripts Get(const Constant<T> &x) {
if (getLbound) {
// Return the lower bound
if (dim_) {
return {x.lbounds().at(*dim_)};
} else {
return x.lbounds();
}
} else {
return x.ComputeUbounds(dim_);
}
}
// Deal with the const Parentheses<T> &x. (return ones for lbouds, and the left operand shape for ubound).
const std::optional<ConstantSubscript> dim_;
const bool getLBound_;
}
}
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D123520/new/
https://reviews.llvm.org/D123520
More information about the flang-commits
mailing list