[COFF, ARM64] Make sure to forward arguments from vararg to musttail vararg
Summary:
Thunk functions in Windows are varag functions that call a musttail function
to pass the arguments after the fixup is done. We need to make sure that we
forward the arguments from the caller vararg to the callee vararg function.
This is the same mechanism that is used for Windows on X86.
Reviewers: ssijaric, eli.friedman, TomTan, mgrang, mstorsjo, rnk, compnerd, efriedma
Reviewed By: efriedma
Subscribers: efriedma, kristof.beyls, chrib, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D53843
llvm-svn: 345641
2018-10-31 04:46:10 +08:00
|
|
|
; RUN: llc -mtriple=aarch64-windows-msvc %s -o - | FileCheck %s
|
|
|
|
; RUN: llc -mtriple=aarch64-linux-gnu %s -o - | FileCheck %s
|
|
|
|
|
|
|
|
target datalayout = "e-m:w-p:64:64-i32:32-i64:64-i128:128-n32:64-S128"
|
|
|
|
|
|
|
|
%class.X = type { i8 }
|
|
|
|
%struct.B = type { i32 (...)** }
|
|
|
|
|
|
|
|
$"??_9B@@$BA@AA" = comdat any
|
|
|
|
|
|
|
|
; Function Attrs: noinline optnone
|
|
|
|
define linkonce_odr void @"??_9B@@$BA@AA"(%struct.B* %this, ...) #1 comdat align 2 {
|
|
|
|
entry:
|
|
|
|
%this.addr = alloca %struct.B*, align 8
|
|
|
|
store %struct.B* %this, %struct.B** %this.addr, align 8
|
|
|
|
%this1 = load %struct.B*, %struct.B** %this.addr, align 8
|
|
|
|
call void asm sideeffect "", "~{d0}"()
|
|
|
|
%0 = bitcast %struct.B* %this1 to void (%struct.B*, ...)***
|
|
|
|
%vtable = load void (%struct.B*, ...)**, void (%struct.B*, ...)*** %0, align 8
|
|
|
|
%vfn = getelementptr inbounds void (%struct.B*, ...)*, void (%struct.B*, ...)** %vtable, i64 0
|
|
|
|
%1 = load void (%struct.B*, ...)*, void (%struct.B*, ...)** %vfn, align 8
|
|
|
|
musttail call void (%struct.B*, ...) %1(%struct.B* %this1, ...)
|
|
|
|
ret void
|
|
|
|
; No predecessors!
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
attributes #1 = { noinline optnone "thunk" }
|
|
|
|
|
|
|
|
; CHECK: mov v16.16b, v0.16b
|
2019-05-24 09:27:20 +08:00
|
|
|
; CHECK: ldr x9, [x0]
|
|
|
|
; CHECK: ldr x9, [x9]
|
[COFF, ARM64] Make sure to forward arguments from vararg to musttail vararg
Summary:
Thunk functions in Windows are varag functions that call a musttail function
to pass the arguments after the fixup is done. We need to make sure that we
forward the arguments from the caller vararg to the callee vararg function.
This is the same mechanism that is used for Windows on X86.
Reviewers: ssijaric, eli.friedman, TomTan, mgrang, mstorsjo, rnk, compnerd, efriedma
Reviewed By: efriedma
Subscribers: efriedma, kristof.beyls, chrib, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D53843
llvm-svn: 345641
2018-10-31 04:46:10 +08:00
|
|
|
; CHECK: mov v0.16b, v16.16b
|
2019-05-24 09:27:20 +08:00
|
|
|
; CHECK: br x9
|