// RUN: mlir-pdll %s -I %S -split-input-file -x mlir | FileCheck %s //===----------------------------------------------------------------------===// // EraseStmt //===----------------------------------------------------------------------===// // CHECK: pdl.pattern @EraseStmt // CHECK: %[[OP:.*]] = operation // CHECK: rewrite %[[OP]] // CHECK: erase %[[OP]] Pattern EraseStmt => erase op<>; // ----- // CHECK: pdl.pattern @EraseStmtNested // CHECK: %[[OP:.*]] = operation // CHECK: rewrite %[[OP]] // CHECK: erase %[[OP]] Pattern EraseStmtNested => rewrite root: Op with { erase root; }; // ----- //===----------------------------------------------------------------------===// // ReplaceStmt //===----------------------------------------------------------------------===// // CHECK: pdl.pattern @ReplaceStmt // CHECK: %[[OPERANDS:.*]] = operands // CHECK: %[[OP:.*]] = operation(%[[OPERANDS]] // CHECK: rewrite %[[OP]] // CHECK: replace %[[OP]] with(%[[OPERANDS]] : !pdl.range) Pattern ReplaceStmt => replace op<>(operands: ValueRange) with operands; // ----- // CHECK: pdl.pattern @ReplaceStmtNested // CHECK: %[[OPERANDS:.*]] = operands // CHECK: %[[OP:.*]] = operation(%[[OPERANDS]] // CHECK: rewrite %[[OP]] // CHECK: replace %[[OP]] with(%[[OPERANDS]] : !pdl.range) Pattern ReplaceStmtNested { let root = op<>(operands: ValueRange); rewrite root with { replace root with operands; }; } // ----- //===----------------------------------------------------------------------===// // RewriteStmt //===----------------------------------------------------------------------===// // CHECK: pdl.pattern @RewriteStmtNested // CHECK: %[[OP:.*]] = operation // CHECK: rewrite %[[OP]] // CHECK: erase %[[OP]] Pattern RewriteStmtNested { rewrite root: Op with { rewrite root with { erase root; }; }; }