summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2019-07-09 02:10:33 +0000
committerHeejin Ahn <aheejin@gmail.com>2019-07-09 02:10:33 +0000
commit947bfe73fc2f50300fafdf9ef7a025e7d17da30e (patch)
treee73b1bb6a4ad1bed405b053e1dc0dad7791da295 /llvm/test
parent0e344e9dc5f640cb0a2e72538962c1499ceb9663 (diff)
downloadbcm5719-llvm-947bfe73fc2f50300fafdf9ef7a025e7d17da30e.tar.gz
bcm5719-llvm-947bfe73fc2f50300fafdf9ef7a025e7d17da30e.zip
[WebAssembly] Make sret parameter work with AddMissingPrototypes
Summary: Even with functions with `no-prototype` attribute, there can be an argument `sret` (structure return) attribute, which is an optimization when a function return type is a struct. Fixes PR42420. Reviewers: sbc100 Subscribers: dschuff, jgravelle-google, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D64318 llvm-svn: 365426
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/WebAssembly/add-prototypes.ll11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/WebAssembly/add-prototypes.ll b/llvm/test/CodeGen/WebAssembly/add-prototypes.ll
index f42e4827d2f..84d7657e983 100644
--- a/llvm/test/CodeGen/WebAssembly/add-prototypes.ll
+++ b/llvm/test/CodeGen/WebAssembly/add-prototypes.ll
@@ -56,6 +56,17 @@ define void @as_paramater() {
ret void
}
+; Check if a sret parameter works in a no-prototype function.
+; CHECK-LABEL: @sret_param
+; CHECK: call void @make_struct_foo(%struct.foo* sret %foo)
+%struct.foo = type { i32, i32 }
+declare void @make_struct_foo(%struct.foo* sret, ...) #1
+define void @sret_param() {
+ %foo = alloca %struct.foo, align 4
+ call void bitcast (void (%struct.foo*, ...)* @make_struct_foo to void (%struct.foo*)*)(%struct.foo* sret %foo)
+ ret void
+}
+
declare void @func_param(i64 (...)*)
; CHECK: declare void @func_not_called()
OpenPOWER on IntegriCloud