[RISCV][VLOPT] Add vector narrowing integer right shift instructions to isSupportedIn...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / ldst-opt.mir
blobaebd36eb9b7365927df4eabc9297888d739c3bc4
1 # RUN: llc -mtriple=aarch64--linux-gnu -run-pass=aarch64-ldst-opt %s -verify-machineinstrs -o - | FileCheck %s
2 ---
3 name: promote-load-from-store
4 tracksRegLiveness: true
5 body: |
6   bb.0:
7     liveins: $w1, $x0, $lr
9     STRWui killed $w1, $x0, 0 :: (store (s32))
10     CFI_INSTRUCTION 0
11     CFI_INSTRUCTION 0
12     CFI_INSTRUCTION 0
13     CFI_INSTRUCTION 0
14     CFI_INSTRUCTION 0
15     CFI_INSTRUCTION 0
16     CFI_INSTRUCTION 0
17     CFI_INSTRUCTION 0
18     CFI_INSTRUCTION 0
19     CFI_INSTRUCTION 0
20     CFI_INSTRUCTION 0
21     CFI_INSTRUCTION 0
22     CFI_INSTRUCTION 0
23     CFI_INSTRUCTION 0
24     CFI_INSTRUCTION 0
25     CFI_INSTRUCTION 0
26     CFI_INSTRUCTION 0
27     CFI_INSTRUCTION 0
28     CFI_INSTRUCTION 0
29     CFI_INSTRUCTION 0
30     $w0 = LDRHHui killed $x0, 1 :: (load (s16))
31     RET $lr, implicit $w0
33 ...
34 # Don't count transient instructions towards search limits.
35 # CHECK-LABEL: name: promote-load-from-store
36 # CHECK: STRWui $w1
37 # CHECK: UBFMWri killed $w1
38 ---
39 name: store-pair
40 tracksRegLiveness: true
41 body: |
42   bb.0:
43     liveins: $w1, $x0, $lr
45     STRWui $w1, $x0, 0 :: (store (s32))
46     CFI_INSTRUCTION 0
47     CFI_INSTRUCTION 0
48     CFI_INSTRUCTION 0
49     CFI_INSTRUCTION 0
50     CFI_INSTRUCTION 0
51     CFI_INSTRUCTION 0
52     CFI_INSTRUCTION 0
53     CFI_INSTRUCTION 0
54     CFI_INSTRUCTION 0
55     CFI_INSTRUCTION 0
56     CFI_INSTRUCTION 0
57     CFI_INSTRUCTION 0
58     CFI_INSTRUCTION 0
59     CFI_INSTRUCTION 0
60     CFI_INSTRUCTION 0
61     CFI_INSTRUCTION 0
62     CFI_INSTRUCTION 0
63     CFI_INSTRUCTION 0
64     CFI_INSTRUCTION 0
65     CFI_INSTRUCTION 0
66     STRWui killed $w1, killed $x0, 1 :: (store (s32))
67     RET $lr
69 ...
70 # CHECK-LABEL: name: store-pair
71 # CHECK: STPWi
72 ---
73 name: store-pair-clearkill0
74 tracksRegLiveness: true
75 body: |
76   bb.0:
77     liveins: $w1, $x0, $lr
79     STRWui $w1, $x0, 0 :: (store (s32))
80     $w2 = COPY $w1
81     $x3 = COPY $x0
82     STRWui killed $w1, killed $x0, 1 :: (store (s32))
83     RET $lr
84 ...
85 # When merging a lower store with an upper one, we must clear kill flags on
86 # the lower store.
87 # CHECK-LABEL: store-pair-clearkill0
88 # CHECK-NOT: STPWi $w1, killed $w1, $x0, 0 :: (store (s32))
89 # CHECK: STPWi $w1, $w1, $x0, 0 :: (store (s32))
90 # CHECK: $w2 = COPY $w1
91 # CHECK: RET $lr
92 ---
93 name: store-pair-clearkill1
94 tracksRegLiveness: true
95 body: |
96   bb.0:
97     liveins: $x0, $lr
99     $w1 = MOVi32imm 13
100     $w2 = MOVi32imm 7
101     STRWui $w1, $x0, 1 :: (store (s32))
102     $w2 = COPY killed $w1
103     STRWui killed $w2, $x0, 0 :: (store (s32))
105     $w1 = MOVi32imm 42
106     $w2 = MOVi32imm 7
107     STRWui $w1, $x0, 0 :: (store (s32))
108     $w2 = COPY killed $w1
109     STRWui killed $w2, killed $x0, 1 :: (store (s32))
111     RET $lr
113 # When merging an upper store with a lower one, kill flags along the way need
114 # to be removed; In this case the kill flag on $w1.
115 # CHECK-LABEL: store-pair-clearkill1
116 # CHECK: $w1 = MOVi32imm
117 # CHECK: $w2 = MOVi32imm
118 # CHECK-NOT: $w2 = COPY killed $w1
119 # CHECK: $w2 = COPY $w1
120 # CHECK: STPWi killed $w2, $w1, $x0, 0
122 # CHECK: $w1 = MOVi32imm
123 # CHECK: $w2 = MOVi32imm
124 # CHECK-NOT: $w2 = COPY killed $w1
125 # CHECK: $w2 = COPY $w1
126 # CHECK: STPWi $w1, killed $w2, killed $x0, 0
128 name: store-load-clearkill
129 tracksRegLiveness: true
130 body: |
131   bb.0:
132     liveins: $w1
134     STRWui $w1, $sp, 0 :: (store (s32))
135     $wzr = COPY killed $w1 ; killing use of $w1
136     $w11 = LDRWui $sp, 0 :: (load (s32))
137     HINT 0, implicit $w11 ; some use of $w11
139 # When replaceing the load of a store-load pair with a copy the kill flags
140 # along the way need to be cleared.
141 # CHECK-LABEL: name: store-load-clearkill
142 # CHECK: STRWui $w1, $sp, 0 :: (store (s32))
143 # CHECK-NOT: COPY killed $w1
144 # CHECK: $wzr = COPY $w1
145 # CHECK: $w11 = ORRWrs $wzr, $w1, 0
146 # CHECK: HINT 0, implicit $w11
148 name: promote-load-from-store-undef
149 tracksRegLiveness: true
150 body: |
151   bb.0:
152     liveins: $x0, $x2, $lr
154     STRWui undef $w1, $x0, 0 :: (store (s32))
155     $w0 = LDRBBui $x0, 1 :: (load (s16))
156     STRHHui undef $w3, $x2, 0 :: (store (s32))
157     $w1 = LDRBBui $x2, 0 :: (load (s32))
158     RET $lr, implicit $w0
160 # CHECK-LABEL: name: promote-load-from-store-undef
161 # CHECK: STRWui undef $w1
162 # CHECK: UBFMWri undef $w1
163 # CHECK: STRHHui undef $w3
164 # CHECK: ANDWri undef $w3
166 name: promote-load-from-store-trivial-kills
167 tracksRegLiveness: true
168 body: |
169   bb.0:
170     liveins: $x0, $lr
172     STRXui $x0, $sp, 0 :: (store (s64))
173     STRXui killed $x0, $sp, 2 :: (store (s64))
174     $x0 = LDRXui $sp, 0 :: (load (s64))
175     BL &bar, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def $sp
176     RET $lr
178 # CHECK-LABEL: name: promote-load-from-store-trivial-kills
179 # CHECK: STRXui $x0, $sp, 0
180 # CHECK: STRXui $x0, $sp, 2
181 # CHECK-NOT: LDRXui
182 # CHECK-NOT: ORR
183 # CHECK: BL &bar, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $x0, implicit-def $sp