This change turns the `"nooutline"` attribute into an enum attribute called `nooutline`, and adds an auto-upgrader for bitcode to make the same change to existing IR. This IR attribute disables both the Machine Outliner (enabled at Oz for some targets), and the IR Outliner (disabled by default).
59 lines
1.6 KiB
YAML
59 lines
1.6 KiB
YAML
# 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
|
|
...
|
|
---
|