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