[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-returnaddress-liveins.mir
blobfc940f908afe62e7b2a3fad3c36c04dd5af46a37
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -global-isel -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
5   define void @lr_other_block() { ret void }
6   define void @already_live_in() { ret void }
7   define void @multi_use() { ret void }
8   declare i8* @llvm.returnaddress(i32 immarg)
9 ...
10 ---
11 name:            lr_other_block
12 alignment:       4
13 legalized:       true
14 regBankSelected: true
15 tracksRegLiveness: true
16 body:             |
17   ; CHECK-LABEL: name: lr_other_block
18   ; CHECK: bb.0:
19   ; CHECK:   successors: %bb.1(0x80000000)
20   ; CHECK:   liveins: $w0, $x0, $lr
21   ; CHECK:   [[COPY:%[0-9]+]]:gpr64 = COPY $lr
22   ; CHECK: bb.1:
23   ; CHECK:   $lr = COPY [[COPY]]
24   ; CHECK:   XPACLRI implicit-def $lr, implicit $lr
25   ; CHECK:   [[COPY1:%[0-9]+]]:gpr64 = COPY $lr
26   ; CHECK:   $x0 = COPY [[COPY1]]
27   ; CHECK:   RET_ReallyLR implicit $x0
28   ; LR should be added as a livein to the entry block.
30   bb.0:
31     ; We should have lr as a livein to bb.0, and a copy from LR.
32     liveins: $w0, $x0
33     G_BR %bb.1
34   bb.1:
35     %4:gpr(p0) = G_INTRINSIC intrinsic(@llvm.returnaddress), 0
36     $x0 = COPY %4
37     RET_ReallyLR implicit $x0
38 ...
39 ---
40 name:            already_live_in
41 alignment:       4
42 legalized:       true
43 regBankSelected: true
44 tracksRegLiveness: true
45 body:             |
46   ; CHECK-LABEL: name: already_live_in
47   ; CHECK: bb.0:
48   ; CHECK:   successors: %bb.1(0x80000000)
49   ; CHECK:   liveins: $w0, $x0, $lr
50   ; CHECK:   [[COPY:%[0-9]+]]:gpr64 = COPY $lr
51   ; CHECK: bb.1:
52   ; CHECK:   $lr = COPY [[COPY]]
53   ; CHECK:   XPACLRI implicit-def $lr, implicit $lr
54   ; CHECK:   [[COPY1:%[0-9]+]]:gpr64 = COPY $lr
55   ; CHECK:   $x0 = COPY [[COPY1]]
56   ; CHECK:   RET_ReallyLR implicit $x0
57   ; We should not have LR listed as a livein twice.
59   bb.0:
60     liveins: $w0, $x0, $lr
61     G_BR %bb.1
62   bb.1:
63     %4:gpr(p0) = G_INTRINSIC intrinsic(@llvm.returnaddress), 0
64     $x0 = COPY %4
65     RET_ReallyLR implicit $x0
66 ...
68 # Check copies are inserted in the right places when selecting
69 # multiple uses in different blocks
70 ---
71 name:            multi_use
72 alignment:       4
73 legalized:       true
74 regBankSelected: true
75 tracksRegLiveness: true
76 body:             |
77   ; CHECK-LABEL: name: multi_use
78   ; CHECK: bb.0:
79   ; CHECK:   successors: %bb.1(0x80000000)
80   ; CHECK:   liveins: $w0, $x0, $lr
81   ; CHECK:   [[COPY:%[0-9]+]]:gpr64 = COPY $lr
82   ; CHECK:   $lr = COPY [[COPY]]
83   ; CHECK:   XPACLRI implicit-def $lr, implicit $lr
84   ; CHECK:   [[COPY1:%[0-9]+]]:gpr64 = COPY $lr
85   ; CHECK: bb.1:
86   ; CHECK:   $x0 = COPY [[COPY1]]
87   ; CHECK:   $lr = COPY [[COPY]]
88   ; CHECK:   XPACLRI implicit-def $lr, implicit $lr
89   ; CHECK:   [[COPY2:%[0-9]+]]:gpr64 = COPY $lr
90   ; CHECK:   RET_ReallyLR implicit [[COPY2]]
91   bb.0:
92     liveins: $w0, $x0, $lr
93     %0:gpr(p0) = G_INTRINSIC intrinsic(@llvm.returnaddress), 0
94     G_BR %bb.1
95   bb.1:
96     $x0 = COPY %0
97     %1:gpr(p0) = G_INTRINSIC intrinsic(@llvm.returnaddress), 0
98     RET_ReallyLR implicit %1
99 ...