[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / machine-outliner-noreturn-save-lr.mir
blob157cbbb51b5b78245d0fbf47a6eb26bbef843ebf
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=machine-outliner -verify-machineinstrs %s -o - | FileCheck %s
4 # Verify that we save + restore LR around calls to outlined functions from
5 # noreturn parents. LR isn't actually used, but debuggers need LR in this case
6 # to get a backtrace.
8 --- |
9   define void @save_lr_1() #0 { ret void }
10   define void @save_lr_2() #0 { ret void }
11   define void @save_lr_3() #0 { ret void }
12   define void @save_lr_4() #0 { ret void }
13   attributes #0 = { noredzone noreturn }
14 ...
15 ---
17 name:            save_lr_1
18 alignment:       4
19 tracksRegLiveness: true
20 frameInfo:
21   maxAlignment:    1
22   maxCallFrameSize: 0
23 machineFunctionInfo: {}
24 body:             |
25   bb.0:
26     liveins: $lr
27     ; CHECK-LABEL: name: save_lr_1
28     ; CHECK: liveins: $lr
29     ; CHECK: $x0 = ORRXrs $xzr, $lr, 0
30     ; CHECK: BL @OUTLINED_FUNCTION_0, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $w3, implicit-def $w4, implicit-def $w5, implicit-def $w6, implicit $sp, implicit $wzr, implicit $xzr, implicit $x0
31     ; CHECK: $lr = ORRXrs $xzr, $x0, 0
32     $w3 = ORRWri $wzr, 1
33     $w4 = ORRWri $wzr, 1
34     BRK 1
35     $w5 = ORRWri $wzr, 1
36     $w6 = ORRWri $wzr, 1
37 ...
38 ---
39 name:            save_lr_2
40 alignment:       4
41 tracksRegLiveness: true
42 frameInfo:
43   maxAlignment:    1
44   maxCallFrameSize: 0
45 machineFunctionInfo: {}
46 body:             |
47   bb.0:
48     liveins: $lr
49     ; CHECK-LABEL: name: save_lr_2
50     ; CHECK: liveins: $lr
51     ; CHECK: $x0 = ORRXrs $xzr, $lr, 0
52     ; CHECK: BL @OUTLINED_FUNCTION_0, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $w3, implicit-def $w4, implicit-def $w5, implicit-def $w6, implicit $sp, implicit $wzr, implicit $xzr, implicit $x0
53     ; CHECK: $lr = ORRXrs $xzr, $x0, 0
54     $w3 = ORRWri $wzr, 1
55     $w4 = ORRWri $wzr, 1
56     BRK 1
57     $w5 = ORRWri $wzr, 1
58     $w6 = ORRWri $wzr, 1
59 ...
60 ---
61 name:            save_lr_3
62 alignment:       4
63 tracksRegLiveness: true
64 frameInfo:
65   maxAlignment:    1
66   maxCallFrameSize: 0
67 machineFunctionInfo: {}
68 body:             |
69   bb.0:
70     liveins: $lr
71     ; CHECK-LABEL: name: save_lr_3
72     ; CHECK: liveins: $lr
73     ; CHECK: $x0 = ORRXrs $xzr, $lr, 0
74     ; CHECK: BL @OUTLINED_FUNCTION_0, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $w3, implicit-def $w4, implicit-def $w5, implicit-def $w6, implicit $sp, implicit $wzr, implicit $xzr, implicit $x0
75     ; CHECK: $lr = ORRXrs $xzr, $x0, 0
76     $w3 = ORRWri $wzr, 1
77     $w4 = ORRWri $wzr, 1
78     BRK 1
79     $w5 = ORRWri $wzr, 1
80     $w6 = ORRWri $wzr, 1
81 ...
82 ---
83 name:            save_lr_4
84 alignment:       4
85 tracksRegLiveness: true
86 frameInfo:
87   maxAlignment:    1
88   maxCallFrameSize: 0
89 machineFunctionInfo: {}
90 body:             |
91   bb.0:
92     liveins: $lr
93     ; CHECK-LABEL: name: save_lr_4
94     ; CHECK: liveins: $lr
95     ; CHECK: $x0 = ORRXrs $xzr, $lr, 0
96     ; CHECK: BL @OUTLINED_FUNCTION_0, implicit-def $lr, implicit $sp, implicit-def $lr, implicit-def $w3, implicit-def $w4, implicit-def $w5, implicit-def $w6, implicit $sp, implicit $wzr, implicit $xzr, implicit $x0
97     ; CHECK: $lr = ORRXrs $xzr, $x0, 0
98     $w3 = ORRWri $wzr, 1
99     $w4 = ORRWri $wzr, 1
100     BRK 1
101     $w5 = ORRWri $wzr, 1
102     $w6 = ORRWri $wzr, 1