From 40b9c39db15929b2b70762b68ecc6c16721f9fb1 Mon Sep 17 00:00:00 2001 From: "William S. Moses" Date: Fri, 15 Oct 2021 15:34:23 -0400 Subject: [PATCH] [MLIR][LLVM] Add memset intrinsic Add memset intrinsic into LLVM dialect Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D111906 --- mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td | 5 +++++ mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td index 8176c3f..1e41587 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -1384,6 +1384,11 @@ def LLVM_MemcpyInlineOp : LLVM_ZeroResultIntrOp<"memcpy.inline", [0, 1, 2]> { LLVM_Type:$isVolatile); } +def LLVM_MemsetOp : LLVM_ZeroResultIntrOp<"memset", [0, 2]> { + let arguments = (ins LLVM_Type:$dst, LLVM_Type:$val, LLVM_Type:$len, + LLVM_Type:$isVolatile); +} + // Intrinsics with multiple returns. def LLVM_SAddWithOverflowOp diff --git a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir index 8eff72c..0a4bf63 100644 --- a/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir +++ b/mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir @@ -312,6 +312,14 @@ llvm.func @memcpy_test(%arg0: i32, %arg2: !llvm.ptr, %arg3: !llvm.ptr) { llvm.return } +// CHECK-LABEL: @memset_test +llvm.func @memset_test(%arg0: i32, %arg2: !llvm.ptr, %arg3: i8) { + %i1 = llvm.mlir.constant(false) : i1 + // CHECK: call void @llvm.memset.p0i8.i32(i8* %{{.*}}, i8 %{{.*}}, i32 %{{.*}}, i1 {{.*}}) + "llvm.intr.memset"(%arg2, %arg3, %arg0, %i1) : (!llvm.ptr, i8, i32, i1) -> () + llvm.return +} + // CHECK-LABEL: @sadd_with_overflow_test llvm.func @sadd_with_overflow_test(%arg0: i32, %arg1: i32, %arg2: vector<8xi32>, %arg3: vector<8xi32>) { // CHECK: call { i32, i1 } @llvm.sadd.with.overflow.i32 -- 2.7.4