Replace constexpr MemRefType::kDynamicStrideOrOffset by a MemRefType:;getDynamicStrideOrOffset() method - NFC
This fixes global ODR-use issues, some of which manifest in Parser.cpp.
Fixes #167.
PiperOrigin-RevId: 272886347
diff --git a/include/mlir/IR/StandardTypes.h b/include/mlir/IR/StandardTypes.h
index c2c230e..f314fdb 100644
--- a/include/mlir/IR/StandardTypes.h
+++ b/include/mlir/IR/StandardTypes.h
@@ -367,8 +367,9 @@
/// Returns the memory space in which data referred to by this memref resides.
unsigned getMemorySpace() const;
- static constexpr int64_t kDynamicStrideOrOffset =
- std::numeric_limits<int64_t>::min();
+ static int64_t getDynamicStrideOrOffset() {
+ return std::numeric_limits<int64_t>::min();
+ }
static bool kindof(unsigned kind) { return kind == StandardTypes::MemRef; }
@@ -477,7 +478,7 @@
/// where K and ki's are constants or symbols.
///
/// A stride specification is a list of integer values that are either static
-/// or dynamic (encoded with kDynamicStrideOrOffset). Strides encode the
+/// or dynamic (encoded with getDynamicStrideOrOffset()). Strides encode the
/// distance in the number of elements between successive entries along a
/// particular dimension. For example, `memref<42x16xf32, (64 * d0 + d1)>`
/// specifies a view into a non-contiguous memory region of `42` by `16` `f32`
@@ -494,7 +495,7 @@
SmallVectorImpl<int64_t> &strides,
int64_t &offset);
-/// Given a list of strides (in which MemRefType::kDynamicStrideOrOffset
+/// Given a list of strides (in which MemRefType::getDynamicStrideOrOffset()
/// represents a dynamic value), return the single result AffineMap which
/// represents the linearized strided layout map. Dimensions correspond to the
/// offset followed by the strides in order. Symbols are inserted for each
diff --git a/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp b/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp
index c4bf7cd..ef48950 100644
--- a/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp
+++ b/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp
@@ -578,7 +578,7 @@
// Dynamic strides are ok if they can be deduced from dynamic sizes (which
// is guaranteed when succeeded(successStrides)). Dynamic offset however can
// never be alloc'ed.
- if (offset == MemRefType::kDynamicStrideOrOffset)
+ if (offset == MemRefType::getDynamicStrideOrOffset())
return matchFailure();
return matchSuccess();
@@ -655,7 +655,7 @@
auto successStrides = getStridesAndOffset(type, strides, offset);
assert(succeeded(successStrides) && "unexpected non-strided memref");
(void)successStrides;
- assert(offset != MemRefType::kDynamicStrideOrOffset &&
+ assert(offset != MemRefType::getDynamicStrideOrOffset() &&
"unexpected dynamic offset");
// 0-D memref corner case: they have size 1 ...
@@ -688,7 +688,7 @@
SmallVector<Value *, 4> strideValues(nStrides, nullptr);
for (auto indexedStride : llvm::enumerate(llvm::reverse(strides))) {
int64_t index = nStrides - 1 - indexedStride.index();
- if (strides[index] == MemRefType::kDynamicStrideOrOffset)
+ if (strides[index] == MemRefType::getDynamicStrideOrOffset())
// Identity layout map is enforced in the match function, so we compute:
// `runningStride *= sizes[index]`
runningStride = runningStride
@@ -920,14 +920,14 @@
loc, elementTypePtr, memRefDescriptor,
rewriter.getIndexArrayAttr(kPtrPosInMemRefDescriptor));
Value *offsetValue =
- offset == MemRefType::kDynamicStrideOrOffset
+ offset == MemRefType::getDynamicStrideOrOffset()
? rewriter.create<LLVM::ExtractValueOp>(
loc, indexTy, memRefDescriptor,
rewriter.getIndexArrayAttr(kOffsetPosInMemRefDescriptor))
: this->createIndexConstant(rewriter, loc, offset);
for (int i = 0, e = indices.size(); i < e; ++i) {
Value *stride;
- if (strides[i] != MemRefType::kDynamicStrideOrOffset) {
+ if (strides[i] != MemRefType::getDynamicStrideOrOffset()) {
// Use static stride.
auto attr =
rewriter.getIntegerAttr(rewriter.getIndexType(), strides[i]);
diff --git a/lib/IR/StandardTypes.cpp b/lib/IR/StandardTypes.cpp
index d715fa3..54f39a3 100644
--- a/lib/IR/StandardTypes.cpp
+++ b/lib/IR/StandardTypes.cpp
@@ -453,14 +453,14 @@
seen[pos] = true;
return;
}
- if (strides[pos] != MemRefType::kDynamicStrideOrOffset)
+ if (strides[pos] != MemRefType::getDynamicStrideOrOffset())
// Already seen case accumulates unless they are already saturated.
strides[pos] += val;
}
// This sums multiple offsets as they are seen. In the particular case of
// accumulating a dynamic offset with either a static of dynamic one, this
-// saturates to MemRefType::kDynamicStrideOrOffset.
+// saturates to MemRefType::getDynamicStrideOrOffset().
static void accumulateOffset(int64_t &offset, bool &seenOffset, int64_t val) {
if (!seenOffset) {
// Newly seen case, sets value
@@ -468,7 +468,7 @@
seenOffset = true;
return;
}
- if (offset != MemRefType::kDynamicStrideOrOffset)
+ if (offset != MemRefType::getDynamicStrideOrOffset())
// Already seen case accumulates unless they are already saturated.
offset += val;
}
@@ -501,7 +501,7 @@
}
auto cst = bin.getRHS().dyn_cast<AffineConstantExpr>();
if (!cst) {
- strides[dim.getPosition()] = MemRefType::kDynamicStrideOrOffset;
+ strides[dim.getPosition()] = MemRefType::getDynamicStrideOrOffset();
seen[dim.getPosition()] = true;
} else {
accumulateStrides(strides, seen, dim.getPosition(), cst.getValue());
@@ -515,7 +515,7 @@
accumulateOffset(offset, seenOffset, cst.getValue());
} else if (auto sym = e.dyn_cast<AffineSymbolExpr>()) {
// Independent symbols saturate.
- offset = MemRefType::kDynamicStrideOrOffset;
+ offset = MemRefType::getDynamicStrideOrOffset();
seenOffset = true;
} else if (auto dim = e.dyn_cast<AffineDimExpr>()) {
// Independent symbols cumulate 1.
@@ -542,7 +542,7 @@
}
if (auto sym = e.dyn_cast<AffineSymbolExpr>()) {
assert(!seenOffset && "unexpected `seen` bit with single term");
- offset = MemRefType::kDynamicStrideOrOffset;
+ offset = MemRefType::getDynamicStrideOrOffset();
seenOffset = true;
return;
}
@@ -670,7 +670,7 @@
// AffineExpr for offset.
// Static case.
- if (offset != MemRefType::kDynamicStrideOrOffset) {
+ if (offset != MemRefType::getDynamicStrideOrOffset()) {
auto cst = getAffineConstantExpr(offset, context);
expr = cst;
} else {
@@ -687,7 +687,7 @@
auto d = getAffineDimExpr(dim, context);
AffineExpr mult;
// Static case.
- if (stride != MemRefType::kDynamicStrideOrOffset)
+ if (stride != MemRefType::getDynamicStrideOrOffset())
mult = getAffineConstantExpr(stride, context);
else
// Dynamic case, new symbol for each new stride.
diff --git a/lib/Parser/Parser.cpp b/lib/Parser/Parser.cpp
index 4cb3569..3f9c371 100644
--- a/lib/Parser/Parser.cpp
+++ b/lib/Parser/Parser.cpp
@@ -656,7 +656,7 @@
if (!maybeOffset && !question)
return emitError("invalid offset");
offset = maybeOffset ? static_cast<int64_t>(maybeOffset.getValue())
- : MemRefType::kDynamicStrideOrOffset;
+ : MemRefType::getDynamicStrideOrOffset();
consumeToken();
if (!consumeIf(Token::comma))
@@ -996,7 +996,7 @@
return success();
while (true) {
if (consumeIf(Token::question)) {
- dimensions.push_back(MemRefType::kDynamicStrideOrOffset);
+ dimensions.push_back(MemRefType::getDynamicStrideOrOffset());
} else {
// This must be an integer value.
int64_t val;
diff --git a/test/lib/Transforms/TestMemRefStrideCalculation.cpp b/test/lib/Transforms/TestMemRefStrideCalculation.cpp
index 334a3f3..40788b2 100644
--- a/test/lib/Transforms/TestMemRefStrideCalculation.cpp
+++ b/test/lib/Transforms/TestMemRefStrideCalculation.cpp
@@ -43,13 +43,13 @@
return;
}
llvm::outs() << "MemRefType offset: ";
- if (offset == MemRefType::kDynamicStrideOrOffset)
+ if (offset == MemRefType::getDynamicStrideOrOffset())
llvm::outs() << "?";
else
llvm::outs() << offset;
llvm::outs() << " strides: ";
interleaveComma(strides, llvm::outs(), [&](int64_t v) {
- if (v == MemRefType::kDynamicStrideOrOffset)
+ if (v == MemRefType::getDynamicStrideOrOffset())
llvm::outs() << "?";
else
llvm::outs() << v;