//===- TestLivenessAnalysis.cpp - Test liveness analysis ------------------===// // // 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 // //===----------------------------------------------------------------------===// #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace mlir; using namespace mlir::dataflow; namespace { struct TestLivenessAnalysisPass : public PassWrapper> { MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestLivenessAnalysisPass) StringRef getArgument() const override { return "test-liveness-analysis"; } void runOnOperation() override { auto &livenessAnalysis = getAnalysis(); Operation *op = getOperation(); raw_ostream &os = llvm::outs(); op->walk([&](Operation *op) { auto tag = op->getAttrOfType("tag"); if (!tag) return; os << "test_tag: " << tag.getValue() << ":\n"; for (auto [index, operand] : llvm::enumerate(op->getOperands())) { const Liveness *liveness = livenessAnalysis.getLiveness(operand); assert(liveness && "expected a sparse lattice"); os << " operand #" << index << ": "; liveness->print(os); os << "\n"; } for (auto [index, operand] : llvm::enumerate(op->getResults())) { const Liveness *liveness = livenessAnalysis.getLiveness(operand); assert(liveness && "expected a sparse lattice"); os << " result #" << index << ": "; liveness->print(os); os << "\n"; } }); } }; } // end anonymous namespace namespace mlir { namespace test { void registerTestLivenessAnalysisPass() { PassRegistration(); } } // end namespace test } // end namespace mlir