brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 58c1d27 Raw
63 lines · cpp
1//===- Unit.cpp - Support for manipulating IR Unit ------------------------===//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#include "mlir/IR/Unit.h"10#include "mlir/IR/Operation.h"11#include "mlir/IR/OperationSupport.h"12#include "mlir/IR/Region.h"13#include "llvm/Support/raw_ostream.h"14#include <iterator>15 16using namespace mlir;17 18static void printOp(llvm::raw_ostream &os, Operation *op,19                    OpPrintingFlags &flags) {20  if (!op) {21    os << "<Operation:nullptr>";22    return;23  }24  op->print(os, flags);25}26 27static void printRegion(llvm::raw_ostream &os, Region *region,28                        OpPrintingFlags &flags) {29  if (!region) {30    os << "<Region:nullptr>";31    return;32  }33  os << "Region #" << region->getRegionNumber() << " for op ";34  printOp(os, region->getParentOp(), flags);35}36 37static void printBlock(llvm::raw_ostream &os, Block *block,38                       OpPrintingFlags &flags) {39  Region *region = block->getParent();40  Block *entry = &region->front();41  int blockId = std::distance(entry->getIterator(), block->getIterator());42  os << "Block #" << blockId << " for ";43  bool shouldSkipRegions = flags.shouldSkipRegions();44  printRegion(os, region, flags.skipRegions());45  if (!shouldSkipRegions)46    block->print(os);47}48 49void mlir::IRUnit::print(llvm::raw_ostream &os, OpPrintingFlags flags) const {50  if (auto *op = llvm::dyn_cast_if_present<Operation *>(*this))51    return printOp(os, op, flags);52  if (auto *region = llvm::dyn_cast_if_present<Region *>(*this))53    return printRegion(os, region, flags);54  if (auto *block = llvm::dyn_cast_if_present<Block *>(*this))55    return printBlock(os, block, flags);56  llvm_unreachable("unknown IRUnit");57}58 59llvm::raw_ostream &mlir::operator<<(llvm::raw_ostream &os, const IRUnit &unit) {60  unit.print(os);61  return os;62}63