WebAssembly: don't optimize memcpy/memmove/memcpy to frame index
r258781 optimized memcpy/memmove/memcpy so the intrinsic call can return its first argument, but missed the frame index case. Teach it to ignore that case so C code doesn't assert out in these cases.
llvm-svn: 258851
diff --git a/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll b/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll
index ba2f1e7..bb7e8dd 100644
--- a/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll
+++ b/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll
@@ -58,3 +58,14 @@
call void @llvm.memset.p0i8.i32(i8* %dst, i8 %src, i32 %len, i32 1, i1 false)
ret void
}
+
+; CHECK-LABEL: frame_index:
+; CHECK: i32.call $discard=, memset@FUNCTION, $3, $pop1, $pop0{{$}}
+; CHECK: return{{$}}
+define void @frame_index() {
+entry:
+ %a = alloca [2048 x i8], align 16
+ %0 = getelementptr inbounds [2048 x i8], [2048 x i8]* %a, i32 0, i32 0
+ call void @llvm.memset.p0i8.i32(i8* %0, i8 256, i32 1024, i32 16, i1 false)
+ ret void
+}