| 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 |