[PATCH] D57791: [WebAssembly] memory.fill and finish bulk memory

Heejin Ahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 11 09:03:00 PST 2019


aheejin added a comment.

Looks OK to me, some nits and questions:



================
Comment at: llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td:36
 
-let mayStore = 1 in
+let mayLoad =1, mayStore = 1 in
 defm MEMORY_INIT :
----------------
Nit: whitespace between `=` and `1`


================
Comment at: llvm/lib/Target/WebAssembly/WebAssemblyInstrBulkMemory.td:48
 
-//===----------------------------------------------------------------------===//
-// data.drop
-//===----------------------------------------------------------------------===//
-
+let mayStore = 1 in
 defm DATA_DROP :
----------------
Why is it `mayStore`? I guess even it does not modify wasm linear memory it can possibly modify other parts of the memory that stores segments, is that right?


================
Comment at: llvm/lib/Target/WebAssembly/WebAssemblySelectionDAGInfo.cpp:57
+                     Dst, DAG.getAnyExtOrTrunc(Val, DL, MVT::i32),
+                     DAG.getZExtOrTrunc(Size, DL, MVT::i32));
+}
----------------
Why use `getAnyExtOrTrunc` for `Val` and `getZExtOrTrunc` for `Size`? What's the difference?


================
Comment at: llvm/test/CodeGen/WebAssembly/bulk-memory-intrinsics.ll:15
   call void @llvm.wasm.memory.init.i32.i32.i8(
-    i32 0, i32 3, i8* %dest, i32 %offset, i32 %size
+    i32 3, i32 0, i8* %dest, i32 %offset, i32 %size
   )
----------------
Nit: how about merging it in D57736?


================
Comment at: llvm/test/CodeGen/WebAssembly/bulk-memory.ll:46
 ; BULK-MEM-NEXT: return
-declare void @llvm.memmove.p0i8.p0i8.i32(
-  i8* %dest, i8* %src, i32 %len, i1 %volatile
-)
-define void @memmove_i8(i8* %dest, i8* %src, i32 %len) {
-  call void @llvm.memmove.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 %len, i1 0)
+define void @memset_i8(i8* %dest, i8 zeroext %val, i8 zeroext %len) {
+  call void @llvm.memset.p0i8.i8(i8* %dest, i8 %val, i8 %len, i1 0)
----------------
In this file, some `val` and `len` arguments have `zeroext` attribute and some don't. Is there a reason? And do why we need this attribute?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57791/new/

https://reviews.llvm.org/D57791





More information about the llvm-commits mailing list