diff --git a/mlir/test/mlir-tblgen/op-operand.td b/mlir/test/mlir-tblgen/op-operand.td index a2fa1f7046a97..ab8d721ed5427 100644 --- a/mlir/test/mlir-tblgen/op-operand.td +++ b/mlir/test/mlir-tblgen/op-operand.td @@ -13,6 +13,9 @@ def OpA : NS_Op<"one_normal_operand_op", []> { let arguments = (ins I32:$input); } +// DECL-LABEL: class OpA : {{.*}} { +// DECL: static constexpr int odsIndex_input = 0; + // CHECK-LABEL: OpA definitions // CHECK: void OpA::build @@ -28,6 +31,9 @@ def OpB : NS_Op<"one_variadic_operand_op", []> { let arguments = (ins Variadic:$input); } +// DECL-LABEL: class OpB : {{.*}} { +// DECL: static constexpr int odsIndex_input = 0; + // CHECK-LABEL: OpB::build // CHECK: ::mlir::ValueRange input // CHECK-NOT: assert @@ -37,6 +43,11 @@ def OpD : NS_Op<"mix_variadic_and_normal_inputs_op", [SameVariadicOperandSize]> let arguments = (ins Variadic:$input1, AnyTensor:$input2, Variadic:$input3); } +// DECL-LABEL: class OpD : {{.*}} { +// DECL: static constexpr int odsIndex_input1 = 0; +// DECL: static constexpr int odsIndex_input2 = 1; +// DECL: static constexpr int odsIndex_input3 = 2; + // DECL-LABEL: ::mlir::Operation::operand_range getInput1 // DECL-NEXT: return getODSOperands(0); diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp index 6008ed4673d1b..cbb4030f3adb4 100644 --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -2223,6 +2223,17 @@ generateNamedOperandGetters(const Operator &op, Class &opClass, "'SameVariadicOperandSize' traits"); } + // Print the ods names so they don't need to be hardcoded in the source. + for (int i = 0; i != numOperands; ++i) { + const auto &operand = op.getOperand(i); + if (operand.name.empty()) + continue; + + opClass.declare("static constexpr int", Twine("odsIndex_") + + operand.name + " = " + + Twine(i)); + } + // First emit a few "sink" getter methods upon which we layer all nicer named // getter methods. // If generating for an adaptor, the method is put into the non-templated