mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
4bf7d5872e
Upgrade of the IR text tests should be the only thing blocking making typed byval mandatory. Partially done through regex and partially manual.
39 lines
1.2 KiB
LLVM
39 lines
1.2 KiB
LLVM
; RUN: opt < %s -deadargelim -S | FileCheck %s
|
|
|
|
declare void @llvm.va_start(i8*)
|
|
|
|
define internal i32 @va_func(i32 %a, i32 %b, ...) {
|
|
%valist = alloca i8
|
|
call void @llvm.va_start(i8* %valist)
|
|
|
|
ret i32 %b
|
|
}
|
|
|
|
; Function derived from AArch64 ABI, where 8 integer arguments go in
|
|
; registers but the 9th goes on the stack. We really don't want to put
|
|
; just 7 args in registers and then start on the stack since any
|
|
; va_arg implementation already present in va_func won't be expecting
|
|
; it.
|
|
define i32 @call_va(i32 %in) {
|
|
%stacked = alloca i32
|
|
store i32 42, i32* %stacked
|
|
%res = call i32(i32, i32, ...) @va_func(i32 %in, i32 %in, [6 x i32] undef, i32* byval(i32) %stacked)
|
|
ret i32 %res
|
|
; CHECK: call i32 (i32, i32, ...) @va_func(i32 undef, i32 %in, [6 x i32] undef, i32* byval(i32) %stacked)
|
|
}
|
|
|
|
define internal i32 @va_deadret_func(i32 %a, i32 %b, ...) {
|
|
%valist = alloca i8
|
|
call void @llvm.va_start(i8* %valist)
|
|
|
|
ret i32 %a
|
|
}
|
|
|
|
define void @call_deadret(i32 %in) {
|
|
%stacked = alloca i32
|
|
store i32 42, i32* %stacked
|
|
call i32 (i32, i32, ...) @va_deadret_func(i32 undef, i32 %in, [6 x i32] undef, i32* byval(i32) %stacked)
|
|
ret void
|
|
; CHECK: call void (i32, i32, ...) @va_deadret_func(i32 undef, i32 undef, [6 x i32] undef, i32* byval(i32) %stacked)
|
|
}
|