diff options
| author | Uday Bondhugula <uday@polymagelabs.com> | 2019-12-18 09:59:37 -0800 |
|---|---|---|
| committer | A. Unique TensorFlower <gardener@tensorflow.org> | 2019-12-18 10:00:04 -0800 |
| commit | 47034c4bc509f727051ff172c2bf3367a60e2c01 (patch) | |
| tree | 80c36f8028f7d82b5768e3c46ecc2860e22902f6 /mlir/test/Target | |
| parent | 4562e389a43caa2e30ebf277c12743edafe6a0ac (diff) | |
| download | bcm5719-llvm-47034c4bc509f727051ff172c2bf3367a60e2c01.tar.gz bcm5719-llvm-47034c4bc509f727051ff172c2bf3367a60e2c01.zip | |
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
Diffstat (limited to 'mlir/test/Target')
| -rw-r--r-- | mlir/test/Target/llvmir-intrinsics.mlir | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/mlir/test/Target/llvmir-intrinsics.mlir b/mlir/test/Target/llvmir-intrinsics.mlir index 2a85569546f..4eaefd6bcf2 100644 --- a/mlir/test/Target/llvmir-intrinsics.mlir +++ b/mlir/test/Target/llvmir-intrinsics.mlir @@ -1,11 +1,16 @@ // RUN: mlir-translate -mlir-to-llvmir %s | FileCheck %s -// CHECK-LABEL: @fmuladd_test -llvm.func @fmuladd_test(%arg0: !llvm.float, %arg1: !llvm.float, %arg2: !llvm<"<8 x float>">) { +// CHECK-LABEL: @intrinsics +llvm.func @intrinsics(%arg0: !llvm.float, %arg1: !llvm.float, %arg2: !llvm<"<8 x float>">, %arg3: !llvm<"i8*">) { + %c3 = llvm.mlir.constant(3 : i32) : !llvm.i32 + %c1 = llvm.mlir.constant(1 : i32) : !llvm.i32 + %c0 = llvm.mlir.constant(0 : i32) : !llvm.i32 // CHECK: call float @llvm.fmuladd.f32.f32.f32 "llvm.intr.fmuladd"(%arg0, %arg1, %arg0) : (!llvm.float, !llvm.float, !llvm.float) -> !llvm.float // CHECK: call <8 x float> @llvm.fmuladd.v8f32.v8f32.v8f32 "llvm.intr.fmuladd"(%arg2, %arg2, %arg2) : (!llvm<"<8 x float>">, !llvm<"<8 x float>">, !llvm<"<8 x float>">) -> !llvm<"<8 x float>"> + // CHECK: call void @llvm.prefetch.p0i8(i8* %3, i32 0, i32 3, i32 1) + "llvm.intr.prefetch"(%arg3, %c0, %c3, %c1) : (!llvm<"i8*">, !llvm.i32, !llvm.i32, !llvm.i32) -> () llvm.return } @@ -48,6 +53,7 @@ llvm.func @log2_test(%arg0: !llvm.float, %arg1: !llvm<"<8 x float>">) { // Check that intrinsics are declared with appropriate types. // CHECK: declare float @llvm.fmuladd.f32.f32.f32(float, float, float) // CHECK: declare <8 x float> @llvm.fmuladd.v8f32.v8f32.v8f32(<8 x float>, <8 x float>, <8 x float>) #0 +// CHECK: declare void @llvm.prefetch.p0i8(i8* nocapture readonly, i32 immarg, i32 immarg, i32) // CHECK: declare float @llvm.exp.f32(float) // CHECK: declare <8 x float> @llvm.exp.v8f32(<8 x float>) #0 // CHECK: declare float @llvm.log.f32(float) |

