// RUN: mlir-pdll %s -I %S -split-input-file | FileCheck %s // CHECK: Module // CHECK: `-UserConstraintDecl {{.*}} Name ResultType> Constraint Foo(); // ----- // CHECK: Module // CHECK: `-UserConstraintDecl {{.*}} Name ResultType> Code< /* Native Code */ > Constraint Foo() [{ /* Native Code */ }]; // ----- // CHECK: Module // CHECK: `-UserConstraintDecl {{.*}} Name ResultType // CHECK: `Inputs` // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Results` // CHECK: `-VariableDecl {{.*}} Name<> Type // CHECK: `-CompoundStmt {{.*}} // CHECK: `-ReturnStmt {{.*}} // CHECK: `-DeclRefExpr {{.*}} Type // CHECK: `-VariableDecl {{.*}} Name Type Constraint Foo(arg: Value) -> Value => arg; // ----- // CHECK: Module // CHECK: `-UserConstraintDecl {{.*}} Name ResultType> // CHECK: `Results` // CHECK: |-VariableDecl {{.*}} Name Type // CHECK: | `Constraints` // CHECK: | `-ValueConstraintDecl {{.*}} // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Constraints` // CHECK: `-AttrConstraintDecl {{.*}} // CHECK: `-CompoundStmt {{.*}} // CHECK: `-ReturnStmt {{.*}} // CHECK: `-TupleExpr {{.*}} Type> // CHECK: |-MemberAccessExpr {{.*}} Member<0> Type // CHECK: | `-TupleExpr {{.*}} Type> // CHECK: `-MemberAccessExpr {{.*}} Member<1> Type // CHECK: `-TupleExpr {{.*}} Type> Constraint Foo() -> (result1: Value, result2: Attr) => (_: Value, attr<"10">); // ----- // CHECK: Module // CHECK: |-UserConstraintDecl {{.*}} Name ResultType> // CHECK: `-UserConstraintDecl {{.*}} Name ResultType // CHECK: `Inputs` // CHECK: `-VariableDecl {{.*}} Name Type // CHECK: `Constraints` // CHECK: `-UserConstraintDecl {{.*}} Name ResultType> // CHECK: `Results` // CHECK: `-VariableDecl {{.*}} Name<> Type // CHECK: `Constraints` // CHECK: `-UserConstraintDecl {{.*}} Name ResultType> Constraint Bar(input: Value); Constraint Foo(arg: Bar) -> Bar => arg; // ----- // Test that anonymous constraints are uniquely named. // CHECK: Module // CHECK: UserConstraintDecl {{.*}} Name<> ResultType> // CHECK: UserConstraintDecl {{.*}} Name<> ResultType Constraint Outer() { Constraint() {}; Constraint() => attr<"10">; }