[spirv] Provide decorations in batch for op construction
authorLei Zhang <antiagainst@google.com>
Tue, 6 Aug 2019 14:02:35 +0000 (07:02 -0700)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Tue, 6 Aug 2019 14:02:59 +0000 (07:02 -0700)
Instead of setting the attributes for decorations one by one
after constructing the op, this CL changes to attach all
the attributes for decorations to the attribute vector for
constructing the op. This should be simpler and more
efficient.

PiperOrigin-RevId: 261905578

mlir/tools/mlir-tblgen/SPIRVUtilsGen.cpp

index 94b7aaa..d948ec5 100644 (file)
@@ -307,7 +307,16 @@ static void emitDeserializationFunction(const Record *attrClass,
      << op.getQualCppClassName()
      << ", only \") << wordIndex << \" of \" << words.size() << \" "
         "processed\";\n";
-  os << "  }\n";
+  os << "  }\n\n";
+
+  // Import decorations parsed
+  if (op.getNumResults() == 1) {
+    os << "  if (decorations.count(valueID)) {\n"
+       << "    auto attrs = decorations[valueID].getAttrs();\n"
+       << "    attributes.append(attrs.begin(), attrs.end());\n"
+       << "  }\n";
+  }
+
   os << formatv("  auto op = opBuilder.create<{0}>(unknownLoc, resultTypes, "
                 "operands, attributes); (void)op;\n",
                 op.getQualCppClassName());
@@ -315,16 +324,6 @@ static void emitDeserializationFunction(const Record *attrClass,
     os << "  valueMap[valueID] = op.getResult();\n\n";
   }
 
-  // Import decorations parsed
-  if (op.getNumResults() == 1) {
-    os << "  if (decorations.count(valueID)) {\n";
-    os << "    auto decorationAttrs = decorations[valueID];\n";
-    os << "    for (auto attr : decorationAttrs.getAttrs()) {\n";
-    os << "      op.setAttr(attr.first, attr.second);\n";
-    os << "    }\n";
-    os << "  }\n";
-  }
-
   os << "  return success();\n";
   os << "}\n\n";
 }