73 lines
1.8 KiB
YAML
73 lines
1.8 KiB
YAML
# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner \
|
|
# RUN: -verify-machineinstrs %s -o - | FileCheck %s
|
|
|
|
# Ensure that we never outline calls into sequences where unsafe stack
|
|
# instructions are present.
|
|
|
|
--- |
|
|
define void @foo() #0 { ret void }
|
|
define void @bar() #0 { ret void }
|
|
define void @baz() #0 { ret void }
|
|
define void @f1() #0 { ret void }
|
|
define void @f2() #0 { ret void }
|
|
attributes #0 = { minsize noinline noredzone "frame-pointer"="all" }
|
|
...
|
|
---
|
|
|
|
name: f1
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $lr
|
|
; CHECK-LABEL: name: f1
|
|
; CHECK: foo
|
|
; CHECK-DAG: bar
|
|
; CHECK-DAG: baz
|
|
$lr = ORRXri $xzr, 1
|
|
BL @foo, implicit-def dead $lr, implicit $sp
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
bb.1:
|
|
BL @bar, implicit-def dead $lr, implicit $sp
|
|
$x11 = ADDXri $sp, 48, 0;
|
|
$x12 = ADDXri $sp, 48, 0;
|
|
$x13 = ADDXri $sp, 48, 0;
|
|
$x14 = ADDXri $sp, 48, 0;
|
|
bb.2:
|
|
BL @baz, implicit-def dead $lr, implicit $sp
|
|
$x0 = ADDXri $sp, 48, 0;
|
|
$x1 = ADDXri $sp, 48, 0;
|
|
RET undef $lr
|
|
|
|
...
|
|
---
|
|
|
|
name: f2
|
|
tracksRegLiveness: true
|
|
body: |
|
|
bb.0:
|
|
liveins: $lr
|
|
; CHECK-LABEL: name: f2
|
|
; CHECK: foo
|
|
; CHECK-DAG: bar
|
|
; CHECK-DAG: baz
|
|
$lr = ORRXri $xzr, 1
|
|
BL @foo, implicit-def dead $lr, implicit $sp
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
$x20, $x19 = LDPXi $sp, 255
|
|
bb.1:
|
|
BL @bar, implicit-def dead $lr, implicit $sp
|
|
$x11 = ADDXri $sp, 48, 0;
|
|
$x12 = ADDXri $sp, 48, 0;
|
|
$x13 = ADDXri $sp, 48, 0;
|
|
$x14 = ADDXri $sp, 48, 0;
|
|
bb.2:
|
|
BL @baz, implicit-def dead $lr, implicit $sp
|
|
$x0 = ADDXri $sp, 48, 0;
|
|
$x1 = ADDXri $sp, 48, 0;
|
|
RET undef $lr
|