xref: /llvm-project/mlir/test/Dialect/Ptr/layout.mlir (revision e035ef0e7423c1a4c78e922508da817dbd5b6a02)
1// RUN: mlir-opt --test-data-layout-query --split-input-file --verify-diagnostics %s | FileCheck %s
2
3module attributes { dlti.dl_spec = #dlti.dl_spec<
4  #dlti.dl_entry<!ptr.ptr, #ptr.spec<size = 32, abi = 32, preferred = 64>>,
5  #dlti.dl_entry<!ptr.ptr<5>,#ptr.spec<size = 64, abi = 64, preferred = 64>>,
6  #dlti.dl_entry<!ptr.ptr<4>, #ptr.spec<size = 32, abi = 64, preferred = 64, index = 24>>,
7  #dlti.dl_entry<"dlti.alloca_memory_space", 5 : ui64>,
8  #dlti.dl_entry<"dlti.global_memory_space", 2 : ui64>,
9  #dlti.dl_entry<"dlti.program_memory_space", 3 : ui64>,
10  #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>
11>} {
12  // CHECK: @spec
13  func.func @spec() {
14    // CHECK: alignment = 4
15    // CHECK: alloca_memory_space = 5
16    // CHECK: bitsize = 32
17    // CHECK: global_memory_space = 2
18    // CHECK: index = 32
19    // CHECK: preferred = 8
20    // CHECK: program_memory_space = 3
21    // CHECK: size = 4
22    // CHECK: stack_alignment = 128
23    "test.data_layout_query"() : () -> !ptr.ptr
24    // CHECK: alignment = 4
25    // CHECK: alloca_memory_space = 5
26    // CHECK: bitsize = 32
27    // CHECK: global_memory_space = 2
28    // CHECK: index = 32
29    // CHECK: preferred = 8
30    // CHECK: program_memory_space = 3
31    // CHECK: size = 4
32    // CHECK: stack_alignment = 128
33    "test.data_layout_query"() : () -> !ptr.ptr<3>
34    // CHECK: alignment = 8
35    // CHECK: alloca_memory_space = 5
36    // CHECK: bitsize = 64
37    // CHECK: global_memory_space = 2
38    // CHECK: index = 64
39    // CHECK: preferred = 8
40    // CHECK: program_memory_space = 3
41    // CHECK: size = 8
42    // CHECK: stack_alignment = 128
43    "test.data_layout_query"() : () -> !ptr.ptr<5>
44    // CHECK: alignment = 8
45    // CHECK: alloca_memory_space = 5
46    // CHECK: bitsize = 32
47    // CHECK: global_memory_space = 2
48    // CHECK: index = 24
49    // CHECK: preferred = 8
50    // CHECK: program_memory_space = 3
51    // CHECK: size = 4
52    // CHECK: stack_alignment = 128
53    "test.data_layout_query"() : () -> !ptr.ptr<4>
54    return
55  }
56}
57
58// -----
59
60// expected-error@+2 {{preferred alignment is expected to be at least as large as ABI alignment}}
61module attributes { dlti.dl_spec = #dlti.dl_spec<
62  #dlti.dl_entry<!ptr.ptr, #ptr.spec<size = 64, abi = 64, preferred = 32>>
63>} {
64  func.func @pointer() {
65    return
66  }
67}
68
69// -----
70
71// expected-error@+2 {{size entry must be divisible by 8}}
72module attributes { dlti.dl_spec = #dlti.dl_spec<
73  #dlti.dl_entry<!ptr.ptr, #ptr.spec<size = 33, abi = 32, preferred = 32>>
74>} {
75  func.func @pointer() {
76    return
77  }
78}
79
80
81// -----
82
83// expected-error@+2 {{abi entry must be divisible by 8}}
84module attributes { dlti.dl_spec = #dlti.dl_spec<
85  #dlti.dl_entry<!ptr.ptr, #ptr.spec<size = 32, abi = 33, preferred = 64>>
86>} {
87  func.func @pointer() {
88    return
89  }
90}
91
92
93// -----
94
95// expected-error@+2 {{preferred entry must be divisible by 8}}
96module attributes { dlti.dl_spec = #dlti.dl_spec<
97  #dlti.dl_entry<!ptr.ptr, #ptr.spec<size = 32, abi = 32, preferred = 33>>
98>} {
99  func.func @pointer() {
100    return
101  }
102}
103
104
105// -----
106
107// expected-error@+2 {{index entry must be divisible by 8}}
108module attributes { dlti.dl_spec = #dlti.dl_spec<
109  #dlti.dl_entry<!ptr.ptr, #ptr.spec<size = 32, abi = 32, preferred = 32, index = 33>>
110>} {
111  func.func @pointer() {
112    return
113  }
114}
115