555 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -debugify-and-strip-all-safe -mtriple=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s3---4name: test_shift5body: |6 bb.0.entry:7 ; CHECK-LABEL: name: test_shift8 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x09 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x110 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)11 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 25512 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]13 ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)14 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 815 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXT_INREG]], [[AND]](s32)16 ; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)17 ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)18 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]]19 ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)20 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]]21 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32)22 ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)23 ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)24 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC4]], [[C]]25 ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)26 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC5]], [[AND3]](s32)27 ; CHECK-NEXT: $w0 = COPY [[SHL]](s32)28 %0:_(s64) = COPY $x029 %1:_(s64) = COPY $x130 %2:_(s8) = G_TRUNC %0(s64)31 %3:_(s8) = G_TRUNC %1(s64)32 %4:_(s8) = G_ASHR %2, %333 %7:_(s32) = G_ANYEXT %4(s8)34 $w0 = COPY %7(s32)35 %5:_(s8) = G_LSHR %2, %336 %8:_(s32) = G_ANYEXT %5(s8)37 $w0 = COPY %8(s32)38 %6:_(s8) = G_SHL %2, %339 %9:_(s32) = G_ANYEXT %6(s8)40 $w0 = COPY %9(s32)41 42...43---44name: test_shl_i64_i3245body: |46 bb.0:47 ; CHECK-LABEL: name: test_shl_i64_i3248 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x049 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w150 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)51 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[ZEXT]](s64)52 ; CHECK-NEXT: $x0 = COPY [[SHL]](s64)53 %0:_(s64) = COPY $x054 %1:_(s32) = COPY $w155 %2:_(s64) = G_SHL %0, %156 $x0 = COPY %2(s64)57 58...59---60name: test_ashr_i64_i3261body: |62 bb.0:63 ; CHECK-LABEL: name: test_ashr_i64_i3264 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x065 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w166 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)67 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[ZEXT]](s64)68 ; CHECK-NEXT: $x0 = COPY [[ASHR]](s64)69 %0:_(s64) = COPY $x070 %1:_(s32) = COPY $w171 %2:_(s64) = G_ASHR %0, %172 $x0 = COPY %2(s64)73 74...75---76name: test_lshr_i64_i3277body: |78 bb.0:79 ; CHECK-LABEL: name: test_lshr_i64_i3280 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x081 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w182 ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32)83 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[ZEXT]](s64)84 ; CHECK-NEXT: $x0 = COPY [[LSHR]](s64)85 %0:_(s64) = COPY $x086 %1:_(s32) = COPY $w187 %2:_(s64) = G_LSHR %0, %188 $x0 = COPY %2(s64)89 90...91 92---93name: test_shl_s128_s12894body: |95 bb.0:96 ; CHECK-LABEL: name: test_shl_s128_s12897 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q098 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q199 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)100 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64101 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)102 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]103 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]104 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0105 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]106 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]107 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[TRUNC]](s64)108 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[SUB1]](s64)109 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[TRUNC]](s64)110 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]]111 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[SUB]](s64)112 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[SHL]], [[C1]]113 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[OR]], [[SHL2]]114 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s32), [[UV1]], [[SELECT1]]115 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT2]](s64)116 ; CHECK-NEXT: $q0 = COPY [[MV]](s128)117 %0:_(s128) = COPY $q0118 %1:_(s128) = COPY $q1119 %2:_(s128) = G_SHL %0, %1120 $q0 = COPY %2121 122...123 124---125name: test_lshr_s128_s128126body: |127 bb.0:128 ; CHECK-LABEL: name: test_lshr_s128_s128129 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0130 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1131 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)132 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64133 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)134 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]135 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]136 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0137 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]138 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]139 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[TRUNC]](s64)140 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)141 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)142 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL]]143 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[SUB]](s64)144 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[OR]], [[LSHR2]]145 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s32), [[UV]], [[SELECT]]146 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[LSHR]], [[C1]]147 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)148 ; CHECK-NEXT: $q0 = COPY [[MV]](s128)149 %0:_(s128) = COPY $q0150 %1:_(s128) = COPY $q1151 %2:_(s128) = G_LSHR %0, %1152 $q0 = COPY %2153 154...155 156---157name: test_ashr_s128_s128158body: |159 bb.0:160 ; CHECK-LABEL: name: test_ashr_s128_s128161 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0162 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1163 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128)164 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64165 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128)166 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]]167 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]]168 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0169 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]]170 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]]171 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[TRUNC]](s64)172 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64)173 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64)174 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]175 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 63176 ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[C2]](s64)177 ; CHECK-NEXT: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[SUB]](s64)178 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[OR]], [[ASHR2]]179 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s32), [[UV]], [[SELECT]]180 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[ASHR]], [[ASHR1]]181 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64)182 ; CHECK-NEXT: $q0 = COPY [[MV]](s128)183 %0:_(s128) = COPY $q0184 %1:_(s128) = COPY $q1185 %2:_(s128) = G_ASHR %0, %1186 $q0 = COPY %2187 188...189 190---191name: test_ashr_v2i32192body: |193 bb.0:194 ; CHECK-LABEL: name: test_ashr_v2i32195 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0196 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1197 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<2 x s32>) = G_ASHR [[COPY]], [[COPY1]](<2 x s32>)198 ; CHECK-NEXT: $d0 = COPY [[ASHR]](<2 x s32>)199 %0:_(<2 x s32>) = COPY $d0200 %1:_(<2 x s32>) = COPY $d1201 %2:_(<2 x s32>) = G_ASHR %0, %1202 $d0 = COPY %2203 204...205---206name: test_ashr_v4i32207body: |208 bb.0:209 ; CHECK-LABEL: name: test_ashr_v4i32210 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0211 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1212 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[COPY]], [[COPY1]](<4 x s32>)213 ; CHECK-NEXT: $q0 = COPY [[ASHR]](<4 x s32>)214 %0:_(<4 x s32>) = COPY $q0215 %1:_(<4 x s32>) = COPY $q1216 %2:_(<4 x s32>) = G_ASHR %0, %1217 $q0 = COPY %2218 219...220---221name: shl_cimm_32222body: |223 bb.1:224 liveins: $w0225 226 ; CHECK-LABEL: name: shl_cimm_32227 ; CHECK: liveins: $w0228 ; CHECK-NEXT: {{ $}}229 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0230 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8231 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64)232 ; CHECK-NEXT: $w0 = COPY [[SHL]](s32)233 ; CHECK-NEXT: RET_ReallyLR implicit $w0234 %0:_(s32) = COPY $w0235 %1:_(s32) = G_CONSTANT i32 8236 %2:_(s32) = G_SHL %0, %1(s32)237 $w0 = COPY %2(s32)238 RET_ReallyLR implicit $w0239 240...241---242name: lshr_cimm_32243body: |244 bb.1:245 liveins: $w0246 247 ; CHECK-LABEL: name: lshr_cimm_32248 ; CHECK: liveins: $w0249 ; CHECK-NEXT: {{ $}}250 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0251 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8252 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s64)253 ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)254 ; CHECK-NEXT: RET_ReallyLR implicit $w0255 %0:_(s32) = COPY $w0256 %1:_(s32) = G_CONSTANT i32 8257 %2:_(s32) = G_LSHR %0, %1(s32)258 $w0 = COPY %2(s32)259 RET_ReallyLR implicit $w0260 261...262---263name: ashr_cimm_32264body: |265 bb.1:266 liveins: $w0267 268 ; CHECK-LABEL: name: ashr_cimm_32269 ; CHECK: liveins: $w0270 ; CHECK-NEXT: {{ $}}271 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0272 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8273 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s64)274 ; CHECK-NEXT: $w0 = COPY [[ASHR]](s32)275 ; CHECK-NEXT: RET_ReallyLR implicit $w0276 %0:_(s32) = COPY $w0277 %1:_(s32) = G_CONSTANT i32 8278 %2:_(s32) = G_ASHR %0, %1(s32)279 $w0 = COPY %2(s32)280 RET_ReallyLR implicit $w0281 282...283---284name: test_ashr_v16i8285body: |286 bb.0:287 ; CHECK-LABEL: name: test_ashr_v16i8288 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0289 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1290 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<16 x s8>) = G_ASHR [[COPY]], [[COPY1]](<16 x s8>)291 ; CHECK-NEXT: $q0 = COPY [[ASHR]](<16 x s8>)292 %0:_(<16 x s8>) = COPY $q0293 %1:_(<16 x s8>) = COPY $q1294 %2:_(<16 x s8>) = G_ASHR %0, %1295 $q0 = COPY %2296...297---298name: test_ashr_v8i16299body: |300 bb.0:301 ; CHECK-LABEL: name: test_ashr_v8i16302 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0303 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1304 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<8 x s16>) = G_ASHR [[COPY]], [[COPY1]](<8 x s16>)305 ; CHECK-NEXT: $q0 = COPY [[ASHR]](<8 x s16>)306 %0:_(<8 x s16>) = COPY $q0307 %1:_(<8 x s16>) = COPY $q1308 %2:_(<8 x s16>) = G_ASHR %0, %1309 $q0 = COPY %2310...311---312name: test_shl_v16i8313body: |314 bb.0:315 ; CHECK-LABEL: name: test_shl_v16i8316 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0317 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1318 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<16 x s8>) = G_SHL [[COPY]], [[COPY1]](<16 x s8>)319 ; CHECK-NEXT: $q0 = COPY [[SHL]](<16 x s8>)320 %0:_(<16 x s8>) = COPY $q0321 %1:_(<16 x s8>) = COPY $q1322 %2:_(<16 x s8>) = G_SHL %0, %1323 $q0 = COPY %2324...325---326name: test_shl_v8i16327body: |328 bb.0:329 ; CHECK-LABEL: name: test_shl_v8i16330 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0331 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1332 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<8 x s16>) = G_SHL [[COPY]], [[COPY1]](<8 x s16>)333 ; CHECK-NEXT: $q0 = COPY [[SHL]](<8 x s16>)334 %0:_(<8 x s16>) = COPY $q0335 %1:_(<8 x s16>) = COPY $q1336 %2:_(<8 x s16>) = G_SHL %0, %1337 $q0 = COPY %2338...339---340name: test_lshr_v16i8341body: |342 bb.0:343 ; CHECK-LABEL: name: test_lshr_v16i8344 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0345 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1346 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<16 x s8>) = G_LSHR [[COPY]], [[COPY1]](<16 x s8>)347 ; CHECK-NEXT: $q0 = COPY [[LSHR]](<16 x s8>)348 %0:_(<16 x s8>) = COPY $q0349 %1:_(<16 x s8>) = COPY $q1350 %2:_(<16 x s8>) = G_LSHR %0, %1351 $q0 = COPY %2352...353---354name: test_lshr_v8i16355body: |356 bb.0:357 ; CHECK-LABEL: name: test_lshr_v8i16358 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0359 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1360 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[COPY1]](<8 x s16>)361 ; CHECK-NEXT: $q0 = COPY [[LSHR]](<8 x s16>)362 %0:_(<8 x s16>) = COPY $q0363 %1:_(<8 x s16>) = COPY $q1364 %2:_(<8 x s16>) = G_LSHR %0, %1365 $q0 = COPY %2366...367---368name: test_shl_v4i16369body: |370 bb.0:371 ; CHECK-LABEL: name: test_shl_v4i16372 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0373 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1374 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<4 x s16>) = G_SHL [[COPY]], [[COPY1]](<4 x s16>)375 ; CHECK-NEXT: $d0 = COPY [[SHL]](<4 x s16>)376 %0:_(<4 x s16>) = COPY $d0377 %1:_(<4 x s16>) = COPY $d1378 %2:_(<4 x s16>) = G_SHL %0, %1379 $d0 = COPY %2380...381---382name: test_lshr_v4i16383body: |384 bb.0:385 ; CHECK-LABEL: name: test_lshr_v4i16386 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0387 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1388 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<4 x s16>) = G_LSHR [[COPY]], [[COPY1]](<4 x s16>)389 ; CHECK-NEXT: $d0 = COPY [[LSHR]](<4 x s16>)390 %0:_(<4 x s16>) = COPY $d0391 %1:_(<4 x s16>) = COPY $d1392 %2:_(<4 x s16>) = G_LSHR %0, %1393 $d0 = COPY %2394...395---396name: test_ashr_v4i16397body: |398 bb.0:399 ; CHECK-LABEL: name: test_ashr_v4i16400 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0401 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1402 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s16>) = G_ASHR [[COPY]], [[COPY1]](<4 x s16>)403 ; CHECK-NEXT: $d0 = COPY [[ASHR]](<4 x s16>)404 %0:_(<4 x s16>) = COPY $d0405 %1:_(<4 x s16>) = COPY $d1406 %2:_(<4 x s16>) = G_ASHR %0, %1407 $d0 = COPY %2408...409---410name: test_ashr_v8s32411body: |412 bb.0:413 ; CHECK-LABEL: name: test_ashr_v8s32414 ; CHECK: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF415 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[DEF]], [[DEF]](<4 x s32>)416 ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[DEF]], [[DEF]](<4 x s32>)417 ; CHECK-NEXT: $q0 = COPY [[ASHR]](<4 x s32>)418 ; CHECK-NEXT: $q1 = COPY [[ASHR1]](<4 x s32>)419 %0:_(<8 x s32>) = G_IMPLICIT_DEF420 %1:_(<8 x s32>) = G_IMPLICIT_DEF421 %2:_(<8 x s32>) = G_ASHR %0, %1422 %3:_(<4 x s32>), %4:_(<4 x s32>) = G_UNMERGE_VALUES %2423 $q0 = COPY %3(<4 x s32>)424 $q1 = COPY %4(<4 x s32>)425...426---427name: test_shl_v8s8428body: |429 bb.0:430 ; CHECK-LABEL: name: test_shl_v8s8431 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0432 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1433 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(<8 x s8>) = G_SHL [[COPY]], [[COPY1]](<8 x s8>)434 ; CHECK-NEXT: $d0 = COPY [[SHL]](<8 x s8>)435 %0:_(<8 x s8>) = COPY $d0436 %1:_(<8 x s8>) = COPY $d1437 %2:_(<8 x s8>) = G_SHL %0, %1438 $d0 = COPY %2439...440---441name: test_ashr_v8s8442body: |443 bb.0:444 ; CHECK-LABEL: name: test_ashr_v8s8445 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0446 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1447 ; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(<8 x s8>) = G_ASHR [[COPY]], [[COPY1]](<8 x s8>)448 ; CHECK-NEXT: $d0 = COPY [[ASHR]](<8 x s8>)449 %0:_(<8 x s8>) = COPY $d0450 %1:_(<8 x s8>) = COPY $d1451 %2:_(<8 x s8>) = G_ASHR %0, %1452 $d0 = COPY %2453...454 455---456name: test_lshr_v8s8457body: |458 bb.0:459 ; CHECK-LABEL: name: test_lshr_v8s8460 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0461 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1462 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s8>) = G_LSHR [[COPY]], [[COPY1]](<8 x s8>)463 ; CHECK-NEXT: $d0 = COPY [[LSHR]](<8 x s8>)464 %0:_(<8 x s8>) = COPY $d0465 %1:_(<8 x s8>) = COPY $d1466 %2:_(<8 x s8>) = G_LSHR %0, %1467 $d0 = COPY %2468...469---470name: test_lshr_nonpow2471body: |472 bb.0:473 ; CHECK-LABEL: name: test_lshr_nonpow2474 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0475 ; CHECK-NEXT: %a:_(s32) = COPY $w1476 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0477 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)478 ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), [[C]](s32)479 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 64480 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C1]]481 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C1]], [[COPY]]482 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 0483 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C1]]484 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C2]]485 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[MV]], [[COPY]](s64)486 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[SUB1]](s64)487 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]488 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[MV1]], [[SUB]](s64)489 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[OR]], [[LSHR1]]490 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s32), [[MV]], [[SELECT]]491 ; CHECK-NEXT: %d1:_(s32), %d2:_(s32) = G_UNMERGE_VALUES [[SELECT1]](s64)492 ; CHECK-NEXT: $w0 = COPY %d2(s32)493 %0:_(s64) = COPY $x0494 %a:_(s32) = COPY $w1495 %merge:_(s96) = G_MERGE_VALUES %a, %a, %a496 %lshr:_(s96) = G_LSHR %merge, %0497 %d1:_(s32), %d2:_(s32), %d3:_(s32) = G_UNMERGE_VALUES %lshr498 $w0 = COPY %d2(s32)499 500...501---502name: test_lshr_nonpow2_wide503body: |504 bb.0:505 ; CHECK-LABEL: name: test_lshr_nonpow2_wide506 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0507 ; CHECK-NEXT: %a:_(s32) = COPY $w1508 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0509 ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)510 ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), %a(s32)511 ; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES %a(s32), [[C]](s32)512 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0513 ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 128514 ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C2]]515 ; CHECK-NEXT: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C2]], [[COPY]]516 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C2]]517 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C1]]518 ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 64519 ; CHECK-NEXT: [[SUB2:%[0-9]+]]:_(s64) = G_SUB [[COPY]], [[C3]]520 ; CHECK-NEXT: [[SUB3:%[0-9]+]]:_(s64) = G_SUB [[C3]], [[COPY]]521 ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s64), [[C3]]522 ; CHECK-NEXT: [[ICMP3:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[C1]]523 ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[MV]], [[COPY]](s64)524 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[MV1]], [[SUB3]](s64)525 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]]526 ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[MV1]], [[SUB2]](s64)527 ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[ICMP2]](s32), [[OR]], [[LSHR1]]528 ; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[ICMP3]](s32), [[MV]], [[SELECT]]529 ; CHECK-NEXT: [[ICMP4:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[SUB1]](s64), [[C3]]530 ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[MV2]], [[SUB1]](s64)531 ; CHECK-NEXT: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[ICMP4]](s32), [[SHL1]], [[C1]]532 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s64) = G_OR [[SELECT1]], [[SELECT2]]533 ; CHECK-NEXT: [[SUB4:%[0-9]+]]:_(s64) = G_SUB [[SUB]], [[C3]]534 ; CHECK-NEXT: [[SUB5:%[0-9]+]]:_(s64) = G_SUB [[C3]], [[SUB]]535 ; CHECK-NEXT: [[ICMP5:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[SUB]](s64), [[C3]]536 ; CHECK-NEXT: [[ICMP6:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[SUB]](s64), [[C1]]537 ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[MV2]], [[SUB]](s64)538 ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[C1]], [[SUB5]](s64)539 ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s64) = G_OR [[LSHR2]], [[SHL2]]540 ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s64) = G_LSHR [[C1]], [[SUB4]](s64)541 ; CHECK-NEXT: [[SELECT3:%[0-9]+]]:_(s64) = G_SELECT [[ICMP5]](s32), [[OR2]], [[LSHR3]]542 ; CHECK-NEXT: [[SELECT4:%[0-9]+]]:_(s64) = G_SELECT [[ICMP6]](s32), [[MV2]], [[SELECT3]]543 ; CHECK-NEXT: [[SELECT5:%[0-9]+]]:_(s64) = G_SELECT [[ICMP]](s32), [[OR1]], [[SELECT4]]544 ; CHECK-NEXT: [[SELECT6:%[0-9]+]]:_(s64) = G_SELECT [[ICMP1]](s32), [[MV]], [[SELECT5]]545 ; CHECK-NEXT: %d1:_(s32), %d2:_(s32) = G_UNMERGE_VALUES [[SELECT6]](s64)546 ; CHECK-NEXT: $w0 = COPY %d2(s32)547 %0:_(s64) = COPY $x0548 %a:_(s32) = COPY $w1549 %merge:_(s160) = G_MERGE_VALUES %a, %a, %a, %a, %a550 %lshr:_(s160) = G_LSHR %merge, %0551 %d1:_(s32), %d2:_(s32), %d3:_(s32), %d4:_(s32), %d5:_(s32) = G_UNMERGE_VALUES %lshr552 $w0 = COPY %d2(s32)553 554...555