//===- Liveness.h - Liveness analysis for MLIR ------------------*- 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 // //===----------------------------------------------------------------------===// // // This file contains an analysis for computing liveness information from a // given top-level operation. The current version of the analysis uses a // traditional algorithm to resolve detailed live-range information about all // values within the specified regions. It is also possible to query liveness // information on block level. // //===----------------------------------------------------------------------===// #ifndef MLIR_ANALYSIS_LIVENESS_H #define MLIR_ANALYSIS_LIVENESS_H #include <vector> #include "mlir/Support/LLVM.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallPtrSet.h" namespace mlir { class Block; class LivenessBlockInfo; class Operation; class Region; class Value; /// Represents an analysis for computing liveness information from a /// given top-level operation. The analysis iterates over all associated /// regions that are attached to the given top-level operation. It /// computes liveness information for every value and block that are /// included in the mentioned regions. It relies on a fixpoint iteration /// to compute all live-in and live-out values of all included blocks. /// Sample usage: /// Liveness liveness(topLevelOp); /// auto &allInValues = liveness.getLiveIn(block); /// auto &allOutValues = liveness.getLiveOut(block); /// auto allOperationsInWhichValueIsLive = liveness.resolveLiveness(value); /// bool isDeafAfter = liveness.isDeadAfter(value, operation); class Liveness { … }; /// This class represents liveness information on block level. class LivenessBlockInfo { … }; } // namespace mlir #endif // MLIR_ANALYSIS_LIVENESS_H