mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-18 19:38:51 +00:00
WebAssembly: handle ret void
.
Summary: Use -1 as numoperands for the return SDTypeProfile, denoting that return is variadic. Note that the patterns in InstrControl.td still need to match the inputs, so this ins't an "anything goes" variadic on ret! The next step will be to handle other local types (not just int32). Reviewers: sunfish Subscribers: llvm-commits, jfb Differential Revision: http://reviews.llvm.org/D11692 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243783 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7aa7e6f49
commit
caf175c28c
@ -146,8 +146,7 @@ SDValue WebAssemblyTargetLowering::LowerReturn(
|
||||
|
||||
SmallVector<SDValue, 4> 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;
|
||||
}
|
||||
|
@ -29,5 +29,6 @@ let hasSideEffects = 1, isReturn = 1, isTerminator = 1, hasCtrlDep = 1,
|
||||
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
|
||||
|
@ -26,7 +26,7 @@ def HasSIMD128 : Predicate<"Subtarget->hasSIMD128()">,
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
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.
|
||||
|
10
test/CodeGen/WebAssembly/return-void.ll
Normal file
10
test/CodeGen/WebAssembly/return-void.ll
Normal file
@ -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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user