# 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