[mlir] Use std::size instead of llvm::array_lengthof

LLVM contains a helpful function for getting the size of a C-style
array: `llvm::array_lengthof`. This is useful prior to C++17, but not as
helpful for C++17 or later: `std::size` already has support for C-style
arrays.

Change call sites to use `std::size` instead.

Differential Revision: https://reviews.llvm.org/D133387
This commit is contained in:
Joe Loser 2022-09-06 18:01:39 -06:00
parent 44bbf20965
commit e5a8f50ab1
3 changed files with 22 additions and 18 deletions

View File

@ -189,7 +189,7 @@ class Extension<list<I32EnumAttrCase> extensions> : Availability {
"}; " #
// The following manual ArrayRef constructor call is to satisfy GCC 5.
"ArrayRef<::mlir::spirv::Extension> " #
"ref(exts, ::llvm::array_lengthof(exts));");
"ref(exts, std::size(exts));");
let instance = "ref";
}
@ -231,7 +231,7 @@ class Capability<list<I32EnumAttrCase> capabilities> : Availability {
"}; " #
// The following manual ArrayRef constructor call is to satisfy GCC 5.
"ArrayRef<::mlir::spirv::Capability> " #
"ref(caps, ::llvm::array_lengthof(caps));");
"ref(caps, std::size(caps));");
let instance = "ref";
}

View File

@ -19,6 +19,8 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include <iterator>
using namespace mlir;
// Pull in all enum utility function definitions
@ -59,16 +61,16 @@ ArrayRef<spirv::Extension> spirv::getImpliedExtensions(spirv::Version version) {
case Version::V_1_3: {
// The following manual ArrayRef constructor call is to satisfy GCC 5.
static const Extension exts[] = {V_1_3_IMPLIED_EXTS};
return ArrayRef<spirv::Extension>(exts, llvm::array_lengthof(exts));
return ArrayRef<spirv::Extension>(exts, std::size(exts));
}
case Version::V_1_4: {
static const Extension exts[] = {V_1_3_IMPLIED_EXTS, V_1_4_IMPLIED_EXTS};
return ArrayRef<spirv::Extension>(exts, llvm::array_lengthof(exts));
return ArrayRef<spirv::Extension>(exts, std::size(exts));
}
case Version::V_1_5: {
static const Extension exts[] = {V_1_3_IMPLIED_EXTS, V_1_4_IMPLIED_EXTS,
V_1_5_IMPLIED_EXTS};
return ArrayRef<spirv::Extension>(exts, llvm::array_lengthof(exts));
return ArrayRef<spirv::Extension>(exts, std::size(exts));
}
}

View File

@ -17,6 +17,8 @@
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/TypeSwitch.h"
#include <iterator>
using namespace mlir;
using namespace mlir::spirv;
@ -174,7 +176,7 @@ void CompositeType::getCapabilities(
auto vecSize = getNumElements();
if (vecSize == 8 || vecSize == 16) {
static const Capability caps[] = {Capability::Vector16};
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps));
ArrayRef<Capability> ref(caps, std::size(caps));
capabilities.push_back(ref);
}
return type.getElementType().cast<ScalarType>().getCapabilities(
@ -248,7 +250,7 @@ void CooperativeMatrixNVType::getExtensions(
Optional<StorageClass> storage) {
getElementType().cast<SPIRVType>().getExtensions(extensions, storage);
static const Extension exts[] = {Extension::SPV_NV_cooperative_matrix};
ArrayRef<Extension> ref(exts, llvm::array_lengthof(exts));
ArrayRef<Extension> ref(exts, std::size(exts));
extensions.push_back(ref);
}
@ -257,7 +259,7 @@ void CooperativeMatrixNVType::getCapabilities(
Optional<StorageClass> storage) {
getElementType().cast<SPIRVType>().getCapabilities(capabilities, storage);
static const Capability caps[] = {Capability::CooperativeMatrixNV};
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps));
ArrayRef<Capability> ref(caps, std::size(caps));
capabilities.push_back(ref);
}
@ -316,7 +318,7 @@ void JointMatrixINTELType::getExtensions(
Optional<StorageClass> storage) {
getElementType().cast<SPIRVType>().getExtensions(extensions, storage);
static const Extension exts[] = {Extension::SPV_INTEL_joint_matrix};
ArrayRef<Extension> ref(exts, llvm::array_lengthof(exts));
ArrayRef<Extension> ref(exts, std::size(exts));
extensions.push_back(ref);
}
@ -325,7 +327,7 @@ void JointMatrixINTELType::getCapabilities(
Optional<StorageClass> storage) {
getElementType().cast<SPIRVType>().getCapabilities(capabilities, storage);
static const Capability caps[] = {Capability::JointMatrixINTEL};
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps));
ArrayRef<Capability> ref(caps, std::size(caps));
capabilities.push_back(ref);
}
@ -551,7 +553,7 @@ void RuntimeArrayType::getCapabilities(
Optional<StorageClass> storage) {
{
static const Capability caps[] = {Capability::Shader};
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps));
ArrayRef<Capability> ref(caps, std::size(caps));
capabilities.push_back(ref);
}
getElementType().cast<SPIRVType>().getCapabilities(capabilities, storage);
@ -600,7 +602,7 @@ void ScalarType::getExtensions(SPIRVType::ExtensionArrayRefVector &extensions,
case StorageClass::Uniform:
if (getIntOrFloatBitWidth() == 8) {
static const Extension exts[] = {Extension::SPV_KHR_8bit_storage};
ArrayRef<Extension> ref(exts, llvm::array_lengthof(exts));
ArrayRef<Extension> ref(exts, std::size(exts));
extensions.push_back(ref);
}
[[fallthrough]];
@ -608,7 +610,7 @@ void ScalarType::getExtensions(SPIRVType::ExtensionArrayRefVector &extensions,
case StorageClass::Output:
if (getIntOrFloatBitWidth() == 16) {
static const Extension exts[] = {Extension::SPV_KHR_16bit_storage};
ArrayRef<Extension> ref(exts, llvm::array_lengthof(exts));
ArrayRef<Extension> ref(exts, std::size(exts));
extensions.push_back(ref);
}
break;
@ -630,13 +632,13 @@ void ScalarType::getCapabilities(
case StorageClass::storage: { \
if (bitwidth == 8) { \
static const Capability caps[] = {Capability::cap8}; \
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps)); \
ArrayRef<Capability> ref(caps, std::size(caps)); \
capabilities.push_back(ref); \
return; \
} \
if (bitwidth == 16) { \
static const Capability caps[] = {Capability::cap16}; \
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps)); \
ArrayRef<Capability> ref(caps, std::size(caps)); \
capabilities.push_back(ref); \
return; \
} \
@ -657,7 +659,7 @@ void ScalarType::getCapabilities(
case StorageClass::Output: {
if (bitwidth == 16) {
static const Capability caps[] = {Capability::StorageInputOutput16};
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps));
ArrayRef<Capability> ref(caps, std::size(caps));
capabilities.push_back(ref);
return;
}
@ -675,7 +677,7 @@ void ScalarType::getCapabilities(
#define WIDTH_CASE(type, width) \
case width: { \
static const Capability caps[] = {Capability::type##width}; \
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps)); \
ArrayRef<Capability> ref(caps, std::size(caps)); \
capabilities.push_back(ref); \
} break
@ -1234,7 +1236,7 @@ void MatrixType::getCapabilities(
Optional<StorageClass> storage) {
{
static const Capability caps[] = {Capability::Matrix};
ArrayRef<Capability> ref(caps, llvm::array_lengthof(caps));
ArrayRef<Capability> ref(caps, std::size(caps));
capabilities.push_back(ref);
}
// Add any capabilities associated with the underlying vectors (i.e., columns)