12e2cdd0aSRiver Riddle //===- TestInterfaces.cpp - Test interface generation and application -----===// 22e2cdd0aSRiver Riddle // 32e2cdd0aSRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42e2cdd0aSRiver Riddle // See https://llvm.org/LICENSE.txt for license information. 52e2cdd0aSRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62e2cdd0aSRiver Riddle // 72e2cdd0aSRiver Riddle //===----------------------------------------------------------------------===// 82e2cdd0aSRiver Riddle 92e2cdd0aSRiver Riddle #include "TestTypes.h" 10*36d3efeaSRiver Riddle #include "mlir/IR/BuiltinOps.h" 112e2cdd0aSRiver Riddle #include "mlir/Pass/Pass.h" 122e2cdd0aSRiver Riddle 132e2cdd0aSRiver Riddle using namespace mlir; 147776b19eSStephen Neuendorffer using namespace test; 152e2cdd0aSRiver Riddle 162e2cdd0aSRiver Riddle namespace { 172e2cdd0aSRiver Riddle /// This test checks various aspects of Type interface generation and 182e2cdd0aSRiver Riddle /// application. 192e2cdd0aSRiver Riddle struct TestTypeInterfaces 202e2cdd0aSRiver Riddle : public PassWrapper<TestTypeInterfaces, OperationPass<ModuleOp>> { MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID__anon0b36fc160111::TestTypeInterfaces215e50dd04SRiver Riddle MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestTypeInterfaces) 225e50dd04SRiver Riddle 23b5e22e6dSMehdi Amini StringRef getArgument() const final { return "test-type-interfaces"; } getDescription__anon0b36fc160111::TestTypeInterfaces24b5e22e6dSMehdi Amini StringRef getDescription() const final { 25b5e22e6dSMehdi Amini return "Test type interface support."; 26b5e22e6dSMehdi Amini } runOnOperation__anon0b36fc160111::TestTypeInterfaces272e2cdd0aSRiver Riddle void runOnOperation() override { 282e2cdd0aSRiver Riddle getOperation().walk([](Operation *op) { 292e2cdd0aSRiver Riddle for (Type type : op->getResultTypes()) { 302e2cdd0aSRiver Riddle if (auto testInterface = type.dyn_cast<TestTypeInterface>()) { 312e2cdd0aSRiver Riddle testInterface.printTypeA(op->getLoc()); 322e2cdd0aSRiver Riddle testInterface.printTypeB(op->getLoc()); 332e2cdd0aSRiver Riddle testInterface.printTypeC(op->getLoc()); 342e2cdd0aSRiver Riddle testInterface.printTypeD(op->getLoc()); 3588f25bdaSAlex Zinenko // Just check that we can assign the result to a variable of interface 3688f25bdaSAlex Zinenko // type. 3788f25bdaSAlex Zinenko TestTypeInterface result = testInterface.printTypeRet(op->getLoc()); 3888f25bdaSAlex Zinenko (void)result; 392e2cdd0aSRiver Riddle } 402e2cdd0aSRiver Riddle if (auto testType = type.dyn_cast<TestType>()) 412e2cdd0aSRiver Riddle testType.printTypeE(op->getLoc()); 422e2cdd0aSRiver Riddle } 432e2cdd0aSRiver Riddle }); 442e2cdd0aSRiver Riddle } 452e2cdd0aSRiver Riddle }; 46be0a7e9fSMehdi Amini } // namespace 472e2cdd0aSRiver Riddle 482e2cdd0aSRiver Riddle namespace mlir { 4972c65b69SAlexander Belyaev namespace test { registerTestInterfaces()50b5e22e6dSMehdi Aminivoid registerTestInterfaces() { PassRegistration<TestTypeInterfaces>(); } 5172c65b69SAlexander Belyaev } // namespace test 522e2cdd0aSRiver Riddle } // namespace mlir 53