OLD | NEW |
1 ; This tries to create variables with very large stack offsets. | 1 ; This tries to create variables with very large stack offsets. |
2 ; This requires a lot of variables/register pressure. To simplify this | 2 ; This requires a lot of variables/register pressure. To simplify this |
3 ; we assume poor register allocation from Om1, and a flag that forces | 3 ; we assume poor register allocation from Om1, and a flag that forces |
4 ; the frame to add K amount of unused stack for testing. | 4 ; the frame to add K amount of unused stack for testing. |
5 ; We only need to test ARM and other architectures which have limited space | 5 ; We only need to test ARM and other architectures which have limited space |
6 ; for specifying an offset within an instruction. | 6 ; for specifying an offset within an instruction. |
7 | 7 |
8 ; RUN: %if --need=target_ARM32 --need=allow_dump \ | 8 ; RUN: %if --need=target_ARM32 --need=allow_dump \ |
9 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ | 9 ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target arm32 \ |
10 ; RUN: -i %s --args -Om1 --skip-unimplemented --test-stack-extra 4096 \ | 10 ; RUN: -i %s --args -Om1 --skip-unimplemented --test-stack-extra 4096 \ |
| 11 ; RUN: -allow-externally-defined-symbols \ |
11 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ | 12 ; RUN: | %if --need=target_ARM32 --need=allow_dump \ |
12 ; RUN: --command FileCheck --check-prefix ARM32 %s | 13 ; RUN: --command FileCheck --check-prefix ARM32 %s |
13 | 14 |
14 declare i64 @dummy(i32 %t1, i32 %t2, i32 %t3, i64 %t4, i64 %t5) | 15 declare i64 @dummy(i32 %t1, i32 %t2, i32 %t3, i64 %t4, i64 %t5) |
15 | 16 |
16 ; Test a function that requires lots of stack (due to test flag), and uses | 17 ; Test a function that requires lots of stack (due to test flag), and uses |
17 ; SP as the base register (originally). | 18 ; SP as the base register (originally). |
18 define internal i64 @lotsOfStack(i32 %a, i32 %b, i32 %c, i32 %d) { | 19 define internal i64 @lotsOfStack(i32 %a, i32 %b, i32 %c, i32 %d) { |
19 entry: | 20 entry: |
20 %t1 = xor i32 %a, %b | 21 %t1 = xor i32 %a, %b |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 ; ARM32: sub sp, sp, #16 | 125 ; ARM32: sub sp, sp, #16 |
125 ; Now sp1 = sp0 - 16, but ip is still in terms of fp0. | 126 ; Now sp1 = sp0 - 16, but ip is still in terms of fp0. |
126 ; So, fp0 - 4124 == ip - 4. | 127 ; So, fp0 - 4124 == ip - 4. |
127 ; ARM32: ldr r2, [ip, #-4] | 128 ; ARM32: ldr r2, [ip, #-4] |
128 ; ARM32: bl {{.*}} dummy | 129 ; ARM32: bl {{.*}} dummy |
129 ; ARM32: add sp, sp | 130 ; ARM32: add sp, sp |
130 ; The call clobbers ip, so we need to re-create the base register. | 131 ; The call clobbers ip, so we need to re-create the base register. |
131 ; ARM32: movw ip, #4{{.*}} | 132 ; ARM32: movw ip, #4{{.*}} |
132 ; ARM32: b {{[a-f0-9]+}} | 133 ; ARM32: b {{[a-f0-9]+}} |
133 ; ARM32: bl {{.*}} dummy | 134 ; ARM32: bl {{.*}} dummy |
OLD | NEW |