/// no IndexAttr and that IndexType have no bitwidth.
bool isEqualConstantIntOrValue(OpFoldResult ofr1, OpFoldResult ofr2);
+/// Helper function to convert a vector of `OpFoldResult`s into a vector of
+/// `Value`s. For each `OpFoldResult` in `valueOrAttrVec` return the fold result
+/// if it casts to a `Value` or create an index-type constant if it casts to
+/// `IntegerAttr`. No other attribute types are supported.
+SmallVector<Value> getAsValues(OpBuilder &b, Location loc,
+ ArrayRef<OpFoldResult> valueOrAttrVec);
+
} // namespace mlir
#endif // MLIR_DIALECT_UTILS_STATICVALUEUTILS_H
#include "mlir/Dialect/Tensor/IR/TensorInferTypeOpInterfaceImpl.h"
#include "mlir/Dialect/Affine/IR/AffineOps.h"
-#include "mlir/Dialect/Arithmetic/Utils/Utils.h"
#include "mlir/Dialect/Tensor/IR/Tensor.h"
+#include "mlir/Dialect/Utils/StaticValueUtils.h"
#include "mlir/Interfaces/InferTypeOpInterface.h"
using namespace mlir;
builder, loc, src, dstStaticShape, reassocation);
}
-/// Helper function to convert a vector of `OpFoldResult`s into a vector of
-/// `Value`s.
-static SmallVector<Value> getAsValues(OpBuilder &b, Location loc,
- ArrayRef<OpFoldResult> valueOrAttrVec) {
- return llvm::to_vector<4>(
- llvm::map_range(valueOrAttrVec, [&](OpFoldResult value) -> Value {
- return getValueOrCreateConstantIndexOp(b, loc, value);
- }));
-}
-
template <typename OpTy>
struct ReifyExpandOrCollapseShapeOp
: public ReifyRankedShapedTypeOpInterface::ExternalModel<
StaticValueUtils.cpp
LINK_LIBS PUBLIC
+ MLIRArithmeticUtils
MLIRIR
)
//===----------------------------------------------------------------------===//
#include "mlir/Dialect/Utils/StaticValueUtils.h"
+#include "mlir/Dialect/Arithmetic/Utils/Utils.h"
#include "mlir/IR/Matchers.h"
#include "mlir/Support/LLVM.h"
#include "llvm/ADT/APSInt.h"
auto v1 = ofr1.dyn_cast<Value>(), v2 = ofr2.dyn_cast<Value>();
return v1 && v1 == v2;
}
+
+/// Helper function to convert a vector of `OpFoldResult`s into a vector of
+/// `Value`s. For each `OpFoldResult` in `valueOrAttrVec` return the fold result
+/// if it casts to a `Value` or create an index-type constant if it casts to
+/// `IntegerAttr`. No other attribute types are supported.
+SmallVector<Value> getAsValues(OpBuilder &b, Location loc,
+ ArrayRef<OpFoldResult> valueOrAttrVec) {
+ return llvm::to_vector<4>(
+ llvm::map_range(valueOrAttrVec, [&](OpFoldResult value) -> Value {
+ return getValueOrCreateConstantIndexOp(b, loc, value);
+ }));
+}
} // namespace mlir