1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -march=aarch64 -run-pass=legalizer %s -o - | FileCheck %s 3# RUN: llc -O0 -debugify-and-strip-all-safe -march=aarch64 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK 4--- 5name: test_shift 6body: | 7 bb.0.entry: 8 ; CHECK-LABEL: name: test_shift 9 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 10 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1 11 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 12 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 13 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]] 14 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 15 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[TRUNC1]], 8 16 ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SEXT_INREG]], [[AND]](s32) 17 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ASHR]](s32) 18 ; CHECK: $w0 = COPY [[COPY2]](s32) 19 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 20 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]] 21 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 22 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]] 23 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32) 24 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 25 ; CHECK: $w0 = COPY [[COPY3]](s32) 26 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64) 27 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC4]], [[C]] 28 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64) 29 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[TRUNC5]], [[AND3]](s32) 30 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[SHL]](s32) 31 ; CHECK: $w0 = COPY [[COPY4]](s32) 32 %0:_(s64) = COPY $x0 33 %1:_(s64) = COPY $x1 34 %2:_(s8) = G_TRUNC %0(s64) 35 %3:_(s8) = G_TRUNC %1(s64) 36 %4:_(s8) = G_ASHR %2, %3 37 %7:_(s32) = G_ANYEXT %4(s8) 38 $w0 = COPY %7(s32) 39 %5:_(s8) = G_LSHR %2, %3 40 %8:_(s32) = G_ANYEXT %5(s8) 41 $w0 = COPY %8(s32) 42 %6:_(s8) = G_SHL %2, %3 43 %9:_(s32) = G_ANYEXT %6(s8) 44 $w0 = COPY %9(s32) 45 46... 47--- 48name: test_shl_i64_i32 49body: | 50 bb.0: 51 ; CHECK-LABEL: name: test_shl_i64_i32 52 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 53 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 54 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32) 55 ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[ZEXT]](s64) 56 ; CHECK: $x0 = COPY [[SHL]](s64) 57 %0:_(s64) = COPY $x0 58 %1:_(s32) = COPY $w1 59 %2:_(s64) = G_SHL %0, %1 60 $x0 = COPY %2(s64) 61 62... 63--- 64name: test_ashr_i64_i32 65body: | 66 bb.0: 67 ; CHECK-LABEL: name: test_ashr_i64_i32 68 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 69 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 70 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32) 71 ; CHECK: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[ZEXT]](s64) 72 ; CHECK: $x0 = COPY [[ASHR]](s64) 73 %0:_(s64) = COPY $x0 74 %1:_(s32) = COPY $w1 75 %2:_(s64) = G_ASHR %0, %1 76 $x0 = COPY %2(s64) 77 78... 79--- 80name: test_lshr_i64_i32 81body: | 82 bb.0: 83 ; CHECK-LABEL: name: test_lshr_i64_i32 84 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0 85 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1 86 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[COPY1]](s32) 87 ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[COPY]], [[ZEXT]](s64) 88 ; CHECK: $x0 = COPY [[LSHR]](s64) 89 %0:_(s64) = COPY $x0 90 %1:_(s32) = COPY $w1 91 %2:_(s64) = G_LSHR %0, %1 92 $x0 = COPY %2(s64) 93 94... 95 96--- 97name: test_shl_s128_s128 98body: | 99 bb.0: 100 ; CHECK-LABEL: name: test_shl_s128_s128 101 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0 102 ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1 103 ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128) 104 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 105 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128) 106 ; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]] 107 ; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]] 108 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 109 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]] 110 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 111 ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]] 112 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32) 113 ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[TRUNC]](s64) 114 ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[SUB1]](s64) 115 ; CHECK: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[TRUNC]](s64) 116 ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL1]] 117 ; CHECK: [[SHL2:%[0-9]+]]:_(s64) = G_SHL [[UV]], [[SUB]](s64) 118 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[SHL]], [[C1]] 119 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[SHL2]] 120 ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV1]], [[SELECT1]] 121 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT]](s64), [[SELECT2]](s64) 122 ; CHECK: $q0 = COPY [[MV]](s128) 123 %0:_(s128) = COPY $q0 124 %1:_(s128) = COPY $q1 125 %2:_(s128) = G_SHL %0, %1 126 $q0 = COPY %2 127 128... 129 130--- 131name: test_lshr_s128_s128 132body: | 133 bb.0: 134 ; CHECK-LABEL: name: test_lshr_s128_s128 135 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0 136 ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1 137 ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128) 138 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 139 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128) 140 ; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]] 141 ; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]] 142 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 143 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]] 144 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 145 ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]] 146 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32) 147 ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[TRUNC]](s64) 148 ; CHECK: [[LSHR1:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64) 149 ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64) 150 ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR1]], [[SHL]] 151 ; CHECK: [[LSHR2:%[0-9]+]]:_(s64) = G_LSHR [[UV1]], [[SUB]](s64) 152 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[LSHR2]] 153 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]] 154 ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[LSHR]], [[C1]] 155 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64) 156 ; CHECK: $q0 = COPY [[MV]](s128) 157 %0:_(s128) = COPY $q0 158 %1:_(s128) = COPY $q1 159 %2:_(s128) = G_LSHR %0, %1 160 $q0 = COPY %2 161 162... 163 164--- 165name: test_ashr_s128_s128 166body: | 167 bb.0: 168 ; CHECK-LABEL: name: test_ashr_s128_s128 169 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0 170 ; CHECK: [[COPY1:%[0-9]+]]:_(s128) = COPY $q1 171 ; CHECK: [[TRUNC:%[0-9]+]]:_(s64) = G_TRUNC [[COPY1]](s128) 172 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 64 173 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](s128) 174 ; CHECK: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[TRUNC]], [[C]] 175 ; CHECK: [[SUB1:%[0-9]+]]:_(s64) = G_SUB [[C]], [[TRUNC]] 176 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 177 ; CHECK: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[TRUNC]](s64), [[C]] 178 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s32) 179 ; CHECK: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[TRUNC]](s64), [[C1]] 180 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP1]](s32) 181 ; CHECK: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[TRUNC]](s64) 182 ; CHECK: [[LSHR:%[0-9]+]]:_(s64) = G_LSHR [[UV]], [[TRUNC]](s64) 183 ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[UV1]], [[SUB1]](s64) 184 ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[LSHR]], [[SHL]] 185 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 63 186 ; CHECK: [[ASHR1:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[C2]](s64) 187 ; CHECK: [[ASHR2:%[0-9]+]]:_(s64) = G_ASHR [[UV1]], [[SUB]](s64) 188 ; CHECK: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[OR]], [[ASHR2]] 189 ; CHECK: [[SELECT1:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC2]](s1), [[UV]], [[SELECT]] 190 ; CHECK: [[SELECT2:%[0-9]+]]:_(s64) = G_SELECT [[TRUNC1]](s1), [[ASHR]], [[ASHR1]] 191 ; CHECK: [[MV:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[SELECT1]](s64), [[SELECT2]](s64) 192 ; CHECK: $q0 = COPY [[MV]](s128) 193 %0:_(s128) = COPY $q0 194 %1:_(s128) = COPY $q1 195 %2:_(s128) = G_ASHR %0, %1 196 $q0 = COPY %2 197 198... 199 200--- 201name: test_ashr_v2i32 202body: | 203 bb.0: 204 ; CHECK-LABEL: name: test_ashr_v2i32 205 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0 206 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1 207 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s32>) = G_ASHR [[COPY]], [[COPY1]](<2 x s32>) 208 ; CHECK: $d0 = COPY [[ASHR]](<2 x s32>) 209 %0:_(<2 x s32>) = COPY $d0 210 %1:_(<2 x s32>) = COPY $d1 211 %2:_(<2 x s32>) = G_ASHR %0, %1 212 $d0 = COPY %2 213 214... 215--- 216name: test_ashr_v4i32 217body: | 218 bb.0: 219 ; CHECK-LABEL: name: test_ashr_v4i32 220 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0 221 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1 222 ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[COPY]], [[COPY1]](<4 x s32>) 223 ; CHECK: $q0 = COPY [[ASHR]](<4 x s32>) 224 %0:_(<4 x s32>) = COPY $q0 225 %1:_(<4 x s32>) = COPY $q1 226 %2:_(<4 x s32>) = G_ASHR %0, %1 227 $q0 = COPY %2 228 229... 230--- 231name: shl_cimm_32 232body: | 233 bb.1: 234 liveins: $w0 235 236 ; CHECK-LABEL: name: shl_cimm_32 237 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 238 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8 239 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY]], [[C]](s64) 240 ; CHECK: $w0 = COPY [[SHL]](s32) 241 ; CHECK: RET_ReallyLR implicit $w0 242 %0:_(s32) = COPY $w0 243 %1:_(s32) = G_CONSTANT i32 8 244 %2:_(s32) = G_SHL %0, %1(s32) 245 $w0 = COPY %2(s32) 246 RET_ReallyLR implicit $w0 247 248... 249--- 250name: lshr_cimm_32 251body: | 252 bb.1: 253 liveins: $w0 254 255 ; CHECK-LABEL: name: lshr_cimm_32 256 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 257 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8 258 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s64) 259 ; CHECK: $w0 = COPY [[LSHR]](s32) 260 ; CHECK: RET_ReallyLR implicit $w0 261 %0:_(s32) = COPY $w0 262 %1:_(s32) = G_CONSTANT i32 8 263 %2:_(s32) = G_LSHR %0, %1(s32) 264 $w0 = COPY %2(s32) 265 RET_ReallyLR implicit $w0 266 267... 268--- 269name: ashr_cimm_32 270body: | 271 bb.1: 272 liveins: $w0 273 274 ; CHECK-LABEL: name: ashr_cimm_32 275 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0 276 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8 277 ; CHECK: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[COPY]], [[C]](s64) 278 ; CHECK: $w0 = COPY [[ASHR]](s32) 279 ; CHECK: RET_ReallyLR implicit $w0 280 %0:_(s32) = COPY $w0 281 %1:_(s32) = G_CONSTANT i32 8 282 %2:_(s32) = G_ASHR %0, %1(s32) 283 $w0 = COPY %2(s32) 284 RET_ReallyLR implicit $w0 285 286... 287--- 288name: test_ashr_v16i8 289body: | 290 bb.0: 291 ; CHECK-LABEL: name: test_ashr_v16i8 292 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 293 ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1 294 ; CHECK: [[ASHR:%[0-9]+]]:_(<16 x s8>) = G_ASHR [[COPY]], [[COPY1]](<16 x s8>) 295 ; CHECK: $q0 = COPY [[ASHR]](<16 x s8>) 296 %0:_(<16 x s8>) = COPY $q0 297 %1:_(<16 x s8>) = COPY $q1 298 %2:_(<16 x s8>) = G_ASHR %0, %1 299 $q0 = COPY %2 300... 301--- 302name: test_ashr_v8i16 303body: | 304 bb.0: 305 ; CHECK-LABEL: name: test_ashr_v8i16 306 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0 307 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1 308 ; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s16>) = G_ASHR [[COPY]], [[COPY1]](<8 x s16>) 309 ; CHECK: $q0 = COPY [[ASHR]](<8 x s16>) 310 %0:_(<8 x s16>) = COPY $q0 311 %1:_(<8 x s16>) = COPY $q1 312 %2:_(<8 x s16>) = G_ASHR %0, %1 313 $q0 = COPY %2 314... 315--- 316name: test_shl_v16i8 317body: | 318 bb.0: 319 ; CHECK-LABEL: name: test_shl_v16i8 320 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 321 ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1 322 ; CHECK: [[SHL:%[0-9]+]]:_(<16 x s8>) = G_SHL [[COPY]], [[COPY1]](<16 x s8>) 323 ; CHECK: $q0 = COPY [[SHL]](<16 x s8>) 324 %0:_(<16 x s8>) = COPY $q0 325 %1:_(<16 x s8>) = COPY $q1 326 %2:_(<16 x s8>) = G_SHL %0, %1 327 $q0 = COPY %2 328... 329--- 330name: test_shl_v8i16 331body: | 332 bb.0: 333 ; CHECK-LABEL: name: test_shl_v8i16 334 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0 335 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1 336 ; CHECK: [[SHL:%[0-9]+]]:_(<8 x s16>) = G_SHL [[COPY]], [[COPY1]](<8 x s16>) 337 ; CHECK: $q0 = COPY [[SHL]](<8 x s16>) 338 %0:_(<8 x s16>) = COPY $q0 339 %1:_(<8 x s16>) = COPY $q1 340 %2:_(<8 x s16>) = G_SHL %0, %1 341 $q0 = COPY %2 342... 343--- 344name: test_lshr_v16i8 345body: | 346 bb.0: 347 ; CHECK-LABEL: name: test_lshr_v16i8 348 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0 349 ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1 350 ; CHECK: [[LSHR:%[0-9]+]]:_(<16 x s8>) = G_LSHR [[COPY]], [[COPY1]](<16 x s8>) 351 ; CHECK: $q0 = COPY [[LSHR]](<16 x s8>) 352 %0:_(<16 x s8>) = COPY $q0 353 %1:_(<16 x s8>) = COPY $q1 354 %2:_(<16 x s8>) = G_LSHR %0, %1 355 $q0 = COPY %2 356... 357--- 358name: test_lshr_v8i16 359body: | 360 bb.0: 361 ; CHECK-LABEL: name: test_lshr_v8i16 362 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0 363 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1 364 ; CHECK: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[COPY1]](<8 x s16>) 365 ; CHECK: $q0 = COPY [[LSHR]](<8 x s16>) 366 %0:_(<8 x s16>) = COPY $q0 367 %1:_(<8 x s16>) = COPY $q1 368 %2:_(<8 x s16>) = G_LSHR %0, %1 369 $q0 = COPY %2 370... 371--- 372name: test_shl_v4i16 373body: | 374 bb.0: 375 ; CHECK-LABEL: name: test_shl_v4i16 376 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0 377 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1 378 ; CHECK: [[SHL:%[0-9]+]]:_(<4 x s16>) = G_SHL [[COPY]], [[COPY1]](<4 x s16>) 379 ; CHECK: $d0 = COPY [[SHL]](<4 x s16>) 380 %0:_(<4 x s16>) = COPY $d0 381 %1:_(<4 x s16>) = COPY $d1 382 %2:_(<4 x s16>) = G_SHL %0, %1 383 $d0 = COPY %2 384... 385--- 386name: test_lshr_v4i16 387body: | 388 bb.0: 389 ; CHECK-LABEL: name: test_lshr_v4i16 390 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0 391 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1 392 ; CHECK: [[LSHR:%[0-9]+]]:_(<4 x s16>) = G_LSHR [[COPY]], [[COPY1]](<4 x s16>) 393 ; CHECK: $d0 = COPY [[LSHR]](<4 x s16>) 394 %0:_(<4 x s16>) = COPY $d0 395 %1:_(<4 x s16>) = COPY $d1 396 %2:_(<4 x s16>) = G_LSHR %0, %1 397 $d0 = COPY %2 398... 399--- 400name: test_ashr_v4i16 401body: | 402 bb.0: 403 ; CHECK-LABEL: name: test_ashr_v4i16 404 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0 405 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1 406 ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s16>) = G_ASHR [[COPY]], [[COPY1]](<4 x s16>) 407 ; CHECK: $d0 = COPY [[ASHR]](<4 x s16>) 408 %0:_(<4 x s16>) = COPY $d0 409 %1:_(<4 x s16>) = COPY $d1 410 %2:_(<4 x s16>) = G_ASHR %0, %1 411 $d0 = COPY %2 412... 413--- 414name: test_ashr_v8s32 415body: | 416 bb.0: 417 ; CHECK-LABEL: name: test_ashr_v8s32 418 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF 419 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32) 420 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32) 421 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32) 422 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32) 423 ; CHECK: [[ASHR:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR]], [[BUILD_VECTOR2]](<4 x s32>) 424 ; CHECK: [[ASHR1:%[0-9]+]]:_(<4 x s32>) = G_ASHR [[BUILD_VECTOR1]], [[BUILD_VECTOR3]](<4 x s32>) 425 ; CHECK: $q0 = COPY [[ASHR]](<4 x s32>) 426 ; CHECK: $q1 = COPY [[ASHR1]](<4 x s32>) 427 %0:_(<8 x s32>) = G_IMPLICIT_DEF 428 %1:_(<8 x s32>) = G_IMPLICIT_DEF 429 %2:_(<8 x s32>) = G_ASHR %0, %1 430 %3:_(<4 x s32>), %4:_(<4 x s32>) = G_UNMERGE_VALUES %2 431 $q0 = COPY %3(<4 x s32>) 432 $q1 = COPY %4(<4 x s32>) 433... 434--- 435name: test_shl_v8s8 436body: | 437 bb.0: 438 ; CHECK-LABEL: name: test_shl_v8s8 439 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0 440 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1 441 ; CHECK: [[SHL:%[0-9]+]]:_(<8 x s8>) = G_SHL [[COPY]], [[COPY1]](<8 x s8>) 442 ; CHECK: $d0 = COPY [[SHL]](<8 x s8>) 443 %0:_(<8 x s8>) = COPY $d0 444 %1:_(<8 x s8>) = COPY $d1 445 %2:_(<8 x s8>) = G_SHL %0, %1 446 $d0 = COPY %2 447... 448--- 449name: test_ashr_v8s8 450body: | 451 bb.0: 452 ; CHECK-LABEL: name: test_ashr_v8s8 453 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0 454 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1 455 ; CHECK: [[ASHR:%[0-9]+]]:_(<8 x s8>) = G_ASHR [[COPY]], [[COPY1]](<8 x s8>) 456 ; CHECK: $d0 = COPY [[ASHR]](<8 x s8>) 457 %0:_(<8 x s8>) = COPY $d0 458 %1:_(<8 x s8>) = COPY $d1 459 %2:_(<8 x s8>) = G_ASHR %0, %1 460 $d0 = COPY %2 461... 462 463--- 464name: test_lshr_v8s8 465body: | 466 bb.0: 467 ; CHECK-LABEL: name: test_lshr_v8s8 468 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0 469 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1 470 ; CHECK: [[LSHR:%[0-9]+]]:_(<8 x s8>) = G_LSHR [[COPY]], [[COPY1]](<8 x s8>) 471 ; CHECK: $d0 = COPY [[LSHR]](<8 x s8>) 472 %0:_(<8 x s8>) = COPY $d0 473 %1:_(<8 x s8>) = COPY $d1 474 %2:_(<8 x s8>) = G_LSHR %0, %1 475 $d0 = COPY %2 476... 477