1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
8 tracksRegLiveness: true
11 liveins: $x0, $x1, $x2
12 ; CHECK-LABEL: name: LD2Twov8b
13 ; CHECK: liveins: $x0, $x1, $x2
14 ; CHECK: %ptr:gpr64sp = COPY $x0
15 ; CHECK: [[LD2Twov8b:%[0-9]+]]:dd = LD2Twov8b %ptr :: (load (<8 x s64>))
16 ; CHECK: %dst1:fpr64 = COPY [[LD2Twov8b]].dsub0
17 ; CHECK: %dst2:fpr64 = COPY [[LD2Twov8b]].dsub1
18 ; CHECK: $d0 = COPY %dst1
19 ; CHECK: $d1 = COPY %dst2
20 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1
21 %ptr:gpr(p0) = COPY $x0
22 %dst1:fpr(<8 x s8>), %dst2:fpr(<8 x s8>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<8 x s64>))
23 $d0 = COPY %dst1(<8 x s8>)
24 $d1 = COPY %dst2(<8 x s8>)
25 RET_ReallyLR implicit $d0, implicit $d1
31 tracksRegLiveness: true
34 liveins: $x0, $x1, $x2
35 ; CHECK-LABEL: name: LD2Twov16b
36 ; CHECK: liveins: $x0, $x1, $x2
37 ; CHECK: %ptr:gpr64sp = COPY $x0
38 ; CHECK: [[LD2Twov16b:%[0-9]+]]:qq = LD2Twov16b %ptr :: (load (<16 x s64>))
39 ; CHECK: %dst1:fpr128 = COPY [[LD2Twov16b]].qsub0
40 ; CHECK: %dst2:fpr128 = COPY [[LD2Twov16b]].qsub1
41 ; CHECK: $q0 = COPY %dst1
42 ; CHECK: $q1 = COPY %dst2
43 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1
44 %ptr:gpr(p0) = COPY $x0
45 %dst1:fpr(<16 x s8>), %dst2:fpr(<16 x s8>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<16 x s64>))
46 $q0 = COPY %dst1(<16 x s8>)
47 $q1 = COPY %dst2(<16 x s8>)
48 RET_ReallyLR implicit $q0, implicit $q1
54 tracksRegLiveness: true
57 liveins: $x0, $x1, $x2
58 ; CHECK-LABEL: name: LD2Twov4h
59 ; CHECK: liveins: $x0, $x1, $x2
60 ; CHECK: %ptr:gpr64sp = COPY $x0
61 ; CHECK: [[LD2Twov4h:%[0-9]+]]:dd = LD2Twov4h %ptr :: (load (<4 x s64>))
62 ; CHECK: %dst1:fpr64 = COPY [[LD2Twov4h]].dsub0
63 ; CHECK: %dst2:fpr64 = COPY [[LD2Twov4h]].dsub1
64 ; CHECK: $d0 = COPY %dst1
65 ; CHECK: $d1 = COPY %dst2
66 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1
67 %ptr:gpr(p0) = COPY $x0
68 %dst1:fpr(<4 x s16>), %dst2:fpr(<4 x s16>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<4 x s64>))
69 $d0 = COPY %dst1(<4 x s16>)
70 $d1 = COPY %dst2(<4 x s16>)
71 RET_ReallyLR implicit $d0, implicit $d1
77 tracksRegLiveness: true
80 liveins: $x0, $x1, $x2
81 ; CHECK-LABEL: name: LD2Twov8h
82 ; CHECK: liveins: $x0, $x1, $x2
83 ; CHECK: %ptr:gpr64sp = COPY $x0
84 ; CHECK: [[LD2Twov8h:%[0-9]+]]:qq = LD2Twov8h %ptr :: (load (<8 x s64>))
85 ; CHECK: %dst1:fpr128 = COPY [[LD2Twov8h]].qsub0
86 ; CHECK: %dst2:fpr128 = COPY [[LD2Twov8h]].qsub1
87 ; CHECK: $q0 = COPY %dst1
88 ; CHECK: $q1 = COPY %dst2
89 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1
90 %ptr:gpr(p0) = COPY $x0
91 %dst1:fpr(<8 x s16>), %dst2:fpr(<8 x s16>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<8 x s64>))
92 $q0 = COPY %dst1(<8 x s16>)
93 $q1 = COPY %dst2(<8 x s16>)
94 RET_ReallyLR implicit $q0, implicit $q1
100 tracksRegLiveness: true
103 liveins: $x0, $x1, $x2
104 ; CHECK-LABEL: name: LD2Twov2s
105 ; CHECK: liveins: $x0, $x1, $x2
106 ; CHECK: %ptr:gpr64sp = COPY $x0
107 ; CHECK: [[LD2Twov2s:%[0-9]+]]:dd = LD2Twov2s %ptr :: (load (<2 x s64>))
108 ; CHECK: %dst1:fpr64 = COPY [[LD2Twov2s]].dsub0
109 ; CHECK: %dst2:fpr64 = COPY [[LD2Twov2s]].dsub1
110 ; CHECK: $d0 = COPY %dst1
111 ; CHECK: $d1 = COPY %dst2
112 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1
113 %ptr:gpr(p0) = COPY $x0
114 %dst1:fpr(<2 x s32>), %dst2:fpr(<2 x s32>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<2 x s64>))
115 $d0 = COPY %dst1(<2 x s32>)
116 $d1 = COPY %dst2(<2 x s32>)
117 RET_ReallyLR implicit $d0, implicit $d1
122 regBankSelected: true
123 tracksRegLiveness: true
126 liveins: $x0, $x1, $x2
127 ; CHECK-LABEL: name: LD2Twov4s
128 ; CHECK: liveins: $x0, $x1, $x2
129 ; CHECK: %ptr:gpr64sp = COPY $x0
130 ; CHECK: [[LD2Twov4s:%[0-9]+]]:qq = LD2Twov4s %ptr :: (load (<4 x s64>))
131 ; CHECK: %dst1:fpr128 = COPY [[LD2Twov4s]].qsub0
132 ; CHECK: %dst2:fpr128 = COPY [[LD2Twov4s]].qsub1
133 ; CHECK: $q0 = COPY %dst1
134 ; CHECK: $q1 = COPY %dst2
135 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1
136 %ptr:gpr(p0) = COPY $x0
137 %dst1:fpr(<4 x s32>), %dst2:fpr(<4 x s32>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<4 x s64>))
138 $q0 = COPY %dst1(<4 x s32>)
139 $q1 = COPY %dst2(<4 x s32>)
140 RET_ReallyLR implicit $q0, implicit $q1
145 regBankSelected: true
146 tracksRegLiveness: true
149 liveins: $x0, $x1, $x2
150 ; CHECK-LABEL: name: LD2Twov2d_s64
151 ; CHECK: liveins: $x0, $x1, $x2
152 ; CHECK: %ptr:gpr64sp = COPY $x0
153 ; CHECK: [[LD2Twov2d:%[0-9]+]]:qq = LD2Twov2d %ptr :: (load (<2 x s64>))
154 ; CHECK: %dst1:fpr128 = COPY [[LD2Twov2d]].qsub0
155 ; CHECK: %dst2:fpr128 = COPY [[LD2Twov2d]].qsub1
156 ; CHECK: $q0 = COPY %dst1
157 ; CHECK: $q1 = COPY %dst2
158 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1
159 %ptr:gpr(p0) = COPY $x0
160 %dst1:fpr(<2 x s64>), %dst2:fpr(<2 x s64>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<2 x s64>))
161 $q0 = COPY %dst1(<2 x s64>)
162 $q1 = COPY %dst2(<2 x s64>)
163 RET_ReallyLR implicit $q0, implicit $q1
168 regBankSelected: true
169 tracksRegLiveness: true
172 liveins: $x0, $x1, $x2
173 ; CHECK-LABEL: name: LD2Twov2d_p0
174 ; CHECK: liveins: $x0, $x1, $x2
175 ; CHECK: %ptr:gpr64sp = COPY $x0
176 ; CHECK: [[LD2Twov2d:%[0-9]+]]:qq = LD2Twov2d %ptr :: (load (<2 x p0>))
177 ; CHECK: %dst1:fpr128 = COPY [[LD2Twov2d]].qsub0
178 ; CHECK: %dst2:fpr128 = COPY [[LD2Twov2d]].qsub1
179 ; CHECK: $q0 = COPY %dst1
180 ; CHECK: $q1 = COPY %dst2
181 ; CHECK: RET_ReallyLR implicit $q0, implicit $q1
182 %ptr:gpr(p0) = COPY $x0
183 %dst1:fpr(<2 x p0>), %dst2:fpr(<2 x p0>) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (<2 x p0>))
184 $q0 = COPY %dst1(<2 x p0>)
185 $q1 = COPY %dst2(<2 x p0>)
186 RET_ReallyLR implicit $q0, implicit $q1
191 regBankSelected: true
192 tracksRegLiveness: true
195 liveins: $x0, $x1, $x2
196 ; CHECK-LABEL: name: LD1Twov1d_s64
197 ; CHECK: liveins: $x0, $x1, $x2
198 ; CHECK: %ptr:gpr64sp = COPY $x0
199 ; CHECK: [[LD1Twov1d:%[0-9]+]]:dd = LD1Twov1d %ptr :: (load (s64))
200 ; CHECK: %dst1:fpr64 = COPY [[LD1Twov1d]].dsub0
201 ; CHECK: %dst2:fpr64 = COPY [[LD1Twov1d]].dsub1
202 ; CHECK: $d0 = COPY %dst1
203 ; CHECK: $d1 = COPY %dst2
204 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1
205 %ptr:gpr(p0) = COPY $x0
206 %dst1:fpr(s64), %dst2:fpr(s64) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (s64))
207 $d0 = COPY %dst1(s64)
208 $d1 = COPY %dst2(s64)
209 RET_ReallyLR implicit $d0, implicit $d1
214 regBankSelected: true
215 tracksRegLiveness: true
218 liveins: $x0, $x1, $x2
219 ; CHECK-LABEL: name: LD1Twov1d_p0
220 ; CHECK: liveins: $x0, $x1, $x2
221 ; CHECK: %ptr:gpr64sp = COPY $x0
222 ; CHECK: [[LD1Twov1d:%[0-9]+]]:dd = LD1Twov1d %ptr :: (load (p0))
223 ; CHECK: %dst1:fpr64 = COPY [[LD1Twov1d]].dsub0
224 ; CHECK: %dst2:fpr64 = COPY [[LD1Twov1d]].dsub1
225 ; CHECK: $d0 = COPY %dst1
226 ; CHECK: $d1 = COPY %dst2
227 ; CHECK: RET_ReallyLR implicit $d0, implicit $d1
228 %ptr:gpr(p0) = COPY $x0
229 %dst1:fpr(p0), %dst2:fpr(p0) = G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.aarch64.neon.ld2), %ptr(p0) :: (load (p0))
232 RET_ReallyLR implicit $d0, implicit $d1