blob: c8189c66b48cd268b51fb9e5ab0ba4582873d1d1 [file] [log] [blame]
Reid Kleckner37154612014-08-26 00:59:51 +00001; RUN: opt < %s -deadargelim -S | FileCheck %s
Chris Lattner5c1bfd02006-09-18 07:01:39 +00002
Tanya Lattner5640bd12008-03-01 09:15:35 +00003define i32 @bar(i32 %A) {
Reid Kleckner37154612014-08-26 00:59:51 +00004 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
Chris Lattner5c1bfd02006-09-18 07:01:39 +00009}
Reid Kleckner37154612014-08-26 00:59:51 +000010; 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)
Chris Lattner5c1bfd02006-09-18 07:01:39 +000014
Reid Kleckner37154612014-08-26 00:59:51 +000015declare void @thunk_target(i32 %X, ...)
16
17define internal void @thunk(i32 %X, ...) {
18 musttail call void(i32, ...)* @thunk_target(i32 %X, ...)
19 ret void
Chris Lattner5c1bfd02006-09-18 07:01:39 +000020}
Reid Kleckner37154612014-08-26 00:59:51 +000021; CHECK-LABEL: define internal void @thunk(i32 %X, ...)
22; CHECK: musttail call void (i32, ...)* @thunk_target(i32 %X, ...)
Chris Lattner5c1bfd02006-09-18 07:01:39 +000023
Reid Kleckner37154612014-08-26 00:59:51 +000024define 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)