Add support for integer and float types into the data layout subsystem with default logic similar to LLVM IR. Given the flexibility of the sybsystem, the logic can be easily overwritten by operations if necessary. This provides the connection necessary, e.g., for the GPU target where alignment requirements for integers and floats differ from those provided by default (although still compatible with the LLVM IR model). Previously, it was impossible to use non-default alignment requirements for integer and float types, which could lead to incorrect address and size calculations when targeting GPUs. Depends On D120737 Reviewed By: wsmoses Differential Revision: https://reviews.llvm.org/D120739
93 lines
3.3 KiB
MLIR
93 lines
3.3 KiB
MLIR
// RUN: mlir-opt -split-input-file -verify-diagnostics %s
|
|
|
|
// expected-error@below {{attribute 'dlti.unknown' not supported by dialect}}
|
|
"test.unknown_op"() { dlti.unknown } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{'dlti.dl_spec' is expected to be a #dlti.dl_spec attribute}}
|
|
"test.unknown_op"() { dlti.dl_spec = 42 } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{invalid kind of attribute specified}}
|
|
"test.unknown_op"() { dlti.dl_spec = #dlti.dl_spec<[]> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{expected a type or a quoted string}}
|
|
"test.unknown_op"() { test.unknown_attr = #dlti.dl_entry<42, 42> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{repeated layout entry key: test.id}}
|
|
"test.unknown_op"() { test.unknown_attr = #dlti.dl_spec<
|
|
#dlti.dl_entry<"test.id", 42>,
|
|
#dlti.dl_entry<"test.id", 43>
|
|
>} : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{repeated layout entry key: 'i32'}}
|
|
"test.unknown_op"() { test.unknown_attr = #dlti.dl_spec<
|
|
#dlti.dl_entry<i32, 42>,
|
|
#dlti.dl_entry<i32, 42>
|
|
>} : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{unknown attrribute type: unknown}}
|
|
"test.unknown_op"() { test.unknown_attr = #dlti.unknown } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{unknown data layout entry name: dlti.unknown_id}}
|
|
"test.op_with_data_layout"() ({
|
|
}) { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.unknown_id", 42>> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{'dlti.endianness' data layout entry is expected to be either 'big' or 'little'}}
|
|
"test.op_with_data_layout"() ({
|
|
}) { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"dlti.endianness", "some">> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// Mismatching entries don't combine.
|
|
"test.op_with_data_layout"() ({
|
|
// expected-error@below {{data layout does not combine with layouts of enclosing ops}}
|
|
// expected-note@above {{enclosing op with data layout}}
|
|
"test.op_with_data_layout"() { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"unknown.unknown", 32>> } : () -> ()
|
|
"test.maybe_terminator_op"() : () -> ()
|
|
}) { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"unknown.unknown", 33>> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// Layout not supported some built-in types.
|
|
// expected-error@below {{unexpected data layout for a built-in type}}
|
|
"test.op_with_data_layout"() { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<tensor<f32>, 32>> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{data layout specified for a type that does not support it}}
|
|
"test.op_with_data_layout"() { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<!test.test_type, 32>> } : () -> ()
|
|
|
|
// -----
|
|
|
|
// Mismatching entries are checked on module ops as well.
|
|
module attributes { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"unknown.unknown", 33>>} {
|
|
// expected-error@below {{data layout does not combine with layouts of enclosing ops}}
|
|
// expected-note@above {{enclosing op with data layout}}
|
|
module attributes { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"unknown.unknown", 32>>} {
|
|
}
|
|
}
|
|
|
|
// -----
|
|
|
|
// Mismatching entries are checked on a combination of modules and other ops.
|
|
module attributes { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"unknown.unknown", 33>>} {
|
|
// expected-error@below {{data layout does not combine with layouts of enclosing ops}}
|
|
// expected-note@above {{enclosing op with data layout}}
|
|
"test.op_with_data_layout"() { dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<"unknown.unknown", 32>>} : () -> ()
|
|
}
|