let dependentDialects = [
"AffineDialect",
"memref::MemRefDialect",
- "scf::SCFDialect"
+ "scf::SCFDialect",
+ "tensor::TensorDialect"
];
let options = [
Option<"fullUnroll", "full-unroll", "bool", /*default=*/"false",
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/Dialect/SCF/IR/SCF.h"
+#include "mlir/Dialect/Tensor/IR/Tensor.h"
#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/ImplicitLocOpBuilder.h"
}
return %token : !async.token
}
+
+// -----
+
+// CHECK-LABEL: transfer_read_with_tensor
+func.func @transfer_read_with_tensor(%arg: tensor<f32>) -> vector<1xf32> {
+ // CHECK: %[[EXTRACTED:.*]] = tensor.extract %{{.*}}[] : tensor<f32>
+ // CHECK-NEXT: %[[RESULT:.*]] = vector.broadcast %[[EXTRACTED]] : f32 to vector<1xf32>
+ // CHECK-NEXT: return %[[RESULT]] : vector<1xf32>
+ %f0 = arith.constant 0.0 : f32
+ %0 = vector.transfer_read %arg[], %f0 {permutation_map = affine_map<()->(0)>} :
+ tensor<f32>, vector<1xf32>
+ return %0: vector<1xf32>
+}