[Mlir-commits] [mlir] mlir/Presburger: contribute a free-standing parser (PR #94916)
Kunwar Grover
llvmlistbot at llvm.org
Mon Jul 8 00:57:23 PDT 2024
================
@@ -0,0 +1,345 @@
+//===- ParseStructs.h - Presburger Parse Structrures ------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MLIR_ANALYSIS_PRESBURGER_PARSER_PARSESTRUCTS_H
+#define MLIR_ANALYSIS_PRESBURGER_PARSER_PARSESTRUCTS_H
+
+#include "mlir/Analysis/Presburger/IntegerRelation.h"
+#include "mlir/Analysis/Presburger/PresburgerSpace.h"
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallVector.h"
+#include <cstdint>
+
+namespace mlir::presburger {
+using llvm::ArrayRef;
+using llvm::SmallVector;
+using llvm::SmallVectorImpl;
+
+/// This structure is central to the parser and flattener, and holds the number
+/// of dimensions, symbols, locals, and the constant term.
+struct ParseInfo {
+ unsigned numDims = 0;
+ unsigned numSymbols = 0;
+ unsigned numExprs = 0;
+ unsigned numDivs = 0;
+
+ constexpr unsigned getDimStartIdx() const { return 0; }
+ constexpr unsigned getSymbolStartIdx() const { return numDims; }
+ constexpr unsigned getLocalVarStartIdx() const {
+ return numDims + numSymbols;
+ }
+ constexpr unsigned getNumCols() const {
+ return numDims + numSymbols + numDivs + 1;
+ }
+ constexpr unsigned getConstantIdx() const { return getNumCols() - 1; }
+
+ constexpr bool isDimIdx(unsigned i) const { return i < getSymbolStartIdx(); }
+ constexpr bool isSymbolIdx(unsigned i) const {
+ return i >= getSymbolStartIdx() && i < getLocalVarStartIdx();
+ }
+ constexpr bool isLocalVarIdx(unsigned i) const {
+ return i >= getLocalVarStartIdx() && i < getConstantIdx();
+ }
+ constexpr bool isConstantIdx(unsigned i) const {
+ return i == getConstantIdx();
+ }
+};
+
+/// Helper for storing coefficients in canonical form: dims followed by symbols,
+/// followed by locals, and finally the constant term.
+///
+/// (x, y)[a, b]: y * 91 + x + 3 * a + 7
+/// coefficients: [1, 91, 3, 0, 7]
+struct CoefficientVector {
----------------
Groverkss wrote:
Regarding resizing, this parser is only used for tests. For anything worthy of being optimized, a user should directly construct what they want. I would prefer simplicity over optimizations for now.
https://github.com/llvm/llvm-project/pull/94916
More information about the Mlir-commits
mailing list