`EnumAttr` is a pure TableGen implementation of enum attributes using `AttrDef`. This is meant as a drop-in replacement for `StrEnumAttr`, which is soon to be deprecated. `StrEnumAttr` is often used over `IntEnumAttr` because its more readable in MLIR assembly formats. However, storing and manipulating strings is not efficient. Defining `StrEnumAttr` can also be awkward and relies on a lot of special logic in `EnumsGen`, and has some hidden sharp edges. Also, `EnumAttr` stores the enum directly, removing the need to convert to/from integers when calling attribute getters on ops. Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D115181
31 lines
903 B
MLIR
31 lines
903 B
MLIR
// RUN: mlir-opt -verify-diagnostics -split-input-file %s
|
|
|
|
func @test_invalid_enum_case() -> () {
|
|
// expected-error@+2 {{expected test::TestEnum to be one of: first, second, third}}
|
|
// expected-error@+1 {{failed to parse TestEnumAttr}}
|
|
test.op_with_enum #test<"enum fourth">
|
|
}
|
|
|
|
// -----
|
|
|
|
func @test_invalid_enum_case() -> () {
|
|
// expected-error@+1 {{expected test::TestEnum to be one of: first, second, third}}
|
|
test.op_with_enum fourth
|
|
// expected-error@+1 {{failed to parse TestEnumAttr}}
|
|
}
|
|
|
|
// -----
|
|
|
|
func @test_invalid_attr() -> () {
|
|
// expected-error@+1 {{op attribute 'value' failed to satisfy constraint: a test enum}}
|
|
"test.op_with_enum"() {value = 1 : index} : () -> ()
|
|
}
|
|
|
|
// -----
|
|
|
|
func @test_parse_invalid_attr() -> () {
|
|
// expected-error@+2 {{expected valid keyword}}
|
|
// expected-error@+1 {{failed to parse TestEnumAttr parameter 'value'}}
|
|
test.op_with_enum 1 : index
|
|
}
|