diff --git a/mlir/docs/OpDefinitions.md b/mlir/docs/OpDefinitions.md --- a/mlir/docs/OpDefinitions.md +++ b/mlir/docs/OpDefinitions.md @@ -1442,9 +1442,12 @@ // Ensure only bits that can be present in the enum are set return static_cast(~static_cast(bits) & static_cast(15u)); } -inline constexpr bool bitEnumContains(MyBitEnum bits, MyBitEnum bit) { +inline constexpr bool bitEnumContainsAll(MyBitEnum bits, MyBitEnum bit) { return (bits & bit) == bit; } +inline constexpr bool bitEnumContainsAny(MyBitEnum bits, MyBitEnum bit) { + return (static_cast(bits) & static_cast(bit)) != 0; +} inline constexpr MyBitEnum bitEnumClear(MyBitEnum bits, MyBitEnum bit) { return bits & ~bit; } diff --git a/mlir/tools/mlir-tblgen/EnumsGen.cpp b/mlir/tools/mlir-tblgen/EnumsGen.cpp --- a/mlir/tools/mlir-tblgen/EnumsGen.cpp +++ b/mlir/tools/mlir-tblgen/EnumsGen.cpp @@ -138,7 +138,8 @@ // inline constexpr operator&( a, b); // inline constexpr operator^( a, b); // inline constexpr operator~( bits); -// inline constexpr bool bitEnumContains( bits, bit); +// inline constexpr bool bitEnumContainsAll( bits, bit); +// inline constexpr bool bitEnumContainsAny( bits, bit); // inline constexpr bitEnumClear( bits, bit); // inline constexpr bitEnumSet( bits, bit, // bool value=true); @@ -161,9 +162,12 @@ // Ensure only bits that can be present in the enum are set return static_cast<{0}>(~static_cast<{1}>(bits) & static_cast<{1}>({2}u)); } -inline constexpr bool bitEnumContains({0} bits, {0} bit) {{ +inline constexpr bool bitEnumContainsAll({0} bits, {0} bit) { return (bits & bit) == bit; } +inline constexpr bool bitEnumContainsAny({0} bits, {0} bit) { + return (static_cast<{1}>(bits) & static_cast<{1}>(bit)) != 0; +} inline constexpr {0} bitEnumClear({0} bits, {0} bit) {{ return bits & ~bit; }