Files
gps/tools/local/circt/include/mlir/IR/Unit.h
T
2026-07-12 11:01:51 +03:00

56 lines
1.5 KiB
C++

//===- Unit.h - IR Unit definition--------------------*- 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_IR_UNIT_H
#define MLIR_IR_UNIT_H
#include "mlir/IR/OperationSupport.h"
#include "llvm/ADT/PointerUnion.h"
#include "llvm/Support/raw_ostream.h"
namespace llvm {
class raw_ostream;
} // namespace llvm
namespace mlir {
class Operation;
class Region;
class Block;
class Value;
/// IRUnit is a union of the different types of IR objects that constitute the
/// IR structure (other than Type and Attribute), that is Operation, Region, and
/// Block.
class IRUnit : public PointerUnion<Operation *, Region *, Block *, Value> {
public:
using PointerUnion::PointerUnion;
/// Print the IRUnit to the given stream.
void print(raw_ostream &os,
OpPrintingFlags flags =
OpPrintingFlags().skipRegions().useLocalScope()) const;
};
raw_ostream &operator<<(raw_ostream &os, const IRUnit &unit);
} // end namespace mlir
namespace llvm {
// Allow llvm::cast style functions.
template <typename To>
struct CastInfo<To, mlir::IRUnit>
: public CastInfo<To, mlir::IRUnit::PointerUnion> {};
template <typename To>
struct CastInfo<To, const mlir::IRUnit>
: public CastInfo<To, const mlir::IRUnit::PointerUnion> {};
} // namespace llvm
#endif // MLIR_IR_UNIT_H