1// RUN: mlir-opt -verify-diagnostics -allow-unregistered-dialect %s | FileCheck %s 2// check parser 3// RUN: mlir-opt -verify-diagnostics -allow-unregistered-dialect %s | mlir-opt -verify-diagnostics --allow-unregistered-dialect | FileCheck %s 4 5// CHECK-LABEL: func @array_types( 6func.func @array_types( 7 // CHECK-SAME: !emitc.array<1xf32>, 8 %arg0: !emitc.array<1xf32>, 9 // CHECK-SAME: !emitc.array<10x20x30xi32>, 10 %arg1: !emitc.array<10x20x30xi32>, 11 // CHECK-SAME: !emitc.array<30x!emitc.ptr<i32>>, 12 %arg2: !emitc.array<30x!emitc.ptr<i32>>, 13 // CHECK-SAME: !emitc.array<30x!emitc.opaque<"int">> 14 %arg3: !emitc.array<30x!emitc.opaque<"int">>, 15 // CHECK-SAME: !emitc.array<30x!emitc.size_t> 16 %arg4: !emitc.array<30x!emitc.size_t>, 17 // CHECK-SAME: !emitc.array<30x!emitc.ssize_t> 18 %arg5: !emitc.array<30x!emitc.ssize_t>, 19 // CHECK-SAME: !emitc.array<30x!emitc.ptrdiff_t> 20 %arg6: !emitc.array<30x!emitc.ptrdiff_t>, 21 // CHECK-SAME: !emitc.array<0xi64> 22 %arg7: !emitc.array<0xi64> 23) { 24 return 25} 26 27// CHECK-LABEL: func @lvalue_types( 28func.func @lvalue_types() { 29 // CHECK-NEXT: !emitc.lvalue<i32> 30 %0 = "typed.result"() : () -> (!emitc.lvalue<i32>) 31 // CHECK-NEXT: !emitc.lvalue<f64> 32 %2 = "typed.result"() : () -> (!emitc.lvalue<f64>) 33 // CHECK-NEXT: !emitc.lvalue<index> 34 %3 = "typed.result"() : () -> (!emitc.lvalue<index>) 35 // CHECK-NEXT: !emitc.lvalue<!emitc.ptr<i32>> 36 %4 = "typed.result"() : () -> (!emitc.lvalue<!emitc.ptr<i32>>) 37 // CHECK-NEXT: !emitc.lvalue<!emitc.opaque<"int">> 38 %5 = "typed.result"() : () -> (!emitc.lvalue<!emitc.opaque<"int">>) 39 return 40} 41 42// CHECK-LABEL: func @opaque_types() { 43func.func @opaque_types() { 44 // CHECK-NEXT: !emitc.opaque<"int"> 45 emitc.call_opaque "f"() {template_args = [!emitc<opaque<"int">>]} : () -> () 46 // CHECK-NEXT: !emitc.opaque<"byte"> 47 emitc.call_opaque "f"() {template_args = [!emitc<opaque<"byte">>]} : () -> () 48 // CHECK-NEXT: !emitc.opaque<"unsigned"> 49 emitc.call_opaque "f"() {template_args = [!emitc<opaque<"unsigned">>]} : () -> () 50 // CHECK-NEXT: !emitc.opaque<"status_t"> 51 emitc.call_opaque "f"() {template_args = [!emitc<opaque<"status_t">>]} : () -> () 52 // CHECK-NEXT: !emitc.opaque<"std::vector<std::string>"> 53 emitc.call_opaque "f"() {template_args = [!emitc.opaque<"std::vector<std::string>">]} : () -> () 54 // CHECK-NEXT: !emitc.opaque<"SmallVector<int*, 4>"> 55 emitc.call_opaque "f"() {template_args = [!emitc.opaque<"SmallVector<int*, 4>">]} : () -> () 56 57 return 58} 59 60// CHECK-LABEL: func @pointer_types() { 61func.func @pointer_types() { 62 // CHECK-NEXT: !emitc.ptr<i32> 63 emitc.call_opaque "f"() {template_args = [!emitc.ptr<i32>]} : () -> () 64 // CHECK-NEXT: !emitc.ptr<i64> 65 emitc.call_opaque "f"() {template_args = [!emitc.ptr<i64>]} : () -> () 66 // CHECK-NEXT: !emitc.ptr<f32> 67 emitc.call_opaque "f"() {template_args = [!emitc.ptr<f32>]} : () -> () 68 // CHECK-NEXT: !emitc.ptr<f64> 69 emitc.call_opaque "f"() {template_args = [!emitc.ptr<f64>]} : () -> () 70 // CHECK-NEXT: !emitc.ptr<i32> 71 %0 = emitc.call_opaque "f"() : () -> (!emitc.ptr<i32>) 72 // CHECK-NEXT: (!emitc.ptr<i32>) -> !emitc.ptr<!emitc.ptr<i32>> 73 %1 = emitc.call_opaque "f"(%0) : (!emitc.ptr<i32>) -> (!emitc.ptr<!emitc.ptr<i32>>) 74 // CHECK-NEXT: !emitc.ptr<!emitc.opaque<"int">> 75 emitc.call_opaque "f"() {template_args = [!emitc.ptr<!emitc.opaque<"int">>]} : () -> () 76 77 return 78} 79 80// CHECK-LABEL: func @size_types() 81func.func @size_types() { 82 // CHECK-NEXT: !emitc.ssize_t 83 emitc.call_opaque "f"() {template_args = [!emitc.ssize_t]} : () -> () 84 // CHECK-NEXT: !emitc.size_t 85 emitc.call_opaque "f"() {template_args = [!emitc.size_t]} : () -> () 86 // CHECK-NEXT: !emitc.ptrdiff_t 87 emitc.call_opaque "f"() {template_args = [!emitc.ptrdiff_t]} : () -> () 88 89 return 90} 91