brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 262617d Raw
58 lines · c
1//===- IntegerSetDetail.h - MLIR IntegerSet storage details -----*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This holds implementation details of IntegerSet.10//11//===----------------------------------------------------------------------===//12 13#ifndef INTEGERSETDETAIL_H_14#define INTEGERSETDETAIL_H_15 16#include "mlir/IR/AffineExpr.h"17#include "mlir/Support/StorageUniquer.h"18#include "llvm/ADT/ArrayRef.h"19 20namespace mlir {21namespace detail {22 23struct IntegerSetStorage : public StorageUniquer::BaseStorage {24  /// The hash key used for uniquing.25  using KeyTy =26      std::tuple<unsigned, unsigned, ArrayRef<AffineExpr>, ArrayRef<bool>>;27 28  unsigned dimCount;29  unsigned symbolCount;30 31  /// Array of affine constraints: a constraint is either an equality32  /// (affine_expr == 0) or an inequality (affine_expr >= 0).33  ArrayRef<AffineExpr> constraints;34 35  // Bits to check whether a constraint is an equality or an inequality.36  ArrayRef<bool> eqFlags;37 38  bool operator==(const KeyTy &key) const {39    return std::get<0>(key) == dimCount && std::get<1>(key) == symbolCount &&40           std::get<2>(key) == constraints && std::get<3>(key) == eqFlags;41  }42 43  static IntegerSetStorage *44  construct(StorageUniquer::StorageAllocator &allocator, const KeyTy &key) {45    auto *res =46        new (allocator.allocate<IntegerSetStorage>()) IntegerSetStorage();47    res->dimCount = std::get<0>(key);48    res->symbolCount = std::get<1>(key);49    res->constraints = allocator.copyInto(std::get<2>(key));50    res->eqFlags = allocator.copyInto(std::get<3>(key));51    return res;52  }53};54 55} // namespace detail56} // namespace mlir57#endif // INTEGERSETDETAIL_H_58