blob: 375415948af1d4b96b58a6de48b1782c5c03536c [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) {
David Blaikie23af6482015-04-16 23:24:18 +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 )
Reid Kleckner37154612014-08-26 00:59:51 +00007 %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
David Blaikie23af6482015-04-16 23:24:18 +000011; 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)
Reid Kleckner37154612014-08-26 00:59:51 +000013; 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, ...) {
David Blaikie23af6482015-04-16 23:24:18 +000018 musttail call void(i32, ...) @thunk_target(i32 %X, ...)
Reid Kleckner37154612014-08-26 00:59:51 +000019 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, ...)
David Blaikie23af6482015-04-16 23:24:18 +000022; 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)