Skip to content

Commit d7fcc6f

Browse files
committed
WebAssembly: handle unused function arguments.
Subscribers: llvm-commits, sunfish, jfb Differential Revision: http://reviews.llvm.org/D11684 llvm-svn: 243770
1 parent 502829c commit d7fcc6f

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,13 @@ SDValue WebAssemblyTargetLowering::LowerFormalArguments(
191191
fail(DL, DAG, "WebAssembly hasn't implemented split arguments");
192192
if (In.VT != MVT::i32)
193193
fail(DL, DAG, "WebAssembly hasn't implemented non-i32 arguments");
194-
if (!In.Used)
195-
fail(DL, DAG, "WebAssembly hasn't implemented unused arguments");
196194
// FIXME Do something with In.getOrigAlign()?
197-
InVals.push_back(DAG.getNode(WebAssemblyISD::ARGUMENT, DL, In.VT,
198-
DAG.getTargetConstant(ArgNo++, DL, MVT::i32)));
195+
InVals.push_back(
196+
In.Used
197+
? DAG.getNode(WebAssemblyISD::ARGUMENT, DL, In.VT,
198+
DAG.getTargetConstant(ArgNo, DL, MVT::i32))
199+
: DAG.getNode(ISD::UNDEF, DL, In.VT));
200+
++ArgNo;
199201
}
200202

201203
return Chain;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
; RUN: llc < %s -asm-verbose=false | FileCheck %s
2+
3+
; Make sure that argument offsets are correct even if some arguments are unused.
4+
5+
target datalayout = "e-p:32:32-i64:64-v128:8:128-n32:64-S128"
6+
target triple = "wasm32-unknown-unknown"
7+
8+
; CHECK-LABEL: unused_first:
9+
; CHECK-NEXT: (setlocal @0 (argument 1))
10+
; CHECK-NEXT: (RETURN @0)
11+
define i32 @unused_first(i32 %x, i32 %y) {
12+
ret i32 %y
13+
}
14+
15+
; CHECK-LABEL: unused_second:
16+
; CHECK-NEXT: (setlocal @0 (argument 0))
17+
; CHECK-NEXT: (RETURN @0)
18+
define i32 @unused_second(i32 %x, i32 %y) {
19+
ret i32 %x
20+
}

0 commit comments

Comments
 (0)