From 97c35d16c63ec9163561b18b4971095d221c9910 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 18 Jan 2017 01:02:45 +0000 Subject: [PATCH] [WebAssembly] Update grow_memory's return type. The grow_memory instruction now returns the previous memory size. Add the return type to the LLVM intrinsic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292322 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/IntrinsicsWebAssembly.td | 2 +- lib/Target/WebAssembly/WebAssemblyInstrMemory.td | 4 ++-- test/CodeGen/WebAssembly/memory-addr32.ll | 13 +++++++------ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/llvm/IR/IntrinsicsWebAssembly.td b/include/llvm/IR/IntrinsicsWebAssembly.td index 4234c466d973..3a0957dfa39b 100644 --- a/include/llvm/IR/IntrinsicsWebAssembly.td +++ b/include/llvm/IR/IntrinsicsWebAssembly.td @@ -17,6 +17,6 @@ let TargetPrefix = "wasm" in { // All intrinsics start with "llvm.wasm.". // Note that current_memory is not IntrNoMem because it must be sequenced with // respect to grow_memory calls. def int_wasm_current_memory : Intrinsic<[llvm_anyint_ty], [], [IntrReadMem]>; -def int_wasm_grow_memory : Intrinsic<[], [llvm_anyint_ty], []>; +def int_wasm_grow_memory : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>], []>; } diff --git a/lib/Target/WebAssembly/WebAssemblyInstrMemory.td b/lib/Target/WebAssembly/WebAssemblyInstrMemory.td index b606ebb0a68d..25d77bb1f234 100644 --- a/lib/Target/WebAssembly/WebAssemblyInstrMemory.td +++ b/lib/Target/WebAssembly/WebAssemblyInstrMemory.td @@ -673,9 +673,9 @@ def CURRENT_MEMORY_I32 : I<(outs I32:$dst), (ins i32imm:$flags), Requires<[HasAddr32]>; // Grow memory. -def GROW_MEMORY_I32 : I<(outs), (ins i32imm:$flags, I32:$delta), +def GROW_MEMORY_I32 : I<(outs I32:$dst), (ins i32imm:$flags, I32:$delta), [], - "grow_memory\t$delta", 0x40>, + "grow_memory\t$dst, $delta", 0x40>, Requires<[HasAddr32]>; } // Defs = [ARGUMENTS] diff --git a/test/CodeGen/WebAssembly/memory-addr32.ll b/test/CodeGen/WebAssembly/memory-addr32.ll index 583201b15f99..bd11b8183195 100644 --- a/test/CodeGen/WebAssembly/memory-addr32.ll +++ b/test/CodeGen/WebAssembly/memory-addr32.ll @@ -6,7 +6,7 @@ target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" target triple = "wasm32-unknown-unknown" declare i32 @llvm.wasm.current.memory.i32() nounwind readonly -declare void @llvm.wasm.grow.memory.i32(i32) nounwind +declare i32 @llvm.wasm.grow.memory.i32(i32) nounwind ; CHECK-LABEL: current_memory: ; CHECK-NEXT: .result i32{{$}} @@ -19,9 +19,10 @@ define i32 @current_memory() { ; CHECK-LABEL: grow_memory: ; CHECK-NEXT: .param i32{{$}} -; CHECK: grow_memory $0{{$}} -; CHECK-NEXT: return{{$}} -define void @grow_memory(i32 %n) { - call void @llvm.wasm.grow.memory.i32(i32 %n) - ret void +; CHECK-NEXT: .result i32{{$}} +; CHECK: grow_memory $push0=, $0{{$}} +; CHECK-NEXT: return $pop0{{$}} +define i32 @grow_memory(i32 %n) { + %a = call i32 @llvm.wasm.grow.memory.i32(i32 %n) + ret i32 %a }