35fe0e252822bb2ba793ac44bc3b392c3bfaad92
[oota-llvm.git] / test / Bitcode / variableArgumentIntrinsic.3.2.ll
1 ; RUN:  llvm-dis < %s.bc| FileCheck %s\r
2 \r
3 ; vaArgIntrinsic.3.2.ll.bc was generated by passing this file to llvm-as-3.2.\r
4 ; The test checks that LLVM does not misread variable argument intrinsic instructions\r
5 ; of older bitcode files.\r
6 \r
7 define i32 @varArgIntrinsic(i32 %X, ...) {\r
8 \r
9   %ap = alloca i8*\r
10   %ap2 = bitcast i8** %ap to i8*\r
11   \r
12 ; CHECK: call void @llvm.va_start(i8* %ap2)\r
13   call void @llvm.va_start(i8* %ap2)\r
14 \r
15 ; CHECK-NEXT: %tmp = va_arg i8** %ap, i32\r
16   %tmp = va_arg i8** %ap, i32\r
17 \r
18   %aq = alloca i8*\r
19   %aq2 = bitcast i8** %aq to i8*\r
20   \r
21 ; CHECK: call void @llvm.va_copy(i8* %aq2, i8* %ap2)\r
22   call void @llvm.va_copy(i8* %aq2, i8* %ap2)\r
23 ; CHECK-NEXT: call void @llvm.va_end(i8* %aq2)\r
24   call void @llvm.va_end(i8* %aq2)\r
25 \r
26 ; CHECK-NEXT:  call void @llvm.va_end(i8* %ap2)\r
27   call void @llvm.va_end(i8* %ap2)\r
28   ret i32 %tmp\r
29 }\r
30 \r
31 declare void @llvm.va_start(i8*)\r
32 declare void @llvm.va_copy(i8*, i8*)\r
33 declare void @llvm.va_end(i8*)