| # RUN: llc -mtriple=aarch64 -debug-only=machine-outliner -run-pass=machine-outliner -verify-machineinstrs %s -o /dev/null 2>&1 | FileCheck %s |
| # REQUIRES: asserts |
| |
| # CHECK-LABEL: *** Populating mapper *** |
| # CHECK-NEXT: MAPPING FUNCTION: block_too_small |
| # CHECK-NEXT: MAPPING MBB: '' |
| # CHECK-NEXT: SKIP: MBB size less than minimum size of 2 |
| # CHECK-NEXT: MAPPING FUNCTION: no_outline |
| # CHECK-NEXT: SKIP: Function has nooutline attribute |
| # CHECK-NEXT: MAPPING FUNCTION: redzone |
| # CHECK-NEXT: SKIP: redzone: unsafe to outline from |
| # CHECK-NEXT: MAPPING FUNCTION: no_mf |
| # CHECK-NEXT: SKIP: Function does not have a MachineFunction |
| # CHECK-NEXT: MAPPING FUNCTION: block_addr_fn |
| # CHECK-NEXT: MAPPING MBB: 'label' |
| # CHECK-NEXT: SKIP: MBB's address is taken |
| |
| --- | |
| define void @block_too_small() noredzone { unreachable } |
| define void @no_outline() noredzone "nooutline" { unreachable } |
| define void @redzone() { unreachable } |
| declare void @no_mf() |
| define void @block_addr_fn() noredzone { |
| entry: |
| br label %label |
| label: |
| call void @block_addr_fn(ptr blockaddress(@block_addr_fn, %label)) |
| ret void |
| } |
| ... |
| --- |
| name: no_outline |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $w0, $lr, $w8 |
| RET undef $lr |
| ... |
| --- |
| name: block_too_small |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $w0, $lr, $w8 |
| RET undef $lr |
| ... |
| --- |
| name: block_addr_fn |
| tracksRegLiveness: true |
| body: | |
| bb.0.label (ir-block-address-taken %ir-block.label): |
| liveins: $w0, $lr, $w8 |
| $w0 = ORRWri $wzr, 1 |
| $w0 = ORRWri $wzr, 1 |
| $w0 = ORRWri $wzr, 4 |
| RET undef $lr |
| ... |
| --- |