[mlir] NFC - Add some more static value utils
authorNicolas Vasilache <nicolas.vasilache@gmail.com>
Fri, 10 Mar 2023 13:35:44 +0000 (05:35 -0800)
committerNicolas Vasilache <nicolas.vasilache@gmail.com>
Sun, 12 Mar 2023 15:25:52 +0000 (08:25 -0700)
Differential Revision: https://reviews.llvm.org/D145875

mlir/include/mlir/Dialect/Utils/StaticValueUtils.h
mlir/lib/Dialect/Utils/StaticValueUtils.cpp

index c97c0834f588df40752a042837ec7e6a45f9646d..2be3e74c62dd232d5b157fb94bb9c9753b9cccf3 100644 (file)
@@ -63,14 +63,18 @@ SmallVector<int64_t, 4> extractFromI64ArrayAttr(Attribute attr);
 /// Given a value, try to extract a constant Attribute. If this fails, return
 /// the original value.
 OpFoldResult getAsOpFoldResult(Value val);
-
 /// Given an array of values, try to extract a constant Attribute from each
 /// value. If this fails, return the original value.
 SmallVector<OpFoldResult> getAsOpFoldResult(ValueRange values);
-
 /// Convert `arrayAttr` to a vector of OpFoldResult.
 SmallVector<OpFoldResult> getAsOpFoldResult(ArrayAttr arrayAttr);
 
+/// Convert int64_t to integer attributes of index type and return them as
+/// OpFoldResult.
+OpFoldResult getAsIndexOpFoldResult(MLIRContext *ctx, int64_t val);
+SmallVector<OpFoldResult> getAsIndexOpFoldResult(MLIRContext *ctx,
+                                                 ArrayRef<int64_t> values);
+
 /// If ofr is a constant integer or an IntegerAttr, return the integer.
 std::optional<int64_t> getConstantIntValue(OpFoldResult ofr);
 
index 5a4b7ea4f98810d850aaa590370c381d2812e17e..bf80acb754dd7cb298ca96c5a0e8e1bd6ed96482 100644 (file)
@@ -102,6 +102,16 @@ SmallVector<OpFoldResult> getAsOpFoldResult(ArrayAttr arrayAttr) {
   return res;
 }
 
+OpFoldResult getAsIndexOpFoldResult(MLIRContext *ctx, int64_t val) {
+  return IntegerAttr::get(IndexType::get(ctx), val);
+}
+
+SmallVector<OpFoldResult> getAsIndexOpFoldResult(MLIRContext *ctx,
+                                                 ArrayRef<int64_t> values) {
+  return llvm::to_vector<4>(llvm::map_range(
+      values, [ctx](int64_t v) { return getAsIndexOpFoldResult(ctx, v); }));
+}
+
 /// If ofr is a constant integer or an IntegerAttr, return the integer.
 std::optional<int64_t> getConstantIntValue(OpFoldResult ofr) {
   // Case 1: Check for Constant integer.