1661e288aSMichael Kuperstein; RUN: llvm-dis < %s.bc| FileCheck %s
2*c8eccd11SDuncan P. N. Exon Smith; RUN: verify-uselistorder < %s.bc
3661e288aSMichael Kuperstein
4661e288aSMichael Kuperstein; vaArgIntrinsic.3.2.ll.bc was generated by passing this file to llvm-as-3.2.
5661e288aSMichael Kuperstein; The test checks that LLVM does not misread variable argument intrinsic instructions
6661e288aSMichael Kuperstein; of older bitcode files.
7661e288aSMichael Kuperstein
8661e288aSMichael Kupersteindefine i32 @varArgIntrinsic(i32 %X, ...) {
9661e288aSMichael Kuperstein
10661e288aSMichael Kuperstein  %ap = alloca i8*
11661e288aSMichael Kuperstein  %ap2 = bitcast i8** %ap to i8*
12661e288aSMichael Kuperstein
13661e288aSMichael Kuperstein; CHECK: call void @llvm.va_start(i8* %ap2)
14661e288aSMichael Kuperstein  call void @llvm.va_start(i8* %ap2)
15661e288aSMichael Kuperstein
16661e288aSMichael Kuperstein; CHECK-NEXT: %tmp = va_arg i8** %ap, i32
17661e288aSMichael Kuperstein  %tmp = va_arg i8** %ap, i32
18661e288aSMichael Kuperstein
19661e288aSMichael Kuperstein  %aq = alloca i8*
20661e288aSMichael Kuperstein  %aq2 = bitcast i8** %aq to i8*
21661e288aSMichael Kuperstein
22661e288aSMichael Kuperstein; CHECK: call void @llvm.va_copy(i8* %aq2, i8* %ap2)
23661e288aSMichael Kuperstein  call void @llvm.va_copy(i8* %aq2, i8* %ap2)
24661e288aSMichael Kuperstein; CHECK-NEXT: call void @llvm.va_end(i8* %aq2)
25661e288aSMichael Kuperstein  call void @llvm.va_end(i8* %aq2)
26661e288aSMichael Kuperstein
27661e288aSMichael Kuperstein; CHECK-NEXT:  call void @llvm.va_end(i8* %ap2)
28661e288aSMichael Kuperstein  call void @llvm.va_end(i8* %ap2)
29661e288aSMichael Kuperstein  ret i32 %tmp
30661e288aSMichael Kuperstein}
31661e288aSMichael Kuperstein
32661e288aSMichael Kupersteindeclare void @llvm.va_start(i8*)
33661e288aSMichael Kupersteindeclare void @llvm.va_copy(i8*, i8*)
34661e288aSMichael Kupersteindeclare void @llvm.va_end(i8*)
35