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 Amini void registerTestInterfaces() { PassRegistration<TestTypeInterfaces>(); }
5172c65b69SAlexander Belyaev } // namespace test
522e2cdd0aSRiver Riddle } // namespace mlir
53