[MLIR][LLVM] Add memset intrinsic
authorWilliam S. Moses <gh@wsmoses.com>
Fri, 15 Oct 2021 19:34:23 +0000 (15:34 -0400)
committerWilliam S. Moses <gh@wsmoses.com>
Sat, 16 Oct 2021 22:20:48 +0000 (18:20 -0400)
Add memset intrinsic into LLVM dialect

Reviewed By: mehdi_amini

Differential Revision: https://reviews.llvm.org/D111906

mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
mlir/test/Target/LLVMIR/llvmir-intrinsics.mlir

index 8176c3f..1e41587 100644 (file)
@@ -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
index 8eff72c..0a4bf63 100644 (file)
@@ -312,6 +312,14 @@ llvm.func @memcpy_test(%arg0: i32, %arg2: !llvm.ptr<i8>, %arg3: !llvm.ptr<i8>) {
   llvm.return
 }
 
+// CHECK-LABEL: @memset_test
+llvm.func @memset_test(%arg0: i32, %arg2: !llvm.ptr<i8>, %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>, 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