Index: mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp =================================================================== --- mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp +++ mlir/examples/toy/Ch5/mlir/LowerToAffineLoops.cpp @@ -155,9 +155,15 @@ // operations. auto valueShape = memRefType.getShape(); SmallVector constantIndices; - for (auto i : llvm::seq( - 0, *std::max_element(valueShape.begin(), valueShape.end()))) - constantIndices.push_back(rewriter.create(loc, i)); + + if (valueShape.size()) { + for (auto i : llvm::seq( + 0, *std::max_element(valueShape.begin(), valueShape.end()))) + constantIndices.push_back(rewriter.create(loc, i)); + } else { + // This is the case of a tensor of rank 0. + constantIndices.push_back(rewriter.create(loc, 0)); + } // The constant operation represents a multi-dimensional constant, so we // will need to generate a store for each of the elements. The following Index: mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp =================================================================== --- mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp +++ mlir/examples/toy/Ch6/mlir/LowerToAffineLoops.cpp @@ -155,10 +155,15 @@ // operations. auto valueShape = memRefType.getShape(); SmallVector constantIndices; - for (auto i : llvm::seq( - 0, *std::max_element(valueShape.begin(), valueShape.end()))) - constantIndices.push_back(rewriter.create(loc, i)); + if (valueShape.size()) { + for (auto i : llvm::seq( + 0, *std::max_element(valueShape.begin(), valueShape.end()))) + constantIndices.push_back(rewriter.create(loc, i)); + } else { + // This is the case of a tensor of rank 0. + constantIndices.push_back(rewriter.create(loc, 0)); + } // The constant operation represents a multi-dimensional constant, so we // will need to generate a store for each of the elements. The following // functor recursively walks the dimensions of the constant shape, Index: mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp =================================================================== --- mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp +++ mlir/examples/toy/Ch7/mlir/LowerToAffineLoops.cpp @@ -155,9 +155,15 @@ // operations. auto valueShape = memRefType.getShape(); SmallVector constantIndices; - for (auto i : llvm::seq( - 0, *std::max_element(valueShape.begin(), valueShape.end()))) - constantIndices.push_back(rewriter.create(loc, i)); + + if (valueShape.size()) { + for (auto i : llvm::seq( + 0, *std::max_element(valueShape.begin(), valueShape.end()))) + constantIndices.push_back(rewriter.create(loc, i)); + } else { + // This is the case of a tensor of rank 0. + constantIndices.push_back(rewriter.create(loc, 0)); + } // The constant operation represents a multi-dimensional constant, so we // will need to generate a store for each of the elements. The following