// RUN: mlir-opt --test-data-layout-query %s | FileCheck %s // CHECK-LABEL: @no_layout_builtin func @no_layout_builtin() { // CHECK: alignment = 4 // CHECK: bitsize = 32 // CHECK: preferred = 4 // CHECK: size = 4 "test.data_layout_query"() : () -> i32 // CHECK: alignment = 8 // CHECK: bitsize = 64 // CHECK: preferred = 8 // CHECK: size = 8 "test.data_layout_query"() : () -> f64 // CHECK: alignment = 4 // CHECK: bitsize = 64 // CHECK: preferred = 4 // CHECK: size = 8 "test.data_layout_query"() : () -> complex // CHECK: alignment = 1 // CHECK: bitsize = 14 // CHECK: preferred = 1 // CHECK: size = 2 "test.data_layout_query"() : () -> complex return } // CHECK-LABEL: @no_layout_custom func @no_layout_custom() { // CHECK: alignment = 1 // CHECK: bitsize = 1 // CHECK: preferred = 1 // CHECK: size = 1 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> return } // CHECK-LABEL: @layout_op_no_layout func @layout_op_no_layout() { "test.op_with_data_layout"() ({ // CHECK: alignment = 1 // CHECK: bitsize = 1 // CHECK: preferred = 1 // CHECK: size = 1 "test.data_layout_query"() : () -> !test.test_type_with_layout<1000> "test.maybe_terminator"() : () -> () }) : () -> () return } // CHECK-LABEL: @layout_op func @layout_op() { "test.op_with_data_layout"() ({ // CHECK: alignment = 20 // CHECK: bitsize = 10 // CHECK: preferred = 1 // CHECK: size = 2 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 10]>, #dlti.dl_entry, ["alignment", 20]> >} : () -> () return } // Make sure the outer op with layout may be missing the spec. // CHECK-LABEL: @nested_inner_only func @nested_inner_only() { "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ // CHECK: alignment = 20 // CHECK: bitsize = 10 // CHECK: preferred = 1 // CHECK: size = 2 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 10]>, #dlti.dl_entry, ["alignment", 20]> >} : () -> () "test.maybe_terminator"() : () -> () }) : () -> () return } // Make sure the inner op with layout may be missing the spec. // CHECK-LABEL: @nested_outer_only func @nested_outer_only() { "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ // CHECK: alignment = 20 // CHECK: bitsize = 10 // CHECK: preferred = 1 // CHECK: size = 2 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) : () -> () "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 10]>, #dlti.dl_entry, ["alignment", 20]> >} : () -> () return } // CHECK-LABEL: @nested_middle_only func @nested_middle_only() { "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ // CHECK: alignment = 20 // CHECK: bitsize = 10 // CHECK: preferred = 1 // CHECK: size = 2 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) : () -> () "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 10]>, #dlti.dl_entry, ["alignment", 20]> >} : () -> () "test.maybe_terminator"() : () -> () }) : () -> () return } // CHECK-LABEL: @nested_combine_with_missing func @nested_combine_with_missing() { "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ // CHECK: alignment = 20 // CHECK: bitsize = 10 // CHECK: preferred = 30 // CHECK: size = 2 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) : () -> () "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 10]>, #dlti.dl_entry, ["alignment", 20]> >} : () -> () // CHECK: alignment = 1 // CHECK: bitsize = 42 // CHECK: preferred = 30 // CHECK: size = 6 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 42]>, #dlti.dl_entry, ["preferred", 30]> >}: () -> () return } // CHECK-LABEL: @nested_combine_all func @nested_combine_all() { "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ "test.op_with_data_layout"() ({ // CHECK: alignment = 20 // CHECK: bitsize = 3 // CHECK: preferred = 30 // CHECK: size = 1 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 3]>, #dlti.dl_entry, ["preferred", 30]> >} : () -> () // CHECK: alignment = 20 // CHECK: bitsize = 10 // CHECK: preferred = 30 // CHECK: size = 2 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 10]>, #dlti.dl_entry, ["alignment", 20]> >} : () -> () // CHECK: alignment = 1 // CHECK: bitsize = 42 // CHECK: preferred = 30 // CHECK: size = 6 "test.data_layout_query"() : () -> !test.test_type_with_layout<10> "test.maybe_terminator"() : () -> () }) { dlti.dl_spec = #dlti.dl_spec< #dlti.dl_entry, ["size", 42]>, #dlti.dl_entry, ["preferred", 30]> >}: () -> () return }