//===- TestDecomposeCallGraphTypes.cpp - Test CG type decomposition -------===// // // 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 "TestDialect.h" #include "TestOps.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Func/Transforms/DecomposeCallGraphTypes.h" #include "mlir/IR/Builders.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/DialectConversion.h" usingnamespacemlir; namespace { /// Creates a sequence of `test.get_tuple_element` ops for all elements of a /// given tuple value. If some tuple elements are, in turn, tuples, the elements /// of those are extracted recursively such that the returned values have the /// same types as `resultTypes.getFlattenedTypes()`. static LogicalResult buildDecomposeTuple(OpBuilder &builder, Location loc, TupleType resultType, Value value, SmallVectorImpl<Value> &values) { … } /// Creates a `test.make_tuple` op out of the given inputs building a tuple of /// type `resultType`. If that type is nested, each nested tuple is built /// recursively with another `test.make_tuple` op. static std::optional<Value> buildMakeTupleOp(OpBuilder &builder, TupleType resultType, ValueRange inputs, Location loc) { … } /// A pass for testing call graph type decomposition. /// /// This instantiates the patterns with a TypeConverter and ValueDecomposer /// that splits tuple types into their respective element types. /// For example, `tuple<T1, T2, T3> --> T1, T2, T3`. struct TestDecomposeCallGraphTypes : public PassWrapper<TestDecomposeCallGraphTypes, OperationPass<ModuleOp>> { … }; } // namespace namespace mlir { namespace test { void registerTestDecomposeCallGraphTypes() { … } } // namespace test } // namespace mlir