OLD | NEW |
1 ; Tests basics and corner cases of arm32 sandboxing, using -Om1 in the hope that | 1 ; Tests basics and corner cases of arm32 sandboxing, using -Om1 in the hope that |
2 ; the output will remain stable. When packing bundles, we try to limit to a few | 2 ; the output will remain stable. When packing bundles, we try to limit to a few |
3 ; instructions with well known sizes and minimal use of registers and stack | 3 ; instructions with well known sizes and minimal use of registers and stack |
4 ; slots in the lowering sequence. | 4 ; slots in the lowering sequence. |
5 | 5 |
6 ; REQUIRES: allow_dump, target_ARM32 | 6 ; REQUIRES: allow_dump, target_ARM32 |
7 ; RUN: %p2i -i %s --sandbox --filetype=asm --target=arm32 --assemble \ | 7 ; RUN: %p2i -i %s --sandbox --filetype=asm --target=arm32 --assemble \ |
8 ; RUN: --disassemble --args -Om1 -allow-externally-defined-symbols \ | 8 ; RUN: --disassemble --args -Om1 -allow-externally-defined-symbols \ |
9 ; RUN: -ffunction-sections | FileCheck %s | 9 ; RUN: -ffunction-sections | FileCheck %s |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 define internal void @test_indirect_call(i32 %target) { | 30 define internal void @test_indirect_call(i32 %target) { |
31 entry: | 31 entry: |
32 %__1 = inttoptr i32 %target to void ()* | 32 %__1 = inttoptr i32 %target to void ()* |
33 call void %__1() | 33 call void %__1() |
34 ret void | 34 ret void |
35 } | 35 } |
36 ; CHECK-LABEL: test_indirect_call | 36 ; CHECK-LABEL: test_indirect_call |
37 ; CHECK: sub sp, | 37 ; CHECK: sub sp, |
38 ; CHECK: bic sp, sp, {{.*}} ; 0xc0000000 | 38 ; CHECK: bic sp, sp, {{.*}} ; 0xc0000000 |
39 ; CHECK-NOT: bic sp, sp, {{.*}} ; 0xc0000000 | 39 ; CHECK-NOT: bic sp, sp, {{.*}} ; 0xc0000000 |
40 ; CHECK: ldr [[REG:r[0-9]+]], [sp, | 40 ; CHECK: ldr [[REG:r[0-9]+]], [sp, |
41 ; CHECK-NEXT: nop | 41 ; CHECK-NEXT: nop |
42 ; CHECK: {{[0-9]+}}8: {{.*}} bic [[REG:r[0-9]+]], [[REG]], {{.*}} 0xc000000f | 42 ; CHECK: {{[0-9]+}}8: {{.*}} bic [[REG:r[0-9]+]], [[REG]], {{.*}} 0xc000000f |
43 ; CHECK-NEXT: blx [[REG]] | 43 ; CHECK-NEXT: blx [[REG]] |
44 ; CHECk-NEXT: {{[0-9]+}}0: | 44 ; CHECk-NEXT: {{[0-9]+}}0: |
45 | 45 |
46 ; A return sequences uses the right pop / mask / jmp sequence. | 46 ; A return sequences uses the right pop / mask / jmp sequence. |
47 define internal void @test_ret() { | 47 define internal void @test_ret() { |
48 entry: | 48 entry: |
49 ret void | 49 ret void |
50 } | 50 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 call void @call_target2(i32 1, i32 2) | 133 call void @call_target2(i32 1, i32 2) |
134 ; bundle boundary | 134 ; bundle boundary |
135 ret void | 135 ret void |
136 } | 136 } |
137 ; CHECK-LABEL: bundle_lock_align_to_end_padding_2 | 137 ; CHECK-LABEL: bundle_lock_align_to_end_padding_2 |
138 ; CHECK: mov | 138 ; CHECK: mov |
139 ; CHECK-NEXT: mov | 139 ; CHECK-NEXT: mov |
140 ; CHECK-NEXT: nop | 140 ; CHECK-NEXT: nop |
141 ; CHECK-NEXT: nop | 141 ; CHECK-NEXT: nop |
142 ; CHECK-NEXT: bl {{.*}} call_target2 | 142 ; CHECK-NEXT: bl {{.*}} call_target2 |
OLD | NEW |