Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -146,8 +146,7 @@ SmallVector RetOps(1, Chain); RetOps.append(OutVals.begin(), OutVals.end()); - const SDValue Ops[] = {Chain, OutVals.front()}; - Chain = DAG.getNode(WebAssemblyISD::RETURN, DL, MVT::Other, Ops); + Chain = DAG.getNode(WebAssemblyISD::RETURN, DL, MVT::Other, RetOps); return Chain; } Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrControl.td =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrControl.td +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrControl.td @@ -29,5 +29,6 @@ isBarrier = 1 in { //FIXME return more than just int32. def RETURN : I<(outs), (ins Int32:$val), [(WebAssemblyreturn Int32:$val)]>; +def RETURN_VOID : I<(outs), (ins), [(WebAssemblyreturn)]>; } // hasSideEffects = 1, isReturn = 1, isTerminator = 1, hasCtrlDep = 1, // isBarrier = 1 Index: llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td =================================================================== --- llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td +++ llvm/trunk/lib/Target/WebAssembly/WebAssemblyInstrInfo.td @@ -26,7 +26,7 @@ //===----------------------------------------------------------------------===// def SDT_WebAssemblyArgument : SDTypeProfile<1, 1, [SDTCisVT<1, i32>]>; -def SDT_WebAssemblyReturn : SDTypeProfile<0, 1, []>; +def SDT_WebAssemblyReturn : SDTypeProfile<0, -1, []>; //===----------------------------------------------------------------------===// // WebAssembly-specific DAG Nodes. Index: llvm/trunk/test/CodeGen/WebAssembly/return-void.ll =================================================================== --- llvm/trunk/test/CodeGen/WebAssembly/return-void.ll +++ llvm/trunk/test/CodeGen/WebAssembly/return-void.ll @@ -0,0 +1,10 @@ +; RUN: llc < %s -asm-verbose=false | FileCheck %s + +target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128" +target triple = "wasm32-unknown-unknown" + +; CHECK-LABEL: return_void: +; CHECK-NEXT: (RETURN_VOID) +define void @return_void() { + ret void +}