[PATCH] D73244: [mlir] Fix vectorize transform crashing on none-op operand

Ahmed S. Taei via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 22 17:05:16 PST 2020


asaadaldien created this revision.
asaadaldien added a reviewer: nicolasvasilache.
Herald added subscribers: llvm-commits, liufengdb, lucyrfox, mgester, arpith-jacob, antiagainst, shauheen, burmako, jpienaar, rriddle, mehdi_amini.
Herald added a project: LLVM.

Not all operands have a defining operator. without this lowering the following will crash:

  func @fill_func(%arg0 : memref<2x2xf32>, %arg1: f32) {
    linalg.fill(%arg0, %arg1) : memref<2x2xf32>, f32
    return
  }


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D73244

Files:
  mlir/lib/Transforms/Vectorize.cpp


Index: mlir/lib/Transforms/Vectorize.cpp
===================================================================
--- mlir/lib/Transforms/Vectorize.cpp
+++ mlir/lib/Transforms/Vectorize.cpp
@@ -1003,7 +1003,10 @@
     return nullptr;
   }
   // 3. vectorize constant.
-  if (auto constant = dyn_cast<ConstantOp>(operand.getDefiningOp())) {
+  auto operandOp = operand.getDefiningOp();
+  if (!operandOp)
+    return nullptr;
+  if (auto constant = dyn_cast<ConstantOp>(operandOp)) {
     return vectorizeConstant(
         op, constant,
         VectorType::get(state->strategy->vectorSizes, operand.getType()));
@@ -1037,6 +1040,8 @@
     auto memRef = store.getMemRef();
     auto value = store.getValueToStore();
     auto vectorValue = vectorizeOperand(value, opInst, state);
+    if (!vectorValue)
+      return nullptr;
 
     ValueRange mapOperands = store.getMapOperands();
     SmallVector<Value, 8> indices;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73244.239740.patch
Type: text/x-patch
Size: 913 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200123/4f8069aa/attachment.bin>


More information about the llvm-commits mailing list