https://github.com/xlauko created https://github.com/llvm/llvm-project/pull/154168
None >From 4b75153b6542eb7dc906d378a00aadee10359a64 Mon Sep 17 00:00:00 2001 From: xlauko <xla...@mail.muni.cz> Date: Tue, 15 Jul 2025 14:17:46 +0200 Subject: [PATCH] XXX --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 1 - mlir/include/mlir/IR/EnumAttr.td | 7 ++++++- mlir/test/lib/Dialect/Test/TestAttributes.h | 2 +- mlir/test/lib/Dialect/Test/TestEnumDefs.td | 11 ++++++++++ mlir/test/lib/Dialect/Test/TestEnums.h | 20 +++++++++++++++++++ mlir/test/lib/Dialect/Test/TestTypeDefs.td | 10 ++++++++++ mlir/test/lib/Dialect/Test/TestTypes.h | 1 + .../attr-or-type-format-roundtrip.mlir | 4 ++++ 8 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 mlir/test/lib/Dialect/Test/TestEnums.h diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index dcd00696f335d..7a11293ea1ffa 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -256,7 +256,6 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, case Builtin::BI__builtin_popcountll: case Builtin::BI__builtin_popcountg: return emitBuiltinBitOp<cir::BitPopcountOp>(*this, e); - case Builtin::BI__builtin_expect: case Builtin::BI__builtin_expect_with_probability: { mlir::Value argValue = emitScalarExpr(e->getArg(0)); diff --git a/mlir/include/mlir/IR/EnumAttr.td b/mlir/include/mlir/IR/EnumAttr.td index ff6cec6d41161..d2d0089c1fa4d 100644 --- a/mlir/include/mlir/IR/EnumAttr.td +++ b/mlir/include/mlir/IR/EnumAttr.td @@ -42,7 +42,7 @@ class IntEnumAttrCaseBase<I intType, string sym, string strVal, int intVal> : let predicate = CPred<[{ ::llvm::cast<::mlir::IntegerAttr>($_self).getValue().eq(::llvm::APInt(}] # intType.bitwidth # ", " - # intVal # + # intVal # "))">; } @@ -495,6 +495,11 @@ class EnumParameter<EnumInfo enumInfo> !cast<EnumAttrInfo>(enumInfo).parameterPrinter, ?); } +class DefaultValuedEnumParameter<EnumInfo enumInfo, EnumCase value> + : EnumParameter<enumInfo> { + let defaultValue = enumInfo.cppType # "::" # value.symbol; +} + // An attribute backed by a C++ enum. The attribute contains a single // parameter `value` whose type is the C++ enum class. // diff --git a/mlir/test/lib/Dialect/Test/TestAttributes.h b/mlir/test/lib/Dialect/Test/TestAttributes.h index 778d84fae7365..6ba4e31fdc898 100644 --- a/mlir/test/lib/Dialect/Test/TestAttributes.h +++ b/mlir/test/lib/Dialect/Test/TestAttributes.h @@ -16,6 +16,7 @@ #include <tuple> +#include "TestEnums.h" #include "TestTraits.h" #include "mlir/Dialect/Ptr/IR/MemorySpaceInterfaces.h" #include "mlir/Dialect/Utils/StructuredOpsUtils.h" @@ -27,7 +28,6 @@ // generated files require above includes to come first #include "TestAttrInterfaces.h.inc" -#include "TestOpEnums.h.inc" namespace test { class TestDialect; diff --git a/mlir/test/lib/Dialect/Test/TestEnumDefs.td b/mlir/test/lib/Dialect/Test/TestEnumDefs.td index 10e424a0f2523..6ed36c78a4da2 100644 --- a/mlir/test/lib/Dialect/Test/TestEnumDefs.td +++ b/mlir/test/lib/Dialect/Test/TestEnumDefs.td @@ -96,4 +96,15 @@ def MultiResultOpEnum: I64EnumAttr< MultiResultOpKind4, MultiResultOpKind5, MultiResultOpKind6 ]>; +//===----------------------------------------------------------------------===// +// Test Enum with Default Value +//===----------------------------------------------------------------------===// + +def TestDefaultCase : I32EnumAttrCase<"Default", 0, "default">; +def NonDefaultCase : I32EnumAttrCase<"NonDefault", 1, "non_default">; + +def TestDefaultValuedEnum : I32Enum<"TestDefaultValuedEnum", "", [ + TestDefaultCase, NonDefaultCase +]>; + #endif // TEST_ENUMDEFS diff --git a/mlir/test/lib/Dialect/Test/TestEnums.h b/mlir/test/lib/Dialect/Test/TestEnums.h new file mode 100644 index 0000000000000..80483d7d3c119 --- /dev/null +++ b/mlir/test/lib/Dialect/Test/TestEnums.h @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file contains enum definitions for the Test dialect +// +//===----------------------------------------------------------------------===// + +#ifndef MLIR_TESTENUMS_H +#define MLIR_TESTENUMS_H + +#include "mlir/IR/BuiltinAttributes.h" + +#include "TestOpEnums.h.inc" + +#endif // MLIR_TESTENUMS_H diff --git a/mlir/test/lib/Dialect/Test/TestTypeDefs.td b/mlir/test/lib/Dialect/Test/TestTypeDefs.td index ea20597231d58..7e3d648a7909f 100644 --- a/mlir/test/lib/Dialect/Test/TestTypeDefs.td +++ b/mlir/test/lib/Dialect/Test/TestTypeDefs.td @@ -16,6 +16,7 @@ // To get the test dialect def. include "TestDialect.td" include "TestAttrDefs.td" +include "TestEnumDefs.td" include "TestInterfaces.td" include "mlir/IR/BuiltinTypes.td" include "mlir/Interfaces/DataLayoutInterfaces.td" @@ -286,6 +287,15 @@ def TestTypeOptionalGroupStruct : Test_Type<"TestTypeOptionalGroupStruct"> { let assemblyFormat = "`<` (`(` struct(params)^ `)`) : (`x`)? `>`"; } +def TestTypeDefaultEnumParameter + : Test_Type<"TestTypeDefaultEnumParameter"> { + let parameters = (ins + DefaultValuedEnumParameter<TestDefaultValuedEnum, TestDefaultCase>:$a + ); + let mnemonic = "default_enum_parameter"; + let assemblyFormat = "`<` $a `>`"; +} + def TestTypeSpaces : Test_Type<"TestTypeSpaceS"> { let parameters = (ins "int":$a, "int":$b); let mnemonic = "spaces"; diff --git a/mlir/test/lib/Dialect/Test/TestTypes.h b/mlir/test/lib/Dialect/Test/TestTypes.h index 6499a96f495d0..c220a7f90638f 100644 --- a/mlir/test/lib/Dialect/Test/TestTypes.h +++ b/mlir/test/lib/Dialect/Test/TestTypes.h @@ -17,6 +17,7 @@ #include <optional> #include <tuple> +#include "TestEnums.h" #include "TestTraits.h" #include "mlir/Dialect/Bufferization/IR/BufferizationTypeInterfaces.h" #include "mlir/IR/Diagnostics.h" diff --git a/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir b/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir index 77b94698a278e..f17738e9a512e 100644 --- a/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir +++ b/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir @@ -77,6 +77,8 @@ attributes { // CHECK: !test.optional_type_string // CHECK: !test.optional_type_string<"non default"> // CHECK: !test.optional_type_string<"containing\0A \22escape\22 characters\0F"> +// CHECK: !test.default_enum_parameter +// CHECK: !test.default_enum_parameter<"non_default"> func.func private @test_roundtrip_default_parsers_struct( !test.no_parser<255, [1, 2, 3, 4, 5], "foobar", 4> @@ -120,4 +122,6 @@ func.func private @test_roundtrip_default_parsers_struct( !test.optional_type_string<"default">, !test.optional_type_string<"non default">, !test.optional_type_string<"containing\n \"escape\" characters\0f"> + !test.default_enum_parameter, + !test.default_enum_parameter<"non_default">, ) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits