mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[WebAssembly] Handle aliases in WebAssemblyFixFunctionBitcasts
Fixes: https://github.com/emscripten-core/emscripten/issues/8770 Differential Revision: https://reviews.llvm.org/D66508 llvm-svn: 369566
This commit is contained in:
parent
5ce1fd7dca
commit
f2a0708d5e
@ -70,6 +70,8 @@ static void findUses(Value *V, Function &F,
|
||||
for (Use &U : V->uses()) {
|
||||
if (auto *BC = dyn_cast<BitCastOperator>(U.getUser()))
|
||||
findUses(BC, F, Uses, ConstantBCs);
|
||||
else if (auto *A = dyn_cast<GlobalAlias>(U.getUser()))
|
||||
findUses(A, F, Uses, ConstantBCs);
|
||||
else if (U.get()->getType() != F.getType()) {
|
||||
CallSite CS(U.getUser());
|
||||
if (!CS)
|
||||
|
@ -5,7 +5,11 @@
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
|
||||
target triple = "wasm32-unknown-unknown"
|
||||
|
||||
declare void @has_i32_arg(i32)
|
||||
define void @has_i32_arg(i32) {
|
||||
entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @has_struct_arg({i32})
|
||||
declare i32 @has_i32_ret()
|
||||
declare void @vararg(...)
|
||||
@ -54,6 +58,19 @@ entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
; Calling aliases should also generate a wrapper
|
||||
|
||||
@alias_i32_arg = weak hidden alias void (i32), void (i32)* @has_i32_arg
|
||||
|
||||
; CHECK-LABEL: test_alias:
|
||||
; CHECK: call .Lhas_i32_arg_bitcast.2
|
||||
define void @test_alias() {
|
||||
entry:
|
||||
call void bitcast (void (i32)* @alias_i32_arg to void ()*)()
|
||||
ret void
|
||||
}
|
||||
|
||||
|
||||
; CHECK-LABEL: test_structs:
|
||||
; CHECK: call .Lhas_i32_arg_bitcast.1, $pop{{[0-9]+}}, $pop{{[0-9]+$}}
|
||||
; CHECK: call .Lhas_i32_arg_bitcast, $0, $pop2
|
||||
|
Loading…
x
Reference in New Issue
Block a user