Introduce prefetch op: affine -> std -> llvm intrinsic
authorUday Bondhugula <uday@polymagelabs.com>
Wed, 18 Dec 2019 17:59:37 +0000 (09:59 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Wed, 18 Dec 2019 18:00:04 +0000 (10:00 -0800)
commit47034c4bc509f727051ff172c2bf3367a60e2c01
tree80c36f8028f7d82b5768e3c46ecc2860e22902f6
parent4562e389a43caa2e30ebf277c12743edafe6a0ac
Introduce prefetch op: affine -> std -> llvm intrinsic

Introduce affine.prefetch: op to prefetch using a multi-dimensional
subscript on a memref; similar to affine.load but has no effect on
semantics, but only on performance.

Provide lowering through std.prefetch, llvm.prefetch and map to llvm's
prefetch instrinsic. All attributes reflected through the lowering -
locality hint, rw, and instr/data cache.

  affine.prefetch %0[%i, %j + 5], false, 3, true : memref<400x400xi32>

Signed-off-by: Uday Bondhugula <uday@polymagelabs.com>
Closes tensorflow/mlir#225

COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/225 from bondhugula:prefetch 4c3b4e93bc64d9a5719504e6d6e1657818a2ead0
PiperOrigin-RevId: 286212997
21 files changed:
mlir/g3doc/OpDefinitions.md
mlir/include/mlir/Dialect/AffineOps/AffineOps.td
mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/include/mlir/Dialect/StandardOps/Ops.td
mlir/include/mlir/IR/OpBase.td
mlir/include/mlir/IR/OpImplementation.h
mlir/lib/Conversion/AffineToStandard/AffineToStandard.cpp
mlir/lib/Conversion/StandardToLLVM/ConvertStandardToLLVM.cpp
mlir/lib/Dialect/AffineOps/AffineOps.cpp
mlir/lib/Dialect/StandardOps/Ops.cpp
mlir/lib/Parser/Parser.cpp
mlir/lib/Transforms/Utils/Utils.cpp
mlir/test/AffineOps/load-store-invalid.mlir
mlir/test/AffineOps/load-store.mlir
mlir/test/Conversion/StandardToLLVM/convert-memref-ops.mlir
mlir/test/IR/core-ops.mlir
mlir/test/IR/invalid-ops.mlir
mlir/test/Target/llvmir-intrinsics.mlir
mlir/test/Transforms/lower-affine.mlir
mlir/test/mlir-tblgen/predicate.td
mlir/utils/vim/syntax/mlir.vim