[Mlir-commits] [mlir] [MLIR][IRDL] Relax the restrictions on IRDL-defined names (PR #187911)
Ivan Ho
llvmlistbot at llvm.org
Tue Mar 24 04:21:01 PDT 2026
================
@@ -65,16 +65,46 @@ static std::string joinNameList(llvm::ArrayRef<std::string> names) {
return nameArray;
}
+// Convert a dialect/operation/type/attribute name to a valid identifier in C++.
+// The conversion is done by removing dots, underscores and dollar signs and
+// capitalizing the following character. For example, `name.with.dots` will be
+// converted to `nameWithDots` with `capitalizeFirst = false`.
+static std::string toCppName(StringRef input, bool capitalizeFirst = false) {
+ if (input.empty())
+ return "";
+
+ std::string output;
+ output.reserve(input.size());
+
+ // Push the first character, capatilizing if necessary.
+ if (capitalizeFirst && std::islower(input.front()))
+ output.push_back(llvm::toUpper(input.front()));
+ else
+ output.push_back(input.front());
+
+ // Walk the input converting any `*[._$]+[a-z]` snake case into `*[A-Z]`
+ // camelCase.
+ bool isSpecial = false;
+ for (char c : input.drop_front()) {
+ if (c == '_' || c == '.' || c == '$')
+ isSpecial = true;
+ else if (isSpecial) {
+ output.push_back(llvm::toUpper(c));
----------------
hhkit wrote:
Hopefully I'm parsing the conversation right. My suggestion is to use nested namespaces, since it's a bit more idiomatic than replacing the .?
Let's take `transform.affine.simplify_bounded_affine_ops` as a real world example. We could map IRDL name `affine.simplify_bounded_affine_ops` to
```
namespace transform { namespace affine { class SimplifyBoundedAffineOpsOp
...
} // namespace affine
} // namespace transform
```
since all ops are suffixed with Op, I don't think this would create any collisions? Though perhaps maybe it is `simplify_bounded_affine_ops` that should be defined in a sub-dialect `transform.affine`.
https://github.com/llvm/llvm-project/pull/187911
More information about the Mlir-commits
mailing list