brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · aa1744b Raw
370 lines · plain
1// RUN: mlir-opt --test-data-layout-query --split-input-file --verify-diagnostics %s | FileCheck %s2 3module {4  // CHECK: @no_spec5  func.func @no_spec() {6    // CHECK: alignment = 87    // CHECK: alloca_memory_space = 08    // CHECK: bitsize = 649    // CHECK: default_memory_space = 010    // CHECK: endianness = ""11    // CHECK: function_pointer_alignment =12    // CHECK-SAME: #dlti.function_pointer_alignment<0, function_dependent = false>,13    // CHECK: global_memory_space = 014    // CHECK: index = 6415    // CHECK: legal_int_widths = array<i32>16    // CHECK: mangling_mode = ""17    // CHECK: preferred = 818    // CHECK: program_memory_space = 019    // CHECK: size = 820    // CHECK: stack_alignment = 021    "test.data_layout_query"() : () -> !llvm.ptr22    // CHECK: alignment = 823    // CHECK: alloca_memory_space = 024    // CHECK: bitsize = 6425    // CHECK: default_memory_space = 026    // CHECK: endianness = ""27    // CHECK: function_pointer_alignment =28    // CHECK-SAME: #dlti.function_pointer_alignment<0, function_dependent = false>,29    // CHECK: global_memory_space = 030    // CHECK: index = 6431    // CHECK: legal_int_widths = array<i32>32    // CHECK: mangling_mode = ""33    // CHECK: preferred = 834    // CHECK: program_memory_space = 035    // CHECK: size = 836    // CHECK: stack_alignment = 037    "test.data_layout_query"() : () -> !llvm.ptr<3>38    // CHECK: alignment = 839    // CHECK: alloca_memory_space = 040    // CHECK: bitsize = 6441    // CHECK: default_memory_space = 042    // CHECK: endianness = ""43    // CHECK: function_pointer_alignment =44    // CHECK-SAME: #dlti.function_pointer_alignment<0, function_dependent = false>,45    // CHECK: global_memory_space = 046    // CHECK: index = 6447    // CHECK: legal_int_widths = array<i32>48    // CHECK: mangling_mode = ""49    // CHECK: preferred = 850    // CHECK: program_memory_space = 051    // CHECK: size = 852    // CHECK: stack_alignment = 053    "test.data_layout_query"() : () -> !llvm.ptr<5>54    return55  }56}57 58// -----59 60module attributes { dlti.dl_spec = #dlti.dl_spec<61  #dlti.dl_entry<!llvm.ptr, dense<[32, 32, 64]> : vector<3xi64>>,62  #dlti.dl_entry<!llvm.ptr<5>, dense<[64, 64, 64]> : vector<3xi64>>,63  #dlti.dl_entry<!llvm.ptr<4>, dense<[32, 64, 64, 24]> : vector<4xi64>>,64  #dlti.dl_entry<"dlti.endianness", "little">,65  #dlti.dl_entry<"dlti.default_memory_space", 7 : ui64>,66  #dlti.dl_entry<"dlti.alloca_memory_space", 5 : ui64>,67  #dlti.dl_entry<"dlti.global_memory_space", 2 : ui64>,68  #dlti.dl_entry<"dlti.program_memory_space", 3 : ui64>,69  #dlti.dl_entry<"dlti.stack_alignment", 128 : i64>,70  #dlti.dl_entry<"dlti.mangling_mode", "e">,71  #dlti.dl_entry<"dlti.legal_int_widths", array<i32: 32, 64>>,72  #dlti.dl_entry<"dlti.function_pointer_alignment",73                 "#dlti.function_pointer_alignment<32, function_dependent = true>">74>} {75  // CHECK: @spec76  func.func @spec() {77    // CHECK: alignment = 478    // CHECK: alloca_memory_space = 579    // CHECK: bitsize = 3280    // CHECK: default_memory_space = 781    // CHECK: endianness = "little"82    // CHECK: function_pointer_alignment =83    // CHECK-SAME: "#dlti.function_pointer_alignment<32, function_dependent = true>",84    // CHECK: global_memory_space = 285    // CHECK: index = 3286    // CHECK: legal_int_widths = array<i32: 32, 64>87    // CHECK: mangling_mode = "e"88    // CHECK: preferred = 889    // CHECK: program_memory_space = 390    // CHECK: size = 491    // CHECK: stack_alignment = 12892    "test.data_layout_query"() : () -> !llvm.ptr93    // CHECK: alignment = 494    // CHECK: alloca_memory_space = 595    // CHECK: bitsize = 3296    // CHECK: default_memory_space = 797    // CHECK: endianness = "little"98    // CHECK: function_pointer_alignment =99    // CHECK-SAME: "#dlti.function_pointer_alignment<32, function_dependent = true>",100    // CHECK: global_memory_space = 2101    // CHECK: index = 32102    // CHECK: legal_int_widths = array<i32: 32, 64>103    // CHECK: preferred = 8104    // CHECK: program_memory_space = 3105    // CHECK: size = 4106    // CHECK: stack_alignment = 128107    "test.data_layout_query"() : () -> !llvm.ptr<3>108    // CHECK: alignment = 8109    // CHECK: alloca_memory_space = 5110    // CHECK: bitsize = 64111    // CHECK: default_memory_space = 7112    // CHECK: endianness = "little"113    // CHECK: function_pointer_alignment =114    // CHECK-SAME: "#dlti.function_pointer_alignment<32, function_dependent = true>",115    // CHECK: global_memory_space = 2116    // CHECK: index = 64117    // CHECK: legal_int_widths = array<i32: 32, 64>118    // CHECK: mangling_mode = "e"119    // CHECK: preferred = 8120    // CHECK: program_memory_space = 3121    // CHECK: size = 8122    // CHECK: stack_alignment = 128123    "test.data_layout_query"() : () -> !llvm.ptr<5>124    // CHECK: alignment = 8125    // CHECK: alloca_memory_space = 5126    // CHECK: bitsize = 32127    // CHECK: default_memory_space = 7128    // CHECK: endianness = "little"129    // CHECK: function_pointer_alignment =130    // CHECK-SAME: "#dlti.function_pointer_alignment<32, function_dependent = true>",131    // CHECK: global_memory_space = 2132    // CHECK: index = 24133    // CHECK: legal_int_widths = array<i32: 32, 64>134    // CHECK: mangling_mode = "e"135    // CHECK: preferred = 8136    // CHECK: program_memory_space = 3137    // CHECK: size = 4138    // CHECK: stack_alignment = 128139    "test.data_layout_query"() : () -> !llvm.ptr<4>140    return141  }142}143 144// -----145 146// expected-error@below {{expected layout attribute for '!llvm.ptr' to be a dense integer elements attribute with 3 or 4 elements}}147module attributes { dlti.dl_spec = #dlti.dl_spec<148  #dlti.dl_entry<!llvm.ptr, dense<[64.0, 64.0, 64.0]> : vector<3xf32>>149>} {150  func.func @pointer() {151    return152  }153}154 155// -----156 157// expected-error@below {{preferred alignment is expected to be at least as large as ABI alignment}}158module attributes { dlti.dl_spec = #dlti.dl_spec<159  #dlti.dl_entry<!llvm.ptr, dense<[64, 64, 32]> : vector<3xi64>>160>} {161  func.func @pointer() {162    return163  }164}165 166// -----167 168// expected-error @below {{expected i64 parameters for '!llvm.ptr'}}169module attributes { dlti.dl_spec = #dlti.dl_spec<170  #dlti.dl_entry<!llvm.ptr, dense<[32, 32, 64]> : vector<3xi32>>171>} {172}173 174// -----175 176module {177    // CHECK: @no_spec178    func.func @no_spec() {179        // simple case180        // CHECK: alignment = 4181        // CHECK: bitsize = 32182        // CHECK: index = 0183        // CHECK: preferred = 4184        // CHECK: size = 4185        "test.data_layout_query"() : () -> !llvm.struct<(i32)>186 187        // padding inbetween188        // CHECK: alignment = 8189        // CHECK: bitsize = 128190        // CHECK: index = 0191        // CHECK: preferred = 8192        // CHECK: size = 16193        "test.data_layout_query"() : () -> !llvm.struct<(i32, f64)>194 195        // padding at end of struct196        // CHECK: alignment = 8197        // CHECK: bitsize = 128198        // CHECK: index = 0199        // CHECK: preferred = 8200        // CHECK: size = 16201        "test.data_layout_query"() : () -> !llvm.struct<(f64, i32)>202 203         // packed204         // CHECK: alignment = 1205         // CHECK: bitsize = 96206         // CHECK: index = 0207         // CHECK: preferred = 8208         // CHECK: size = 12209         "test.data_layout_query"() : () -> !llvm.struct<packed (f64, i32)>210 211         // empty212         // CHECK: alignment = 1213         // CHECK: bitsize = 0214         // CHECK: index = 0215         // CHECK: preferred = 1216         // CHECK: size = 0217         "test.data_layout_query"() : () -> !llvm.struct<()>218         return219    }220}221 222// -----223 224module attributes { dlti.dl_spec = #dlti.dl_spec<225  #dlti.dl_entry<!llvm.struct<()>, dense<[32, 32]> : vector<2xi64>>226>} {227    // CHECK: @spec228    func.func @spec() {229        // Strict alignment is applied230        // CHECK: alignment = 4231        // CHECK: bitsize = 16232        // CHECK: index = 0233        // CHECK: preferred = 4234        // CHECK: size = 2235        "test.data_layout_query"() : () -> !llvm.struct<(i16)>236 237        // No impact on structs that have stricter requirements238        // CHECK: alignment = 8239        // CHECK: bitsize = 128240        // CHECK: index = 0241        // CHECK: preferred = 8242        // CHECK: size = 16243        "test.data_layout_query"() : () -> !llvm.struct<(i32, f64)>244 245         // Only the preferred alignment of structs is affected246         // CHECK: alignment = 1247         // CHECK: bitsize = 32248         // CHECK: index = 0249         // CHECK: preferred = 4250         // CHECK: size = 4251         "test.data_layout_query"() : () -> !llvm.struct<packed (i16, i16)>252 253         // empty254         // CHECK: alignment = 4255         // CHECK: bitsize = 0256         // CHECK: index = 0257         // CHECK: preferred = 4258         // CHECK: size = 0259         "test.data_layout_query"() : () -> !llvm.struct<()>260         return261    }262}263 264// -----265 266module attributes { dlti.dl_spec = #dlti.dl_spec<267  #dlti.dl_entry<!llvm.struct<()>, dense<[32]> : vector<1xi64>>268>} {269    // CHECK: @spec_without_preferred270    func.func @spec_without_preferred() {271        // abi alignment is applied to both preferred and abi272        // CHECK: alignment = 4273        // CHECK: bitsize = 16274        // CHECK: preferred = 4275        // CHECK: size = 2276        "test.data_layout_query"() : () -> !llvm.struct<(i16)>277        return278    }279}280 281// -----282 283// expected-error@below {{unexpected layout attribute for struct '!llvm.struct<(i8)>'}}284module attributes { dlti.dl_spec = #dlti.dl_spec<285  #dlti.dl_entry<!llvm.struct<(i8)>, dense<[64, 64]> : vector<2xi64>>286>} {287  func.func @struct() {288    return289  }290}291 292// -----293 294// expected-error@below {{expected layout attribute for '!llvm.struct<()>' to be a dense integer elements attribute of 1 or 2 elements}}295module attributes { dlti.dl_spec = #dlti.dl_spec<296  #dlti.dl_entry<!llvm.struct<()>, dense<[64, 64, 64]> : vector<3xi64>>297>} {298  func.func @struct() {299    return300  }301}302 303// -----304 305// expected-error@below {{preferred alignment is expected to be at least as large as ABI alignment}}306module attributes { dlti.dl_spec = #dlti.dl_spec<307  #dlti.dl_entry<!llvm.struct<()>, dense<[64, 32]> : vector<2xi64>>308>} {309  func.func @struct() {310    return311  }312}313 314// -----315 316module {317    // CHECK: @arrays318    func.func @arrays() {319        // simple case320        // CHECK: alignment = 4321        // CHECK: bitsize = 64322        // CHECK: index = 0323        // CHECK: preferred = 4324        // CHECK: size = 8325        "test.data_layout_query"() : () -> !llvm.array<2 x i32>326 327        // size 0328        // CHECK: alignment = 8329        // CHECK: bitsize = 0330        // CHECK: index = 0331        // CHECK: preferred = 8332        // CHECK: size = 0333        "test.data_layout_query"() : () -> !llvm.array<0 x f64>334 335        // alignment info matches element type336        // CHECK: alignment = 4337        // CHECK: bitsize = 64338        // CHECK: index = 0339        // CHECK: preferred = 8340        // CHECK: size = 8341        "test.data_layout_query"() : () -> !llvm.array<1 x i64>342        return343    }344}345 346// -----347 348module attributes { dlti.dl_spec = #dlti.dl_spec<349  #dlti.dl_entry<!llvm.struct<()>, dense<[64]> : vector<1xi64>>350>} {351    // CHECK: @overaligned352    func.func @overaligned() {353        // Over aligned element types are respected354        // CHECK: alignment = 8355        // CHECK: bitsize = 128356        // CHECK: preferred = 8357        // CHECK: size = 16358        "test.data_layout_query"() : () -> !llvm.array<2 x struct<(i8)>>359         return360    }361}362 363// -----364 365// expected-error @below {{expected i64 entries for '!llvm.struct<()>'}}366module attributes { dlti.dl_spec = #dlti.dl_spec<367  #dlti.dl_entry<!llvm.struct<()>, dense<[64]> : vector<1xi32>>368>} {369}370