1c0b3abd1Sahmedsabie //===- TestTraits.cpp - Test trait folding --------------------------------===// 2c0b3abd1Sahmedsabie // 3c0b3abd1Sahmedsabie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4c0b3abd1Sahmedsabie // See https://llvm.org/LICENSE.txt for license information. 5c0b3abd1Sahmedsabie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6c0b3abd1Sahmedsabie // 7c0b3abd1Sahmedsabie //===----------------------------------------------------------------------===// 8c0b3abd1Sahmedsabie 9e95e94adSJeff Niu #include "TestOps.h" 10c0b3abd1Sahmedsabie #include "mlir/Pass/Pass.h" 11b6eb26fdSRiver Riddle #include "mlir/Transforms/GreedyPatternRewriteDriver.h" 12c0b3abd1Sahmedsabie 13c0b3abd1Sahmedsabie using namespace mlir; 147776b19eSStephen Neuendorffer using namespace test; 15c0b3abd1Sahmedsabie 16c0b3abd1Sahmedsabie //===----------------------------------------------------------------------===// 17c0b3abd1Sahmedsabie // Trait Folder. 18c0b3abd1Sahmedsabie //===----------------------------------------------------------------------===// 19c0b3abd1Sahmedsabie 20c0b3abd1Sahmedsabie OpFoldResult TestInvolutionTraitFailingOperationFolderOp::fold( 217df76121SMarkus Böck FoldAdaptor adaptor) { 22c0b3abd1Sahmedsabie // This failure should cause the trait fold to run instead. 23c0b3abd1Sahmedsabie return {}; 24c0b3abd1Sahmedsabie } 25c0b3abd1Sahmedsabie 26c0b3abd1Sahmedsabie OpFoldResult TestInvolutionTraitSuccesfulOperationFolderOp::fold( 277df76121SMarkus Böck FoldAdaptor adaptor) { 28b6eb26fdSRiver Riddle auto argumentOp = getOperand(); 29c0b3abd1Sahmedsabie // The success case should cause the trait fold to be supressed. 30b6eb26fdSRiver Riddle return argumentOp.getDefiningOp() ? argumentOp : OpFoldResult{}; 31c0b3abd1Sahmedsabie } 32c0b3abd1Sahmedsabie 33c0b3abd1Sahmedsabie namespace { 3441574554SRiver Riddle struct TestTraitFolder 3558ceae95SRiver Riddle : public PassWrapper<TestTraitFolder, OperationPass<func::FuncOp>> { 365e50dd04SRiver Riddle MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestTraitFolder) 375e50dd04SRiver Riddle 38b5e22e6dSMehdi Amini StringRef getArgument() const final { return "test-trait-folder"; } 39b5e22e6dSMehdi Amini StringRef getDescription() const final { return "Run trait folding"; } 4041574554SRiver Riddle void runOnOperation() override { 41*09dfc571SJacques Pienaar (void)applyPatternsGreedily(getOperation(), 42dc4e913bSChris Lattner RewritePatternSet(&getContext())); 43c0b3abd1Sahmedsabie } 44c0b3abd1Sahmedsabie }; 45be0a7e9fSMehdi Amini } // namespace 46c0b3abd1Sahmedsabie 47c0b3abd1Sahmedsabie namespace mlir { 48b5e22e6dSMehdi Amini void registerTestTraitsPass() { PassRegistration<TestTraitFolder>(); } 49c0b3abd1Sahmedsabie } // namespace mlir 50