summaryrefslogtreecommitdiffstats
path: root/mlir/test/Target
diff options
context:
space:
mode:
authorUday Bondhugula <uday@polymagelabs.com>2019-12-18 09:59:37 -0800
committerA. Unique TensorFlower <gardener@tensorflow.org>2019-12-18 10:00:04 -0800
commit47034c4bc509f727051ff172c2bf3367a60e2c01 (patch)
tree80c36f8028f7d82b5768e3c46ecc2860e22902f6 /mlir/test/Target
parent4562e389a43caa2e30ebf277c12743edafe6a0ac (diff)
downloadbcm5719-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.mlir10
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)
OpenPOWER on IntegriCloud