mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-07 19:47:53 +00:00
214e572d5f
Since the outliner is a module pass, it doesn't get codegen size remarks like the other codegen passes do. This adds size remarks *to* the outliner. This is kind of a workaround, so it's peppered with FIXMEs; size remarks really ought to not ever be handled by the pass itself. However, since the outliner is the only "MachineModulePass", this works for now. Since the entire purpose of the MachineOutliner is to produce code size savings, it really ought to be included in codgen size remarks. If we ever go ahead and make a MachineModulePass (say, something similar to MachineFunctionPass), then all of this ought to be moved there. llvm-svn: 342009
82 lines
2.8 KiB
YAML
82 lines
2.8 KiB
YAML
# RUN: llc -mtriple=aarch64-apple-darwin -run-pass=prologepilog \
|
|
# RUN: -run-pass=machine-outliner %s -pass-remarks-analysis='size-info' \
|
|
# RUN: -pass-remarks-output=%t.yaml -o /dev/null < %s 2> %t; \
|
|
# RUN: cat %t %t.yaml | FileCheck %s
|
|
|
|
# Ensure that the MachineOutliner produces codegen size remarks. Make sure...
|
|
# - Functions that are outlined from shrink in the remark (foo)
|
|
# - Outlined functions start with 0 instructions
|
|
# - Outlined functions end with the same number of instructions as the delta
|
|
|
|
# CHECK: remark: <unknown>:0:0: Machine Outliner: Function: foo:
|
|
# CHECK-SAME: MI instruction count changed from
|
|
# CHECK-SAME: [[FOO1:[1-9][0-9]*]] to [[FOO2:[1-9][0-9]*]];
|
|
# CHECK-SAME: Delta: [[FOODELTA:-?[1-9][0-9]*]]
|
|
# CHECK-NEXT: remark: <unknown>:0:0: Machine Outliner:
|
|
# CHECK-SAME: Function: OUTLINED_FUNCTION_0: MI instruction count changed from
|
|
# CHECK-SAME: 0 to [[OFUNCSIZE:[1-9][0-9]*]]; Delta: [[OFUNCSIZE]]
|
|
# CHECK-DAG: - Pass: Machine Outliner
|
|
# CHECK-NEXT: - String: ': Function: '
|
|
# CHECK-NEXT: - Function: foo
|
|
# CHECK-NEXT: - String: ': MI instruction count changed from '
|
|
# CHECK-NEXT: - MIInstrsBefore: '[[FOO1]]'
|
|
# CHECK-NEXT: - String: ' to '
|
|
# CHECK-NEXT: - MIInstrsAfter: '[[FOO2]]'
|
|
# CHECK-NEXT: - String: '; Delta: '
|
|
# CHECK-NEXT: - Delta: '[[FOODELTA]]'
|
|
# CHECK-NEXT:...
|
|
# CHECK-NEXT: --- !Analysis
|
|
# CHECK-NEXT: Pass: size-info
|
|
# CHECK-NEXT: Name: FunctionMISizeChange
|
|
# CHECK-NEXT: Function: OUTLINED_FUNCTION_0
|
|
# CHECK-NEXT: Args:
|
|
# CHECK-NEXT: - Pass: Machine Outliner
|
|
# CHECK-NEXT: - String: ': Function: '
|
|
# CHECK-NEXT: - Function: OUTLINED_FUNCTION_0
|
|
# CHECK-NEXT: - String: ': MI instruction count changed from '
|
|
# CHECK-NEXT: - MIInstrsBefore: '0'
|
|
# CHECK-NEXT: - String: ' to '
|
|
# CHECK-NEXT: - MIInstrsAfter: '[[OFUNCSIZE]]'
|
|
# CHECK-NEXT: - String: '; Delta: '
|
|
# CHECK-NEXT: - Delta: '[[OFUNCSIZE]]'
|
|
...
|
|
--- |
|
|
|
|
define void @foo() #0 {
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { minsize noinline noredzone "no-frame-pointer-elim"="true" }
|
|
...
|
|
---
|
|
name: foo
|
|
tracksRegLiveness: true
|
|
fixedStack:
|
|
body: |
|
|
bb.0:
|
|
liveins: $lr, $w9
|
|
$x25 = ORRXri $xzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 2
|
|
bb.1:
|
|
liveins: $lr, $w9
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 2
|
|
bb.2:
|
|
liveins: $lr, $w9
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 1
|
|
$w9 = ORRWri $wzr, 2
|
|
RET undef $lr
|