1; RUN: opt < %s -deadargelim -S | FileCheck %s
2
3define i32 @bar(i32 %A) {
4  call void (i32, ...)* @thunk(i32 %A, i64 47, double 1.000000e+00)
5  %a = call i32 (i32, ...)* @has_vastart(i32 %A, i64 47, double 1.000000e+00)
6  %b = call i32 (i32, ...)* @no_vastart( i32 %A, i32 %A, i32 %A, i32 %A, i64 47, double 1.000000e+00 )
7  %c = add i32 %a, %b
8  ret i32 %c
9}
10; CHECK-LABEL: define i32 @bar
11; CHECK: call void (i32, ...)* @thunk(i32 %A, i64 47, double 1.000000e+00)
12; CHECK: call i32 (i32, ...)* @has_vastart(i32 %A, i64 47, double 1.000000e+00)
13; CHECK: call i32 @no_vastart(i32 %A)
14
15declare void @thunk_target(i32 %X, ...)
16
17define internal void @thunk(i32 %X, ...) {
18  musttail call void(i32, ...)* @thunk_target(i32 %X, ...)
19  ret void
20}
21; CHECK-LABEL: define internal void @thunk(i32 %X, ...)
22; CHECK: musttail call void (i32, ...)* @thunk_target(i32 %X, ...)
23
24define internal i32 @has_vastart(i32 %X, ...) {
25  %valist = alloca i8
26  call void @llvm.va_start(i8* %valist)
27  ret i32 %X
28}
29; CHECK-LABEL: define internal i32 @has_vastart(i32 %X, ...)
30
31declare void @llvm.va_start(i8*)
32
33define internal i32 @no_vastart(i32 %X, ...) {
34  ret i32 %X
35}
36; CHECK-LABEL: define internal i32 @no_vastart(i32 %X)
37