// RUN: mlir-pdll %s -I %S -split-input-file | FileCheck %s //===----------------------------------------------------------------------===// // CompoundStmt //===----------------------------------------------------------------------===// // CHECK: Module // CHECK: CompoundStmt // CHECK: |-LetStmt // CHECK: `-EraseStmt Pattern { let root: Op; erase root; } // ----- //===----------------------------------------------------------------------===// // EraseStmt //===----------------------------------------------------------------------===// // CHECK: Module // CHECK: EraseStmt // CHECK: `-DeclRefExpr {{.*}} Type Pattern { erase _: Op; } // ----- //===----------------------------------------------------------------------===// // LetStmt //===----------------------------------------------------------------------===// // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Constraints` // CHECK: `-AttrConstraintDecl // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Constraints` // CHECK: `-OpConstraintDecl // CHECK: `-OpNameDecl Pattern { let attrVar: Attr; let var: Op; erase var; } // ----- // Check for proper refinement between constraint types. // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type> // CHECK: `Constraints` // CHECK: `-OpConstraintDecl // CHECK: `-OpNameDecl // CHECK: `-OpConstraintDecl // CHECK: `-OpNameDecl {{.*}} Name Pattern { let var: [Op, Op]; erase var; } // ----- // Check for proper conversion between initializer and constraint type. // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type> // CHECK: `-DeclRefExpr {{.*}} Type> // CHECK: `-VariableDecl {{.*}} Name // CHECK: `Constraints` // CHECK: `-OpConstraintDecl // CHECK: `-OpNameDecl Pattern { let input: Op; let var: Op = input; erase var; } // ----- // Check for proper conversion between initializer and constraint type. // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `-MemberAccessExpr {{.*}} Member<$results> Type // CHECK: `-DeclRefExpr {{.*}} Type> // CHECK: `-VariableDecl {{.*}} Name // CHECK: `Constraints` // CHECK: `-ValueConstraintDecl Pattern { let input: Op; let var: Value = input; erase _: Op; } // ----- // Check for proper conversion between initializer and constraint type. // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `-MemberAccessExpr {{.*}} Member<$results> Type // CHECK: `-DeclRefExpr {{.*}} Type> // CHECK: `-VariableDecl {{.*}} Name // CHECK: `Constraints` // CHECK: `-ValueRangeConstraintDecl Pattern { let input: Op; let var: ValueRange = input; erase _: Op; } // ----- // Check for proper handling of type constraints. // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Constraints` // CHECK: `-ValueConstraintDecl // CHECK: `-DeclRefExpr {{.*}} Type // CHECK: `-VariableDecl {{.*}} Name<_> Type // CHECK: `Constraints` // CHECK: `-TypeConstraintDecl Pattern { let var: Value<_: Type>; erase _: Op; } // ----- // Check for proper handling of type constraints. // CHECK: Module // CHECK: LetStmt // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Constraints` // CHECK: `-ValueRangeConstraintDecl // CHECK: `-DeclRefExpr {{.*}} Type // CHECK: `-VariableDecl {{.*}} Name<_> Type // CHECK: `Constraints` // CHECK: `-TypeRangeConstraintDecl Pattern { let var: ValueRange<_: TypeRange>; erase _: Op; } // ----- //===----------------------------------------------------------------------===// // ReplaceStmt //===----------------------------------------------------------------------===// // CHECK: Module // CHECK: `-ReplaceStmt // CHECK: `-DeclRefExpr {{.*}} Type // CHECK: ReplValues // CHECK: `-OperationExpr {{.*}} Type> Pattern { replace _: Op with op; } // ----- // CHECK: Module // CHECK: `-ReplaceStmt // CHECK: `-DeclRefExpr {{.*}} Type // CHECK: ReplValues // CHECK: |-DeclRefExpr {{.*}} Type // CHECK: |-DeclRefExpr {{.*}} Type // CHECK: `-MemberAccessExpr {{.*}} Member<$results> Type // CHECK: `-OperationExpr {{.*}} Type> Pattern { replace _: Op with (_: Value, _: ValueRange, op); } // ----- //===----------------------------------------------------------------------===// // RewriteStmt //===----------------------------------------------------------------------===// // CHECK: Module // CHECK: `-RewriteStmt // CHECK: |-DeclRefExpr {{.*}} Type // CHECK: `-CompoundStmt // CHECK: |-OperationExpr {{.*}} Type> // CHECK: `-ReplaceStmt {{.*}} // CHECK: `-DeclRefExpr {{.*}} Type // CHECK: `ReplValues` // CHECK: `-OperationExpr {{.*}} Type> Pattern { rewrite root: Op with { op; replace root with op; }; }