[Mlir-commits] [mlir] [mlir][GPU] Implement ValueBoundsOpInterface for GPU ID operations (PR #122190)
Matthias Springer
llvmlistbot at llvm.org
Thu Jan 9 00:45:59 PST 2025
================
@@ -0,0 +1,114 @@
+//===- ValueBoundsOpInterfaceImpl.cpp - Impl. of ValueBoundsOpInterface ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "mlir/Dialect/GPU/IR/ValueBoundsOpInterfaceImpl.h"
+
+#include "mlir/Dialect/GPU/IR/GPUDialect.h"
+#include "mlir/Interfaces/InferIntRangeInterface.h"
+#include "mlir/Interfaces/ValueBoundsOpInterface.h"
+
+using namespace mlir;
+using namespace mlir::gpu;
+
+namespace {
+/// Implement ValueBoundsOpInterface (which only works on index-typed values,
+/// gathers a set of constraint expressions, and is used for affine analyses)
+/// in terms of InferIntRangeInterface (which works
+/// on arbitrary integer types, creates [min, max] ranges, and is used in for
+/// arithmetic simplification).
+template <typename Op>
+struct GpuIdOpInterface
+ : public ValueBoundsOpInterface::ExternalModel<GpuIdOpInterface<Op>, Op> {
+ void populateBoundsForIndexValue(Operation *op, Value value,
+ ValueBoundsConstraintSet &cstr) const {
+ auto inferrable = cast<InferIntRangeInterface>(op);
+ assert(value == op->getResult(0) &&
+ "inferring for value that isn't the GPU op's result");
+ auto translateConstraint = [&](Value v, const ConstantIntRanges &range) {
+ assert(v == value &&
+ "GPU ID op inferring values for something that's not its result");
+ cstr.bound(v) >= range.smin().getSExtValue();
+ cstr.bound(v) <= range.smax().getSExtValue();
+ };
+ // No arguments, so we don't need to pass in their ranges.
----------------
matthias-springer wrote:
Would it make sense to add an `assert(op->getNumOperands() == 0 && "expected op with no operands");`?
https://github.com/llvm/llvm-project/pull/122190
More information about the Mlir-commits
mailing list