[MLIR] More graceful failure in MaterializeVectors
authorNicolas Vasilache <ntv@google.com>
Thu, 3 Jan 2019 23:52:34 +0000 (15:52 -0800)
committerjpienaar <jpienaar@google.com>
Fri, 29 Mar 2019 21:55:05 +0000 (14:55 -0700)
Even though it is unexpected except in pathological cases, a nullptr clone may
be returned. This CL handles the nullptr return gracefuly.

PiperOrigin-RevId: 227764615

mlir/lib/Transforms/MaterializeVectors.cpp

index bbe2f85319b81ff2d6e572af746196cd38306c34..e687889cf93e3ccd5047e037bdc9f7f08beb5e57 100644 (file)
@@ -554,12 +554,15 @@ static bool instantiateMaterialization(Instruction *inst,
   FuncBuilder b(inst);
   auto *opInst = cast<OperationInst>(inst);
   if (auto write = opInst->dyn_cast<VectorTransferWriteOp>()) {
-    instantiate(&b, write, state->hwVectorType, state->hwVectorInstance,
-                state->substitutionsMap);
-    return false;
+    auto *clone = instantiate(&b, write, state->hwVectorType,
+                              state->hwVectorInstance, state->substitutionsMap);
+    return clone == nullptr;
   } else if (auto read = opInst->dyn_cast<VectorTransferReadOp>()) {
     auto *clone = instantiate(&b, read, state->hwVectorType,
                               state->hwVectorInstance, state->substitutionsMap);
+    if (!clone) {
+      return true;
+    }
     state->substitutionsMap->insert(
         std::make_pair(read->getResult(), clone->getResult(0)));
     return false;