OLD | NEW |
(Empty) | |
| 1 ; This is a basic test of the alloca instruction and a call. |
| 2 |
| 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 4 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 5 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 6 |
| 7 declare void @copy(i32 %arg1, i8* %arr1, i8* %arr2, i8* %arr3, i8* %arr4); |
| 8 |
| 9 ; Test that alloca base addresses get passed correctly to functions. |
| 10 define internal void @caller1(i32 %arg) { |
| 11 entry: |
| 12 %a1 = alloca i8, i32 32, align 4 |
| 13 %p1 = bitcast i8* %a1 to i32* |
| 14 store i32 %arg, i32* %p1, align 1 |
| 15 call void @copy(i32 %arg, i8* %a1, i8* %a1, i8* %a1, i8* %a1) |
| 16 ret void |
| 17 } |
| 18 |
| 19 ; CHECK-LABEL: caller1 |
| 20 ; CHECK-NEXT: sub esp,0xc |
| 21 ; CHECK-NEXT: mov eax,DWORD PTR [esp+0x10] |
| 22 ; CHECK-NEXT: sub esp,0x20 |
| 23 ; CHECK-NEXT: mov ecx,esp |
| 24 ; CHECK-NEXT: mov DWORD PTR [esp],eax |
| 25 ; CHECK-NEXT: sub esp,0x20 |
| 26 ; CHECK-NEXT: mov DWORD PTR [esp],eax |
| 27 ; CHECK-NEXT: lea eax,[esp+0x20] |
| 28 ; CHECK-NEXT: mov DWORD PTR [esp+0x4],eax |
| 29 ; CHECK-NEXT: lea eax,[esp+0x20] |
| 30 ; CHECK-NEXT: mov DWORD PTR [esp+0x8],eax |
| 31 ; CHECK-NEXT: lea eax,[esp+0x20] |
| 32 ; CHECK-NEXT: mov DWORD PTR [esp+0xc],eax |
| 33 ; CHECK-NEXT: lea eax,[esp+0x20] |
| 34 ; CHECK-NEXT: mov DWORD PTR [esp+0x10],eax |
| 35 ; CHECK-NEXT: call |
| 36 ; CHECK-NEXT: add esp,0x20 |
| 37 ; CHECK-NEXT: add esp,0x2c |
| 38 ; CHECK-NEXT: ret |
| 39 |
| 40 ; Test that alloca base addresses get passed correctly to functions. |
| 41 define internal void @caller2(i32 %arg) { |
| 42 entry: |
| 43 %a1 = alloca i8, i32 32, align 4 |
| 44 %a2 = alloca i8, i32 32, align 4 |
| 45 %p1 = bitcast i8* %a1 to i32* |
| 46 %p2 = bitcast i8* %a2 to i32* |
| 47 store i32 %arg, i32* %p1, align 1 |
| 48 store i32 %arg, i32* %p2, align 1 |
| 49 call void @copy(i32 %arg, i8* %a1, i8* %a2, i8* %a1, i8* %a2) |
| 50 ret void |
| 51 } |
| 52 |
| 53 ; CHECK-LABEL: caller2 |
| 54 ; CHECK-NEXT: sub esp,0xc |
| 55 ; CHECK-NEXT: mov eax,DWORD PTR [esp+0x10] |
| 56 ; CHECK-NEXT: sub esp,0x40 |
| 57 ; CHECK-NEXT: mov ecx,esp |
| 58 ; CHECK-NEXT: mov DWORD PTR [esp],eax |
| 59 ; CHECK-NEXT: mov DWORD PTR [esp+0x20],eax |
| 60 ; CHECK-NEXT: sub esp,0x20 |
| 61 ; CHECK-NEXT: mov DWORD PTR [esp],eax |
| 62 ; CHECK-NEXT: lea eax,[esp+0x20] |
| 63 ; CHECK-NEXT: mov DWORD PTR [esp+0x4],eax |
| 64 ; CHECK-NEXT: lea eax,[esp+0x40] |
| 65 ; CHECK-NEXT: mov DWORD PTR [esp+0x8],eax |
| 66 ; CHECK-NEXT: lea eax,[esp+0x20] |
| 67 ; CHECK-NEXT: mov DWORD PTR [esp+0xc],eax |
| 68 ; CHECK-NEXT: lea eax,[esp+0x40] |
| 69 ; CHECK-NEXT: mov DWORD PTR [esp+0x10],eax |
| 70 ; CHECK-NEXT: call |
| 71 ; CHECK-NEXT: add esp,0x20 |
| 72 ; CHECK-NEXT: add esp,0x4c |
| 73 ; CHECK-NEXT: ret |
OLD | NEW |