llvm-project/llvm/test/CodeGen/AArch64/machine-outliner-mapper-debug-output.mir
Sam Elliott 0d08cb0e70
[outliners] Turn nooutline into an Enum Attribute (#163665)
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).
2026-02-10 21:44:17 -08:00

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