| OLD | NEW |
| 1 ; This is a basic test of the alloca instruction. | 1 ; This is a basic test of the alloca instruction. |
| 2 | 2 |
| 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 3 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 4 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 4 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 5 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 5 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 6 | 6 |
| 7 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 7 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 8 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 8 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
| 9 ; RUN: | %if --need=target_X8632 --command FileCheck \ | 9 ; RUN: | %if --need=target_X8632 --command FileCheck \ |
| 10 ; RUN: --check-prefix CHECK-OPTM1 %s | 10 ; RUN: --check-prefix CHECK-OPTM1 %s |
| 11 | 11 |
| 12 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) | 12 ; TODO(jvoung): Stop skipping unimplemented parts (via --skip-unimplemented) |
| 13 ; once enough infrastructure is in. Also, switch to --filetype=obj | 13 ; once enough infrastructure is in. Also, switch to --filetype=obj |
| 14 ; when possible. | 14 ; when possible. |
| 15 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 15 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 16 ; RUN: --command %p2i --filetype=asm --assemble \ | 16 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 17 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ | 17 ; RUN: --disassemble --target arm32 -i %s --args -O2 --skip-unimplemented \ |
| 18 ; RUN: -allow-externally-defined-symbols \ | 18 ; RUN: -allow-externally-defined-symbols \ |
| 19 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 19 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 20 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix=ARM-OPT2 %s | 20 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix=ARM-OPT2 %s |
| 21 | 21 |
| 22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 22 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
| 23 ; RUN: --command %p2i --filetype=asm --assemble \ | 23 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 24 ; RUN: --disassemble --target arm32 -i %s --args -Om1 --skip-unimplemented \ | 24 ; RUN: --disassemble --target arm32 -i %s --args -Om1 --skip-unimplemented \ |
| 25 ; RUN: -allow-externally-defined-symbols \ | 25 ; RUN: -allow-externally-defined-symbols \ |
| 26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 26 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
| 27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix=ARM-OPTM1 %s | 27 ; RUN: --command FileCheck --check-prefix ARM32 --check-prefix=ARM-OPTM1 %s |
| 28 | 28 |
| 29 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
| 30 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 31 ; RUN: --disassemble --target mips32 -i %s --args -O2 --skip-unimplemented \ |
| 32 ; RUN: -allow-externally-defined-symbols \ |
| 33 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ |
| 34 ; RUN: --command FileCheck --check-prefix MIPS32 --check-prefix=MIPS32-OPT2 %s |
| 35 |
| 36 ; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
| 37 ; RUN: --command %p2i --filetype=asm --assemble \ |
| 38 ; RUN: --disassemble --target mips32 -i %s --args -Om1 --skip-unimplemented \ |
| 39 ; RUN: -allow-externally-defined-symbols \ |
| 40 ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ |
| 41 ; RUN: --command FileCheck --check-prefix MIPS32 --check-prefix=MIPS32-OPTM1 %
s |
| 42 |
| 29 define internal void @fixed_416_align_16(i32 %n) { | 43 define internal void @fixed_416_align_16(i32 %n) { |
| 30 entry: | 44 entry: |
| 31 %array = alloca i8, i32 416, align 16 | 45 %array = alloca i8, i32 416, align 16 |
| 32 %__2 = ptrtoint i8* %array to i32 | 46 %__2 = ptrtoint i8* %array to i32 |
| 33 call void @f1(i32 %__2) | 47 call void @f1(i32 %__2) |
| 34 ret void | 48 ret void |
| 35 } | 49 } |
| 36 ; CHECK-LABEL: fixed_416_align_16 | 50 ; CHECK-LABEL: fixed_416_align_16 |
| 37 ; CHECK: sub esp,0x1bc | 51 ; CHECK: sub esp,0x1bc |
| 38 ; CHECK: lea eax,[esp+0x10] | 52 ; CHECK: lea eax,[esp+0x10] |
| 39 ; CHECK: mov DWORD PTR [esp],eax | 53 ; CHECK: mov DWORD PTR [esp],eax |
| 40 ; CHECK: call {{.*}} R_{{.*}} f1 | 54 ; CHECK: call {{.*}} R_{{.*}} f1 |
| 41 | 55 |
| 42 ; CHECK-OPTM1-LABEL: fixed_416_align_16 | 56 ; CHECK-OPTM1-LABEL: fixed_416_align_16 |
| 43 ; CHECK-OPTM1: sub esp,0x18 | 57 ; CHECK-OPTM1: sub esp,0x18 |
| 44 ; CHECK-OPTM1: sub esp,0x1a0 | 58 ; CHECK-OPTM1: sub esp,0x1a0 |
| 45 ; CHECK-OPTM1: mov DWORD PTR [esp],eax | 59 ; CHECK-OPTM1: mov DWORD PTR [esp],eax |
| 46 ; CHECK-OPTM1: call {{.*}} R_{{.*}} f1 | 60 ; CHECK-OPTM1: call {{.*}} R_{{.*}} f1 |
| 47 | 61 |
| 48 ; ARM32-LABEL: fixed_416_align_16 | 62 ; ARM32-LABEL: fixed_416_align_16 |
| 49 ; ARM32-OPT2: sub sp, sp, #428 | 63 ; ARM32-OPT2: sub sp, sp, #428 |
| 50 ; ARM32-OPTM1: sub sp, sp, #416 | 64 ; ARM32-OPTM1: sub sp, sp, #416 |
| 51 ; ARM32: bl {{.*}} R_{{.*}} f1 | 65 ; ARM32: bl {{.*}} R_{{.*}} f1 |
| 52 | 66 |
| 67 ; MIPS32-LABEL: fixed_416_align_16 |
| 68 ; MIPS32-OPT2: addiu sp,sp,-440 |
| 69 ; MIPS32-OPTM1: addiu sp,sp,-448 |
| 70 |
| 53 define internal void @fixed_416_align_32(i32 %n) { | 71 define internal void @fixed_416_align_32(i32 %n) { |
| 54 entry: | 72 entry: |
| 55 %array = alloca i8, i32 400, align 32 | 73 %array = alloca i8, i32 400, align 32 |
| 56 %__2 = ptrtoint i8* %array to i32 | 74 %__2 = ptrtoint i8* %array to i32 |
| 57 call void @f1(i32 %__2) | 75 call void @f1(i32 %__2) |
| 58 ret void | 76 ret void |
| 59 } | 77 } |
| 60 ; CHECK-LABEL: fixed_416_align_32 | 78 ; CHECK-LABEL: fixed_416_align_32 |
| 61 ; CHECK: push ebp | 79 ; CHECK: push ebp |
| 62 ; CHECK-NEXT: mov ebp,esp | 80 ; CHECK-NEXT: mov ebp,esp |
| 63 ; CHECK: sub esp,0x1b8 | 81 ; CHECK: sub esp,0x1b8 |
| 64 ; CHECK: and esp,0xffffffe0 | 82 ; CHECK: and esp,0xffffffe0 |
| 65 ; CHECK: lea eax,[esp+0x10] | 83 ; CHECK: lea eax,[esp+0x10] |
| 66 ; CHECK: mov DWORD PTR [esp],eax | 84 ; CHECK: mov DWORD PTR [esp],eax |
| 67 ; CHECK: call {{.*}} R_{{.*}} f1 | 85 ; CHECK: call {{.*}} R_{{.*}} f1 |
| 68 | 86 |
| 69 ; ARM32-LABEL: fixed_416_align_32 | 87 ; ARM32-LABEL: fixed_416_align_32 |
| 70 ; ARM32-OPT2: sub sp, sp, #424 | 88 ; ARM32-OPT2: sub sp, sp, #424 |
| 71 ; ARM32-OPTM1: sub sp, sp, #416 | 89 ; ARM32-OPTM1: sub sp, sp, #416 |
| 72 ; ARM32: bic sp, sp, #31 | 90 ; ARM32: bic sp, sp, #31 |
| 73 ; ARM32: bl {{.*}} R_{{.*}} f1 | 91 ; ARM32: bl {{.*}} R_{{.*}} f1 |
| 74 | 92 |
| 93 ; MIPS32-LABEL: fixed_416_align_32 |
| 94 ; MIPS32-OPT2: addiu sp,sp,-440 |
| 95 ; MIPS32-OPTM1: addiu sp,sp,-448 |
| 96 |
| 75 ; Show that the amount to allocate will be rounded up. | 97 ; Show that the amount to allocate will be rounded up. |
| 76 define internal void @fixed_351_align_16(i32 %n) { | 98 define internal void @fixed_351_align_16(i32 %n) { |
| 77 entry: | 99 entry: |
| 78 %array = alloca i8, i32 351, align 16 | 100 %array = alloca i8, i32 351, align 16 |
| 79 %__2 = ptrtoint i8* %array to i32 | 101 %__2 = ptrtoint i8* %array to i32 |
| 80 call void @f1(i32 %__2) | 102 call void @f1(i32 %__2) |
| 81 ret void | 103 ret void |
| 82 } | 104 } |
| 83 ; CHECK-LABEL: fixed_351_align_16 | 105 ; CHECK-LABEL: fixed_351_align_16 |
| 84 ; CHECK: sub esp,0x17c | 106 ; CHECK: sub esp,0x17c |
| 85 ; CHECK: lea eax,[esp+0x10] | 107 ; CHECK: lea eax,[esp+0x10] |
| 86 ; CHECK: mov DWORD PTR [esp],eax | 108 ; CHECK: mov DWORD PTR [esp],eax |
| 87 ; CHECK: call {{.*}} R_{{.*}} f1 | 109 ; CHECK: call {{.*}} R_{{.*}} f1 |
| 88 | 110 |
| 89 ; CHECK-OPTM1-LABEL: fixed_351_align_16 | 111 ; CHECK-OPTM1-LABEL: fixed_351_align_16 |
| 90 ; CHECK-OPTM1: sub esp,0x18 | 112 ; CHECK-OPTM1: sub esp,0x18 |
| 91 ; CHECK-OPTM1: sub esp,0x160 | 113 ; CHECK-OPTM1: sub esp,0x160 |
| 92 ; CHECK-OPTM1: mov DWORD PTR [esp],eax | 114 ; CHECK-OPTM1: mov DWORD PTR [esp],eax |
| 93 ; CHECK-OPTM1: call {{.*}} R_{{.*}} f1 | 115 ; CHECK-OPTM1: call {{.*}} R_{{.*}} f1 |
| 94 | 116 |
| 95 ; ARM32-LABEL: fixed_351_align_16 | 117 ; ARM32-LABEL: fixed_351_align_16 |
| 96 ; ARM32-OPT2: sub sp, sp, #364 | 118 ; ARM32-OPT2: sub sp, sp, #364 |
| 97 ; ARM32-OPTM1: sub sp, sp, #352 | 119 ; ARM32-OPTM1: sub sp, sp, #352 |
| 98 ; ARM32: bl {{.*}} R_{{.*}} f1 | 120 ; ARM32: bl {{.*}} R_{{.*}} f1 |
| 99 | 121 |
| 122 ; MIPS32-LABEL: fixed_351_align_16 |
| 123 ; MIPS32-OPT2: addiu sp,sp,-376 |
| 124 ; MIPS32-OPTM1: addiu sp,sp,-384 |
| 125 |
| 100 define internal void @fixed_351_align_32(i32 %n) { | 126 define internal void @fixed_351_align_32(i32 %n) { |
| 101 entry: | 127 entry: |
| 102 %array = alloca i8, i32 351, align 32 | 128 %array = alloca i8, i32 351, align 32 |
| 103 %__2 = ptrtoint i8* %array to i32 | 129 %__2 = ptrtoint i8* %array to i32 |
| 104 call void @f1(i32 %__2) | 130 call void @f1(i32 %__2) |
| 105 ret void | 131 ret void |
| 106 } | 132 } |
| 107 ; CHECK-LABEL: fixed_351_align_32 | 133 ; CHECK-LABEL: fixed_351_align_32 |
| 108 ; CHECK: push ebp | 134 ; CHECK: push ebp |
| 109 ; CHECK-NEXT: mov ebp,esp | 135 ; CHECK-NEXT: mov ebp,esp |
| 110 ; CHECK: sub esp,0x178 | 136 ; CHECK: sub esp,0x178 |
| 111 ; CHECK: and esp,0xffffffe0 | 137 ; CHECK: and esp,0xffffffe0 |
| 112 ; CHECK: lea eax,[esp+0x10] | 138 ; CHECK: lea eax,[esp+0x10] |
| 113 ; CHECK: mov DWORD PTR [esp],eax | 139 ; CHECK: mov DWORD PTR [esp],eax |
| 114 ; CHECK: call {{.*}} R_{{.*}} f1 | 140 ; CHECK: call {{.*}} R_{{.*}} f1 |
| 115 | 141 |
| 116 ; ARM32-LABEL: fixed_351_align_32 | 142 ; ARM32-LABEL: fixed_351_align_32 |
| 117 ; ARM32-OPT2: sub sp, sp, #360 | 143 ; ARM32-OPT2: sub sp, sp, #360 |
| 118 ; ARM32-OPTM1: sub sp, sp, #352 | 144 ; ARM32-OPTM1: sub sp, sp, #352 |
| 119 ; ARM32: bic sp, sp, #31 | 145 ; ARM32: bic sp, sp, #31 |
| 120 ; ARM32: bl {{.*}} R_{{.*}} f1 | 146 ; ARM32: bl {{.*}} R_{{.*}} f1 |
| 121 | 147 |
| 148 ; MIPS32-LABEL: fixed_351_align_32 |
| 149 ; MIPS32-OPT2: addiu sp,sp,-376 |
| 150 ; MIPS32-OPTM1: addiu sp,sp,-384 |
| 151 |
| 122 declare void @f1(i32 %ignored) | 152 declare void @f1(i32 %ignored) |
| 123 | 153 |
| 124 declare void @f2(i32 %ignored) | 154 declare void @f2(i32 %ignored) |
| 125 | 155 |
| 126 define internal void @variable_n_align_16(i32 %n) { | 156 define internal void @variable_n_align_16(i32 %n) { |
| 127 entry: | 157 entry: |
| 128 %array = alloca i8, i32 %n, align 16 | 158 %array = alloca i8, i32 %n, align 16 |
| 129 %__2 = ptrtoint i8* %array to i32 | 159 %__2 = ptrtoint i8* %array to i32 |
| 130 call void @f2(i32 %__2) | 160 call void @f2(i32 %__2) |
| 131 ret void | 161 ret void |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 %p1 = bitcast i8* %a1 to i32* | 325 %p1 = bitcast i8* %a1 to i32* |
| 296 %p2 = bitcast i8* %a2 to i32* | 326 %p2 = bitcast i8* %a2 to i32* |
| 297 %p3 = bitcast i8* %a3 to i32* | 327 %p3 = bitcast i8* %a3 to i32* |
| 298 store i32 %arg, i32* %p1, align 1 | 328 store i32 %arg, i32* %p1, align 1 |
| 299 store i32 %arg, i32* %p2, align 1 | 329 store i32 %arg, i32* %p2, align 1 |
| 300 store i32 %arg, i32* %p3, align 1 | 330 store i32 %arg, i32* %p3, align 1 |
| 301 ret void | 331 ret void |
| 302 } | 332 } |
| 303 ; CHECK-LABEL: var_with_frameptr | 333 ; CHECK-LABEL: var_with_frameptr |
| 304 ; CHECK: mov ebp,esp | 334 ; CHECK: mov ebp,esp |
| OLD | NEW |