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

60 lines
2.1 KiB
C++

//===- WalkResult.h - Status of completed walk ------------------*- 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
//
//===----------------------------------------------------------------------===//
//
// Result kind for completed walk.
//
//===----------------------------------------------------------------------===//
#ifndef MLIR_SUPPORT_WALKRESULT_H
#define MLIR_SUPPORT_WALKRESULT_H
#include "mlir/Support/LLVM.h"
namespace mlir {
class Diagnostic;
class InFlightDiagnostic;
/// A utility result that is used to signal how to proceed with an ongoing walk:
/// * Interrupt: the walk will be interrupted and no more operations, regions
/// or blocks will be visited.
/// * Advance: the walk will continue.
/// * Skip: the walk of the current operation, region or block and their
/// nested elements that haven't been visited already will be skipped and will
/// continue with the next operation, region or block.
class WalkResult {
enum ResultEnum { Interrupt, Advance, Skip } result;
public:
WalkResult(ResultEnum result = Advance) : result(result) {}
/// Allow LogicalResult to interrupt the walk on failure.
WalkResult(LogicalResult result)
: result(failed(result) ? Interrupt : Advance) {}
/// Allow diagnostics to interrupt the walk.
WalkResult(Diagnostic &&) : result(Interrupt) {}
WalkResult(InFlightDiagnostic &&) : result(Interrupt) {}
bool operator==(const WalkResult &rhs) const { return result == rhs.result; }
bool operator!=(const WalkResult &rhs) const { return result != rhs.result; }
static WalkResult interrupt() { return {Interrupt}; }
static WalkResult advance() { return {Advance}; }
static WalkResult skip() { return {Skip}; }
/// Returns true if the walk was interrupted.
bool wasInterrupted() const { return result == Interrupt; }
/// Returns true if the walk was skipped.
bool wasSkipped() const { return result == Skip; }
};
} // namespace mlir
#endif