xref: /llvm-project/mlir/test/Dialect/EmitC/types.mlir (revision 0bd07652524ebacdee166eb609fef48c50769b09)
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