Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 1 | ; RUN: opt < %s -deadargelim -S | FileCheck %s |
Chris Lattner | 5c1bfd0 | 2006-09-18 07:01:39 +0000 | [diff] [blame] | 2 | |
Tanya Lattner | 5640bd1 | 2008-03-01 09:15:35 +0000 | [diff] [blame] | 3 | define i32 @bar(i32 %A) { |
David Blaikie | 23af648 | 2015-04-16 23:24:18 +0000 | [diff] [blame] | 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 ) |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 7 | %c = add i32 %a, %b |
| 8 | ret i32 %c |
Chris Lattner | 5c1bfd0 | 2006-09-18 07:01:39 +0000 | [diff] [blame] | 9 | } |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 10 | ; CHECK-LABEL: define i32 @bar |
David Blaikie | 23af648 | 2015-04-16 23:24:18 +0000 | [diff] [blame] | 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) |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 13 | ; CHECK: call i32 @no_vastart(i32 %A) |
Chris Lattner | 5c1bfd0 | 2006-09-18 07:01:39 +0000 | [diff] [blame] | 14 | |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 15 | declare void @thunk_target(i32 %X, ...) |
| 16 | |
| 17 | define internal void @thunk(i32 %X, ...) { |
David Blaikie | 23af648 | 2015-04-16 23:24:18 +0000 | [diff] [blame] | 18 | musttail call void(i32, ...) @thunk_target(i32 %X, ...) |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 19 | ret void |
Chris Lattner | 5c1bfd0 | 2006-09-18 07:01:39 +0000 | [diff] [blame] | 20 | } |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 21 | ; CHECK-LABEL: define internal void @thunk(i32 %X, ...) |
David Blaikie | 23af648 | 2015-04-16 23:24:18 +0000 | [diff] [blame] | 22 | ; CHECK: musttail call void (i32, ...) @thunk_target(i32 %X, ...) |
Chris Lattner | 5c1bfd0 | 2006-09-18 07:01:39 +0000 | [diff] [blame] | 23 | |
Reid Kleckner | 3715461 | 2014-08-26 00:59:51 +0000 | [diff] [blame] | 24 | define 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 | |
| 31 | declare void @llvm.va_start(i8*) |
| 32 | |
| 33 | define internal i32 @no_vastart(i32 %X, ...) { |
| 34 | ret i32 %X |
| 35 | } |
| 36 | ; CHECK-LABEL: define internal i32 @no_vastart(i32 %X) |