536 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64-linux-gnu -O0 -run-pass=legalizer -global-isel-abort=0 -verify-machineinstrs %s -o - | FileCheck %s3 4---5name: test_eve_16body: |7 bb.0:8 liveins: $q09 ; CHECK-LABEL: name: test_eve_110 ; CHECK: liveins: $q011 ; CHECK-NEXT: {{ $}}12 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q013 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 114 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s64>), [[C]](s64)15 ; CHECK-NEXT: $x0 = COPY [[EVEC]](s64)16 ; CHECK-NEXT: RET_ReallyLR17 %0:_(<2 x s64>) = COPY $q018 %1:_(s64) = G_CONSTANT i64 119 %2:_(s64) = G_EXTRACT_VECTOR_ELT %0(<2 x s64>), %1(s64)20 $x0 = COPY %2(s64)21 RET_ReallyLR22...23---24name: test_eve_v2s125body: |26 bb.0:27 liveins: $q0, $q128 ; CHECK-LABEL: name: test_eve_v2s129 ; CHECK: liveins: $q0, $q130 ; CHECK-NEXT: {{ $}}31 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q032 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q133 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 134 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(eq), [[COPY]](<2 x s64>), [[COPY1]]35 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[ICMP]](<2 x s64>), [[C]](s64)36 ; CHECK-NEXT: $x0 = COPY [[EVEC]](s64)37 ; CHECK-NEXT: RET_ReallyLR38 %0:_(<2 x s64>) = COPY $q039 %1:_(<2 x s64>) = COPY $q140 %2:_(s64) = G_CONSTANT i64 141 %3:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s64>), %142 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<2 x s1>), %2:_(s64)43 %5:_(s64) = G_ANYEXT %4(s1)44 $x0 = COPY %5(s64)45 RET_ReallyLR46...47---48name: test_eve_v4s149body: |50 bb.0:51 liveins: $q0, $q152 ; CHECK-LABEL: name: test_eve_v4s153 ; CHECK: liveins: $q0, $q154 ; CHECK-NEXT: {{ $}}55 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q056 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q157 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 158 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s32>) = G_ICMP intpred(eq), [[COPY]](<4 x s32>), [[COPY1]]59 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[ICMP]](<4 x s32>), [[C]](s64)60 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EVEC]](s32)61 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)62 ; CHECK-NEXT: RET_ReallyLR63 %0:_(<4 x s32>) = COPY $q064 %1:_(<4 x s32>) = COPY $q165 %2:_(s64) = G_CONSTANT i64 166 %3:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s32>), %167 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<4 x s1>), %2:_(s64)68 %5:_(s64) = G_ANYEXT %4(s1)69 $x0 = COPY %5(s64)70 RET_ReallyLR71...72---73name: test_eve_v8s174body: |75 bb.0:76 liveins: $q0, $q177 ; CHECK-LABEL: name: test_eve_v8s178 ; CHECK: liveins: $q0, $q179 ; CHECK-NEXT: {{ $}}80 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q081 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q182 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 183 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s16>) = G_ICMP intpred(eq), [[COPY]](<8 x s16>), [[COPY1]]84 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[ICMP]](<8 x s16>), [[C]](s64)85 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EVEC]](s16)86 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)87 ; CHECK-NEXT: RET_ReallyLR88 %0:_(<8 x s16>) = COPY $q089 %1:_(<8 x s16>) = COPY $q190 %2:_(s64) = G_CONSTANT i64 191 %3:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s16>), %192 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<8 x s1>), %2:_(s64)93 %5:_(s64) = G_ANYEXT %4(s1)94 $x0 = COPY %5(s64)95 RET_ReallyLR96...97---98name: test_eve_v16s199body: |100 bb.0:101 liveins: $q0, $q1102 ; CHECK-LABEL: name: test_eve_v16s1103 ; CHECK: liveins: $q0, $q1104 ; CHECK-NEXT: {{ $}}105 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0106 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1107 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1108 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]]109 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s8) = G_EXTRACT_VECTOR_ELT [[ICMP]](<16 x s8>), [[C]](s64)110 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[EVEC]](s8)111 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)112 ; CHECK-NEXT: RET_ReallyLR113 %0:_(<16 x s8>) = COPY $q0114 %1:_(<16 x s8>) = COPY $q1115 %2:_(s64) = G_CONSTANT i64 1116 %3:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1117 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<16 x s1>), %2:_(s64)118 %5:_(s64) = G_ANYEXT %4(s1)119 $x0 = COPY %5(s64)120 RET_ReallyLR121...122---123name: test_eve_v2p0124body: |125 bb.0:126 liveins: $q0, $q1127 ; CHECK-LABEL: name: test_eve_v2p0128 ; CHECK: liveins: $q0, $q1129 ; CHECK-NEXT: {{ $}}130 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $q0131 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1132 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(p0) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x p0>), [[C]](s64)133 ; CHECK-NEXT: $x0 = COPY [[EVEC]](p0)134 ; CHECK-NEXT: RET_ReallyLR135 %0:_(<2 x p0>) = COPY $q0136 %2:_(s64) = G_CONSTANT i64 1137 %3:_(p0) = G_EXTRACT_VECTOR_ELT %0:_(<2 x p0>), %2:_(s64)138 $x0 = COPY %3(p0)139 RET_ReallyLR140...141---142name: test_eve_v4s64143body: |144 bb.0:145 liveins: $q0, $q1, $x0146 ; CHECK-LABEL: name: test_eve_v4s64147 ; CHECK: liveins: $q0, $q1, $x0148 ; CHECK-NEXT: {{ $}}149 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0150 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1151 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s64) = G_EXTRACT_VECTOR_ELT [[COPY]](<2 x s64>), [[C]](s64)152 ; CHECK-NEXT: $x0 = COPY [[EVEC]](s64)153 ; CHECK-NEXT: RET_ReallyLR154 %0:_(<2 x s64>) = COPY $q0155 %1:_(<2 x s64>) = COPY $q1156 %concat:_(<4 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>)157 %idx:_(s32) = G_CONSTANT i32 1158 %idxprom:_(s64) = G_SEXT %idx(s32)159 %3:_(s64) = G_EXTRACT_VECTOR_ELT %concat:_(<4 x s64>), %idxprom:_(s64)160 $x0 = COPY %3(s64)161 RET_ReallyLR162...163---164name: test_eve_v2s1_unknown_idx165body: |166 bb.0:167 liveins: $q0, $q1, $x0168 ; CHECK-LABEL: name: test_eve_v2s1_unknown_idx169 ; CHECK: liveins: $q0, $q1, $x0170 ; CHECK-NEXT: {{ $}}171 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0172 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1173 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0174 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(eq), [[COPY]](<2 x s64>), [[COPY1]]175 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0176 ; CHECK-NEXT: G_STORE [[ICMP]](<2 x s64>), [[FRAME_INDEX]](p0) :: (store (<2 x s64>) into %stack.0)177 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1178 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]179 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8180 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C1]]181 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)182 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD]](p0) :: (load (s64))183 ; CHECK-NEXT: $x0 = COPY [[LOAD]](s64)184 ; CHECK-NEXT: RET_ReallyLR185 %0:_(<2 x s64>) = COPY $q0186 %1:_(<2 x s64>) = COPY $q1187 %2:_(s64) = COPY $x0188 %3:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s64>), %1189 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<2 x s1>), %2:_(s64)190 %5:_(s64) = G_ANYEXT %4(s1)191 $x0 = COPY %5(s64)192 RET_ReallyLR193...194---195name: test_eve_v4s1_unknown_idx196body: |197 bb.0:198 liveins: $q0, $q1, $x0199 ; CHECK-LABEL: name: test_eve_v4s1_unknown_idx200 ; CHECK: liveins: $q0, $q1, $x0201 ; CHECK-NEXT: {{ $}}202 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0203 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1204 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0205 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s32>) = G_ICMP intpred(eq), [[COPY]](<4 x s32>), [[COPY1]]206 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0207 ; CHECK-NEXT: G_STORE [[ICMP]](<4 x s32>), [[FRAME_INDEX]](p0) :: (store (<4 x s32>) into %stack.0)208 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3209 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]210 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 4211 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C1]]212 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)213 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32))214 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s32)215 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)216 ; CHECK-NEXT: RET_ReallyLR217 %0:_(<4 x s32>) = COPY $q0218 %1:_(<4 x s32>) = COPY $q1219 %2:_(s64) = COPY $x0220 %3:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s32>), %1221 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<4 x s1>), %2:_(s64)222 %5:_(s64) = G_ANYEXT %4(s1)223 $x0 = COPY %5(s64)224 RET_ReallyLR225...226---227name: test_eve_v8s1_unknown_idx228body: |229 bb.0:230 liveins: $q0, $q1, $x0231 ; CHECK-LABEL: name: test_eve_v8s1_unknown_idx232 ; CHECK: liveins: $q0, $q1, $x0233 ; CHECK-NEXT: {{ $}}234 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0235 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1236 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0237 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s16>) = G_ICMP intpred(eq), [[COPY]](<8 x s16>), [[COPY1]]238 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0239 ; CHECK-NEXT: G_STORE [[ICMP]](<8 x s16>), [[FRAME_INDEX]](p0) :: (store (<8 x s16>) into %stack.0)240 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 7241 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]242 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2243 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C1]]244 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)245 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[PTR_ADD]](p0) :: (load (s16))246 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s16)247 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)248 ; CHECK-NEXT: RET_ReallyLR249 %0:_(<8 x s16>) = COPY $q0250 %1:_(<8 x s16>) = COPY $q1251 %2:_(s64) = COPY $x0252 %3:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s16>), %1253 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<8 x s1>), %2:_(s64)254 %5:_(s64) = G_ANYEXT %4(s1)255 $x0 = COPY %5(s64)256 RET_ReallyLR257...258---259name: test_eve_v16s1_unknown_idx260body: |261 bb.0:262 liveins: $q0, $q1, $x0263 ; CHECK-LABEL: name: test_eve_v16s1_unknown_idx264 ; CHECK: liveins: $q0, $q1, $x0265 ; CHECK-NEXT: {{ $}}266 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0267 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1268 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x0269 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]]270 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0271 ; CHECK-NEXT: G_STORE [[ICMP]](<16 x s8>), [[FRAME_INDEX]](p0) :: (store (<16 x s8>) into %stack.0)272 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 15273 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY2]], [[C]]274 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1275 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C1]]276 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)277 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[PTR_ADD]](p0) :: (load (s8))278 ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[LOAD]](s8)279 ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)280 ; CHECK-NEXT: RET_ReallyLR281 %0:_(<16 x s8>) = COPY $q0282 %1:_(<16 x s8>) = COPY $q1283 %2:_(s64) = COPY $x0284 %3:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1285 %4:_(s1) = G_EXTRACT_VECTOR_ELT %3:_(<16 x s1>), %2:_(s64)286 %5:_(s64) = G_ANYEXT %4(s1)287 $x0 = COPY %5(s64)288 RET_ReallyLR289...290---291name: test_eve_v2p0_unknown_idx292body: |293 bb.0:294 liveins: $q0, $q1, $x0295 ; CHECK-LABEL: name: test_eve_v2p0_unknown_idx296 ; CHECK: liveins: $q0, $q1, $x0297 ; CHECK-NEXT: {{ $}}298 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x p0>) = COPY $q0299 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x0300 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0301 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[COPY]](<2 x p0>)302 ; CHECK-NEXT: G_STORE [[BITCAST]](<2 x s64>), [[FRAME_INDEX]](p0) :: (store (<2 x s64>) into %stack.0)303 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1304 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY1]], [[C]]305 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 8306 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C1]]307 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)308 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[PTR_ADD]](p0) :: (load (p0))309 ; CHECK-NEXT: $x0 = COPY [[LOAD]](p0)310 ; CHECK-NEXT: RET_ReallyLR311 %0:_(<2 x p0>) = COPY $q0312 %2:_(s64) = COPY $x0313 %3:_(p0) = G_EXTRACT_VECTOR_ELT %0:_(<2 x p0>), %2:_(s64)314 $x0 = COPY %3(p0)315 RET_ReallyLR316...317---318name: test_eve_v4s64_unknown_idx319body: |320 bb.0:321 liveins: $q0, $q1, $x0322 ; CHECK-LABEL: name: test_eve_v4s64_unknown_idx323 ; CHECK: liveins: $q0, $q1, $x0324 ; CHECK-NEXT: {{ $}}325 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0326 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1327 ; CHECK-NEXT: %idx:_(s64) = COPY $x0328 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0329 ; CHECK-NEXT: G_STORE [[COPY]](<2 x s64>), [[FRAME_INDEX]](p0) :: (store (<2 x s64>) into %stack.0, align 32)330 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16331 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)332 ; CHECK-NEXT: G_STORE [[COPY1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into %stack.0 + 16, basealign 32)333 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 3334 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %idx, [[C1]]335 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8336 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C2]]337 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)338 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[PTR_ADD1]](p0) :: (load (s64))339 ; CHECK-NEXT: $x0 = COPY [[LOAD]](s64)340 ; CHECK-NEXT: RET_ReallyLR341 %0:_(<2 x s64>) = COPY $q0342 %1:_(<2 x s64>) = COPY $q1343 %concat:_(<4 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>)344 %idx:_(s64) = COPY $x0345 %3:_(s64) = G_EXTRACT_VECTOR_ELT %concat:_(<4 x s64>), %idx:_(s64)346 $x0 = COPY %3(s64)347 RET_ReallyLR348...349---350name: test_eve_v8s32351body: |352 bb.0:353 liveins: $q0, $q1, $x0354 ; CHECK-LABEL: name: test_eve_v8s32355 ; CHECK: liveins: $q0, $q1, $x0356 ; CHECK-NEXT: {{ $}}357 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0358 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1359 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s32) = G_EXTRACT_VECTOR_ELT [[COPY]](<4 x s32>), [[C]](s64)360 ; CHECK-NEXT: $w0 = COPY [[EVEC]](s32)361 ; CHECK-NEXT: RET_ReallyLR362 %0:_(<4 x s32>) = COPY $q0363 %1:_(<4 x s32>) = COPY $q1364 %concat:_(<8 x s32>) = G_CONCAT_VECTORS %0(<4 x s32>), %1(<4 x s32>)365 %idx:_(s32) = G_CONSTANT i32 1366 %idxprom:_(s64) = G_SEXT %idx(s32)367 %3:_(s32) = G_EXTRACT_VECTOR_ELT %concat:_(<8 x s32>), %idxprom:_(s64)368 $w0 = COPY %3(s32)369 RET_ReallyLR370...371---372name: test_eve_v16s16373body: |374 bb.0:375 liveins: $q0, $q1, $x0376 ; CHECK-LABEL: name: test_eve_v16s16377 ; CHECK: liveins: $q0, $q1, $x0378 ; CHECK-NEXT: {{ $}}379 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q1380 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1381 ; CHECK-NEXT: [[EVEC:%[0-9]+]]:_(s16) = G_EXTRACT_VECTOR_ELT [[COPY]](<8 x s16>), [[C]](s64)382 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT [[EVEC]](s16)383 ; CHECK-NEXT: $w0 = COPY %ext(s32)384 ; CHECK-NEXT: RET_ReallyLR385 %0:_(<8 x s16>) = COPY $q0386 %1:_(<8 x s16>) = COPY $q1387 %concat:_(<16 x s16>) = G_CONCAT_VECTORS %0(<8 x s16>), %1(<8 x s16>)388 %idx:_(s32) = G_CONSTANT i32 9389 %idxprom:_(s64) = G_SEXT %idx(s32)390 %3:_(s16) = G_EXTRACT_VECTOR_ELT %concat:_(<16 x s16>), %idxprom:_(s64)391 %ext:_(s32) = G_ANYEXT %3392 $w0 = COPY %ext(s32)393 RET_ReallyLR394...395---396name: test_eve_v4p0397body: |398 bb.0:399 liveins: $x0400 ; CHECK-LABEL: name: test_eve_v4p0401 ; CHECK: liveins: $x0402 ; CHECK-NEXT: {{ $}}403 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x p0>) = G_IMPLICIT_DEF404 ; CHECK-NEXT: %idx:_(s64) = G_CONSTANT i64 1405 ; CHECK-NEXT: %eve:_(p0) = G_EXTRACT_VECTOR_ELT [[DEF]](<2 x p0>), %idx(s64)406 ; CHECK-NEXT: $x0 = COPY %eve(p0)407 ; CHECK-NEXT: RET_ReallyLR408 %vec:_(<4 x p0>) = G_IMPLICIT_DEF409 %idx:_(s64) = G_CONSTANT i64 1410 %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec:_(<4 x p0>), %idx:_(s64)411 $x0 = COPY %eve(p0)412 RET_ReallyLR413...414---415name: test_eve_v8s32_unknown_idx416body: |417 bb.0:418 liveins: $q0, $q1, $w0419 ; CHECK-LABEL: name: test_eve_v8s32_unknown_idx420 ; CHECK: liveins: $q0, $q1, $w0421 ; CHECK-NEXT: {{ $}}422 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0423 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1424 ; CHECK-NEXT: %idx:_(s32) = COPY $w0425 ; CHECK-NEXT: %idxprom:_(s64) = G_SEXT %idx(s32)426 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0427 ; CHECK-NEXT: G_STORE [[COPY]](<4 x s32>), [[FRAME_INDEX]](p0) :: (store (<4 x s32>) into %stack.0, align 32)428 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16429 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)430 ; CHECK-NEXT: G_STORE [[COPY1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into %stack.0 + 16, basealign 32)431 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 7432 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %idxprom, [[C1]]433 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4434 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C2]]435 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)436 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))437 ; CHECK-NEXT: $w0 = COPY [[LOAD]](s32)438 ; CHECK-NEXT: RET_ReallyLR439 %0:_(<4 x s32>) = COPY $q0440 %1:_(<4 x s32>) = COPY $q1441 %concat:_(<8 x s32>) = G_CONCAT_VECTORS %0(<4 x s32>), %1(<4 x s32>)442 %idx:_(s32) = COPY $w0443 %idxprom:_(s64) = G_SEXT %idx(s32)444 %3:_(s32) = G_EXTRACT_VECTOR_ELT %concat:_(<8 x s32>), %idxprom:_(s64)445 $w0 = COPY %3(s32)446 RET_ReallyLR447...448---449name: test_eve_v16s16_unknown_idx450body: |451 bb.0:452 liveins: $q0, $q1, $w0453 ; CHECK-LABEL: name: test_eve_v16s16_unknown_idx454 ; CHECK: liveins: $q0, $q1, $w0455 ; CHECK-NEXT: {{ $}}456 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0457 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1458 ; CHECK-NEXT: %idx:_(s32) = COPY $w0459 ; CHECK-NEXT: %idxprom:_(s64) = G_SEXT %idx(s32)460 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0461 ; CHECK-NEXT: G_STORE [[COPY]](<8 x s16>), [[FRAME_INDEX]](p0) :: (store (<8 x s16>) into %stack.0, align 32)462 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16463 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)464 ; CHECK-NEXT: G_STORE [[COPY1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into %stack.0 + 16, basealign 32)465 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 15466 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %idxprom, [[C1]]467 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 2468 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C2]]469 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)470 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[PTR_ADD1]](p0) :: (load (s16))471 ; CHECK-NEXT: %ext:_(s32) = G_ANYEXT [[LOAD]](s16)472 ; CHECK-NEXT: $w0 = COPY %ext(s32)473 ; CHECK-NEXT: RET_ReallyLR474 %0:_(<8 x s16>) = COPY $q0475 %1:_(<8 x s16>) = COPY $q1476 %concat:_(<16 x s16>) = G_CONCAT_VECTORS %0(<8 x s16>), %1(<8 x s16>)477 %idx:_(s32) = COPY $w0478 %idxprom:_(s64) = G_SEXT %idx(s32)479 %3:_(s16) = G_EXTRACT_VECTOR_ELT %concat:_(<16 x s16>), %idxprom:_(s64)480 %ext:_(s32) = G_ANYEXT %3481 $w0 = COPY %ext(s32)482 RET_ReallyLR483...484---485name: test_eve_v4p0_unknown_idx486body: |487 bb.0:488 liveins: $x0489 ; CHECK-LABEL: name: test_eve_v4p0_unknown_idx490 ; CHECK: liveins: $x0491 ; CHECK-NEXT: {{ $}}492 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x p0>) = G_IMPLICIT_DEF493 ; CHECK-NEXT: %idx:_(s64) = COPY $x0494 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0495 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[DEF]](<2 x p0>)496 ; CHECK-NEXT: G_STORE [[BITCAST]](<2 x s64>), [[FRAME_INDEX]](p0) :: (store (<2 x s64>) into %stack.0, align 32)497 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16498 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[FRAME_INDEX]], [[C]](s64)499 ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[DEF]](<2 x p0>)500 ; CHECK-NEXT: G_STORE [[BITCAST1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into %stack.0 + 16, basealign 32)501 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 3502 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND %idx, [[C1]]503 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8504 ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[AND]], [[C2]]505 ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[FRAME_INDEX]], [[MUL]](s64)506 ; CHECK-NEXT: %eve:_(p0) = G_LOAD [[PTR_ADD1]](p0) :: (load (p0))507 ; CHECK-NEXT: $x0 = COPY %eve(p0)508 ; CHECK-NEXT: RET_ReallyLR509 %vec:_(<4 x p0>) = G_IMPLICIT_DEF510 %idx:_(s64) = COPY $x0511 %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec:_(<4 x p0>), %idx:_(s64)512 $x0 = COPY %eve(p0)513 RET_ReallyLR514...515---516# Make sure that the pointer legalization rules don't apply when we have517# different address spaces.518name: cant_legalize_different_address_spaces519body: |520 bb.0:521 liveins: $x0522 523 ; CHECK-LABEL: name: cant_legalize_different_address_spaces524 ; CHECK: liveins: $x0525 ; CHECK-NEXT: {{ $}}526 ; CHECK-NEXT: %vec:_(<4 x p1>) = G_IMPLICIT_DEF527 ; CHECK-NEXT: %idx:_(s64) = G_CONSTANT i64 1528 ; CHECK-NEXT: %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec(<4 x p1>), %idx(s64)529 ; CHECK-NEXT: $x0 = COPY %eve(p0)530 ; CHECK-NEXT: RET_ReallyLR531 %vec:_(<4 x p1>) = G_IMPLICIT_DEF532 %idx:_(s64) = G_CONSTANT i64 1533 %eve:_(p0) = G_EXTRACT_VECTOR_ELT %vec:_(<4 x p1>), %idx:_(s64)534 $x0 = COPY %eve(p0)535 RET_ReallyLR536