1# RUN: llc -mtriple=aarch64--- -run-pass=machine-outliner \
2# RUN: -verify-machineinstrs %s -o - | FileCheck %s
3
4--- |
5  define void @no-save1() #0 { ret void }
6  define void @no-save2() #0 { ret void }
7  define void @reg-save() #0 { ret void }
8  define void @stack-save() #0 { ret void }
9  attributes #0 = { minsize noinline noredzone "frame-pointer"="all" }
10...
11---
12
13name:            no-save1
14tracksRegLiveness: true
15body:             |
16  bb.0:
17  liveins: $lr
18  $lr = ORRXri $xzr, 1
19  bb.1:
20    ; CHECK-LABEL: name:            no-save1
21    ; CHECK: BL [[FN:@OUTLINED_FUNCTION_[0-9]+]]
22    ; CHECK-NOT: STRXpre
23    ; CHECK-NOT: $lr =
24    ; CHECK-NOT: ORRXrs
25    $x12 = ADDXri $sp, 48, 0;
26    $x12 = ADDXri $sp, 48, 0;
27    $x12 = ADDXri $sp, 48, 0;
28    $x12 = ADDXri $sp, 48, 0;
29    $x12 = ADDXri $sp, 48, 0;
30  bb.2:
31    RET undef $lr
32
33...
34---
35
36name:            no-save2
37tracksRegLiveness: true
38body:             |
39  bb.0:
40  liveins: $lr
41  $lr = ORRXri $xzr, 1
42  bb.1:
43    ; CHECK-LABEL: name:            no-save2
44    ; CHECK: BL [[FN]]
45    ; CHECK-NOT: STRXpre
46    ; CHECK-NOT: $lr =
47    ; CHECK-NOT: ORRXrs
48    $x12 = ADDXri $sp, 48, 0;
49    $x12 = ADDXri $sp, 48, 0;
50    $x12 = ADDXri $sp, 48, 0;
51    $x12 = ADDXri $sp, 48, 0;
52    $x12 = ADDXri $sp, 48, 0;
53  bb.2:
54    RET undef $lr
55...
56---
57
58name:            reg-save
59tracksRegLiveness: true
60body:             |
61  bb.0:
62  liveins: $lr
63  $lr = ORRXri $xzr, 1
64  bb.1:
65  liveins: $lr
66    ; CHECK-LABEL: name:            reg-save
67    ; CHECK: $[[REG:x[0-9]+]] = ORRXrs $xzr, $lr, 0
68    ; CHECK-NEXT: BL [[FN]]
69    ; CHECK-NEXT: $lr = ORRXrs $xzr, $[[REG]], 0
70    $x12 = ADDXri $sp, 48, 0;
71    $x12 = ADDXri $sp, 48, 0;
72    $x12 = ADDXri $sp, 48, 0;
73    $x12 = ADDXri $sp, 48, 0;
74    $x12 = ADDXri $sp, 48, 0;
75  bb.2:
76  liveins: $lr
77    RET undef $lr
78
79...
80---
81
82name:            stack-save
83tracksRegLiveness: true
84body:             |
85  bb.0:
86  liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp
87  $lr = ORRXri $xzr, 1
88  bb.1:
89  liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp
90    ; CHECK-LABEL: name:            stack-save
91    ; CHECK-NOT: BL
92    $x12 = ADDXri $sp, 48, 0;
93    $x12 = ADDXri $sp, 48, 0;
94    $x12 = ADDXri $sp, 48, 0;
95    $x12 = ADDXri $sp, 48, 0;
96    $x12 = ADDXri $sp, 48, 0;
97  bb.2:
98  liveins: $lr, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15, $x18, $x19, $x20, $x21, $x22, $x23, $x20, $x21, $x22, $x23, $x24, $x25, $x26, $x27, $x28, $fp
99    RET undef $lr
100