diff options
author | Derek Schuff <dschuff@google.com> | 2016-01-26 22:47:43 +0000 |
---|---|---|
committer | Derek Schuff <dschuff@google.com> | 2016-01-26 22:47:43 +0000 |
commit | 90d9e8d37048f799d7e2174426f831a27cd0d23f (patch) | |
tree | 9a690bc744a37131733688961c3bd202f631e9d1 /llvm/test | |
parent | c2752daa6bf70786ebbb448208af8fb62a431ecc (diff) | |
download | bcm5719-llvm-90d9e8d37048f799d7e2174426f831a27cd0d23f.tar.gz bcm5719-llvm-90d9e8d37048f799d7e2174426f831a27cd0d23f.zip |
[WebAssembly] Omit no-op adds for non-mem uses of FrameIndex
Differential Revision: http://reviews.llvm.org/D16554
llvm-svn: 258872
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll | 5 | ||||
-rw-r--r-- | llvm/test/CodeGen/WebAssembly/userstack.ll | 18 |
2 files changed, 23 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll b/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll index bb7e8dd26d8..669f6ecd8be 100644 --- a/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll +++ b/llvm/test/CodeGen/WebAssembly/mem-intrinsics.ll @@ -59,13 +59,18 @@ define void @set_no(i8* %dst, i8 %src, i32 %len) { ret void } + ; CHECK-LABEL: frame_index: ; CHECK: i32.call $discard=, memset@FUNCTION, $3, $pop1, $pop0{{$}} +; CHECK: i32.call $discard=, memset@FUNCTION, $4, $pop3, $pop2{{$}} ; CHECK: return{{$}} define void @frame_index() { entry: %a = alloca [2048 x i8], align 16 + %b = alloca [2048 x i8], align 16 %0 = getelementptr inbounds [2048 x i8], [2048 x i8]* %a, i32 0, i32 0 + %1 = getelementptr inbounds [2048 x i8], [2048 x i8]* %b, i32 0, i32 0 call void @llvm.memset.p0i8.i32(i8* %0, i8 256, i32 1024, i32 16, i1 false) + call void @llvm.memset.p0i8.i32(i8* %1, i8 256, i32 1024, i32 16, i1 false) ret void } diff --git a/llvm/test/CodeGen/WebAssembly/userstack.ll b/llvm/test/CodeGen/WebAssembly/userstack.ll index 222f996d1b3..72160cd9b20 100644 --- a/llvm/test/CodeGen/WebAssembly/userstack.ll +++ b/llvm/test/CodeGen/WebAssembly/userstack.ll @@ -76,6 +76,24 @@ define void @allocarray() { ret void } +declare void @ext_func(i64* %ptr) +; CHECK-LABEL: non_mem_use +define void @non_mem_use() { + ; CHECK: i32.const [[L2:.+]]=, 16 + ; CHECK-NEXT: i32.sub [[SP:.+]]=, {{.+}}, [[L2]] + %r = alloca i64 + %r2 = alloca i64 + ; %r is at SP+8 + ; CHECK: i32.const [[OFF:.+]]=, 8 + ; CHECK-NEXT: i32.add [[ARG1:.+]]=, [[SP]], [[OFF]] + ; CHECK-NEXT: call ext_func@FUNCTION, [[ARG1]] + call void @ext_func(i64* %r) + ; %r2 is at SP+0, no add needed + ; CHECK-NEXT: call ext_func@FUNCTION, [[SP]] + call void @ext_func(i64* %r2) + ret void +} + ; CHECK-LABEL: allocarray_inbounds: ; CHECK: .local i32, i32, i32, i32{{$}} define void @allocarray_inbounds() { |