1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX8 %s 3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s 4 5--- 6name: shufflevector_v2s16_v2s16_undef_undef 7tracksRegLiveness: true 8 9body: | 10 bb.0: 11 liveins: $vgpr0, $vgpr1 12 13 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_undef 14 ; GFX8: liveins: $vgpr0, $vgpr1 15 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 16 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 17 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 18 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 19 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C]], [[C1]](s32) 20 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[C]], [[SHL]] 21 ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 22 ; GFX8: $vgpr0 = COPY [[BITCAST]](<2 x s16>) 23 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_undef 24 ; GFX9: liveins: $vgpr0, $vgpr1 25 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 26 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 27 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, undef) 28 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 29 %0:_(<2 x s16>) = COPY $vgpr0 30 %1:_(<2 x s16>) = COPY $vgpr1 31 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, undef) 32 $vgpr0 = COPY %2 33 34... 35 36--- 37name: shufflevector_v2s16_v2s16_0_undef 38tracksRegLiveness: true 39 40body: | 41 bb.0: 42 liveins: $vgpr0, $vgpr1 43 44 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_undef 45 ; GFX8: liveins: $vgpr0, $vgpr1 46 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 47 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 48 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 49 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 50 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 51 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 52 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 53 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 54 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32) 55 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 56 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY3]], [[C2]](s32) 57 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 58 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 59 ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 60 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_undef 61 ; GFX9: liveins: $vgpr0, $vgpr1 62 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 63 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 64 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, undef) 65 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 66 %0:_(<2 x s16>) = COPY $vgpr0 67 %1:_(<2 x s16>) = COPY $vgpr1 68 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, undef) 69 $vgpr0 = COPY %2 70 71... 72 73--- 74name: shufflevector_v2s16_v2s16_undef_0 75tracksRegLiveness: true 76 77body: | 78 bb.0: 79 liveins: $vgpr0, $vgpr1 80 81 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_0 82 ; GFX8: liveins: $vgpr0, $vgpr1 83 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 84 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 85 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 86 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 87 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 88 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32) 89 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 90 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 91 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 92 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 93 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C2]](s32) 94 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[SHL]] 95 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 96 ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 97 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_0 98 ; GFX9: liveins: $vgpr0, $vgpr1 99 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 100 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 101 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, 0) 102 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 103 %0:_(<2 x s16>) = COPY $vgpr0 104 %1:_(<2 x s16>) = COPY $vgpr1 105 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 0) 106 $vgpr0 = COPY %2 107 108... 109 110--- 111name: shufflevector_v2s16_v2s16_0_1 112tracksRegLiveness: true 113 114body: | 115 bb.0: 116 liveins: $vgpr0, $vgpr1 117 118 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_1 119 ; GFX8: liveins: $vgpr0, $vgpr1 120 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 121 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 122 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 123 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 124 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 125 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 126 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 127 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 128 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 129 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 130 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 131 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 132 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 133 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 134 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 135 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 136 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 137 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_1 138 ; GFX9: liveins: $vgpr0, $vgpr1 139 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 140 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 141 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, 1) 142 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 143 %0:_(<2 x s16>) = COPY $vgpr0 144 %1:_(<2 x s16>) = COPY $vgpr1 145 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 1) 146 $vgpr0 = COPY %2 147 148... 149 150--- 151name: shufflevector_v2s16_v2s16_1_0 152tracksRegLiveness: true 153 154body: | 155 bb.0: 156 liveins: $vgpr0, $vgpr1 157 158 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_1_0 159 ; GFX8: liveins: $vgpr0, $vgpr1 160 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 161 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 162 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 163 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 164 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 165 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 166 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 167 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 168 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 169 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 170 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 171 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 172 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 173 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 174 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 175 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 176 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 177 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_1_0 178 ; GFX9: liveins: $vgpr0, $vgpr1 179 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 180 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 181 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(1, 0) 182 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 183 %0:_(<2 x s16>) = COPY $vgpr0 184 %1:_(<2 x s16>) = COPY $vgpr1 185 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 0) 186 $vgpr0 = COPY %2 187 188... 189 190--- 191name: shufflevector_v2s16_v2s16_0_0 192tracksRegLiveness: true 193 194body: | 195 bb.0: 196 liveins: $vgpr0, $vgpr1 197 198 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_0 199 ; GFX8: liveins: $vgpr0, $vgpr1 200 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 201 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 202 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 203 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 204 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 205 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 206 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 207 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 208 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 209 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 210 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 211 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 212 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 213 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32) 214 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 215 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 216 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 217 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_0 218 ; GFX9: liveins: $vgpr0, $vgpr1 219 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 220 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 221 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, 0) 222 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 223 %0:_(<2 x s16>) = COPY $vgpr0 224 %1:_(<2 x s16>) = COPY $vgpr1 225 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 0) 226 $vgpr0 = COPY %2 227 228... 229 230--- 231name: shufflevector_v2s16_v2s16_1_1 232tracksRegLiveness: true 233 234body: | 235 bb.0: 236 liveins: $vgpr0, $vgpr1 237 238 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_1_1 239 ; GFX8: liveins: $vgpr0, $vgpr1 240 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 241 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 242 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 243 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 244 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 245 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 246 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 247 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 248 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 249 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 250 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 251 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 252 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 253 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 254 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 255 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 256 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_1_1 257 ; GFX9: liveins: $vgpr0, $vgpr1 258 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 259 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 260 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(1, 1) 261 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 262 %0:_(<2 x s16>) = COPY $vgpr0 263 %1:_(<2 x s16>) = COPY $vgpr1 264 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 1) 265 $vgpr0 = COPY %2 266 267... 268 269--- 270name: shufflevector_v2s16_v2s16_2_2 271tracksRegLiveness: true 272 273body: | 274 bb.0: 275 liveins: $vgpr0, $vgpr1 276 277 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_2 278 ; GFX8: liveins: $vgpr0, $vgpr1 279 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 280 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 281 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 282 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 283 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 284 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 285 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 286 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 287 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 288 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 289 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 290 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 291 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 292 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32) 293 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 294 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 295 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 296 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_2 297 ; GFX9: liveins: $vgpr0, $vgpr1 298 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 299 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 300 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(2, 2) 301 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 302 %0:_(<2 x s16>) = COPY $vgpr0 303 %1:_(<2 x s16>) = COPY $vgpr1 304 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 2) 305 $vgpr0 = COPY %2 306 307... 308 309--- 310name: shufflevector_v2s16_v2s16_2_undef 311tracksRegLiveness: true 312 313body: | 314 bb.0: 315 liveins: $vgpr0, $vgpr1 316 317 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_undef 318 ; GFX8: liveins: $vgpr0, $vgpr1 319 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 320 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 321 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 322 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 323 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 324 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 325 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 326 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 327 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32) 328 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 329 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY3]], [[C2]](s32) 330 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 331 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 332 ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 333 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_undef 334 ; GFX9: liveins: $vgpr0, $vgpr1 335 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 336 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 337 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(2, undef) 338 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 339 %0:_(<2 x s16>) = COPY $vgpr0 340 %1:_(<2 x s16>) = COPY $vgpr1 341 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, undef) 342 $vgpr0 = COPY %2 343 344... 345 346--- 347name: shufflevector_v2s16_v2s16_undef_2 348tracksRegLiveness: true 349 350body: | 351 bb.0: 352 liveins: $vgpr0, $vgpr1 353 354 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_2 355 ; GFX8: liveins: $vgpr0, $vgpr1 356 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 357 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 358 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 359 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 360 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 361 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32) 362 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 363 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 364 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 365 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 366 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C2]](s32) 367 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[SHL]] 368 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 369 ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 370 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_2 371 ; GFX9: liveins: $vgpr0, $vgpr1 372 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 373 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 374 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, 2) 375 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 376 %0:_(<2 x s16>) = COPY $vgpr0 377 %1:_(<2 x s16>) = COPY $vgpr1 378 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 2) 379 $vgpr0 = COPY %2 380 381... 382 383--- 384name: shufflevector_v2s16_v2s16_2_3 385tracksRegLiveness: true 386 387body: | 388 bb.0: 389 liveins: $vgpr0, $vgpr1 390 391 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_3 392 ; GFX8: liveins: $vgpr0, $vgpr1 393 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 394 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 395 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 396 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 397 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 398 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 399 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 400 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 401 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 402 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 403 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 404 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 405 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 406 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 407 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 408 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 409 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 410 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_3 411 ; GFX9: liveins: $vgpr0, $vgpr1 412 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 413 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 414 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(2, 3) 415 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 416 %0:_(<2 x s16>) = COPY $vgpr0 417 %1:_(<2 x s16>) = COPY $vgpr1 418 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 3) 419 $vgpr0 = COPY %2 420 421... 422 423--- 424name: shufflevector_v2s16_v2s16_3_2 425tracksRegLiveness: true 426 427body: | 428 bb.0: 429 liveins: $vgpr0, $vgpr1 430 431 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_2 432 ; GFX8: liveins: $vgpr0, $vgpr1 433 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 434 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 435 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 436 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 437 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 438 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 439 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 440 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 441 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 442 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 443 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 444 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 445 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 446 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 447 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 448 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 449 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 450 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_2 451 ; GFX9: liveins: $vgpr0, $vgpr1 452 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 453 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 454 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(3, 2) 455 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 456 %0:_(<2 x s16>) = COPY $vgpr0 457 %1:_(<2 x s16>) = COPY $vgpr1 458 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 2) 459 $vgpr0 = COPY %2 460 461... 462 463--- 464name: shufflevector_v2s16_v2s16_undef_3 465tracksRegLiveness: true 466 467body: | 468 bb.0: 469 liveins: $vgpr0, $vgpr1 470 471 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_3 472 ; GFX8: liveins: $vgpr0, $vgpr1 473 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 474 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 475 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 476 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 477 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 478 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 479 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 480 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 481 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 482 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C]](s32) 483 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[C1]], [[SHL]] 484 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 485 ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 486 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_3 487 ; GFX9: liveins: $vgpr0, $vgpr1 488 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 489 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 490 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, 3) 491 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 492 %0:_(<2 x s16>) = COPY $vgpr0 493 %1:_(<2 x s16>) = COPY $vgpr1 494 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 3) 495 $vgpr0 = COPY %2 496 497... 498 499--- 500name: shufflevector_v2s16_v2s16_3_undef 501tracksRegLiveness: true 502 503body: | 504 bb.0: 505 liveins: $vgpr0, $vgpr1 506 507 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_undef 508 ; GFX8: liveins: $vgpr0, $vgpr1 509 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 510 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 511 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 512 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 513 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 514 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 515 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 516 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 517 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 518 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32) 519 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 520 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 521 ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 522 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_undef 523 ; GFX9: liveins: $vgpr0, $vgpr1 524 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 525 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 526 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(3, undef) 527 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 528 %0:_(<2 x s16>) = COPY $vgpr0 529 %1:_(<2 x s16>) = COPY $vgpr1 530 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, undef) 531 $vgpr0 = COPY %2 532 533... 534 535--- 536name: shufflevector_v2s16_v2s16_3_3 537tracksRegLiveness: true 538 539body: | 540 bb.0: 541 liveins: $vgpr0, $vgpr1 542 543 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_3 544 ; GFX8: liveins: $vgpr0, $vgpr1 545 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 546 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 547 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 548 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 549 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 550 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 551 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 552 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 553 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 554 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 555 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 556 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 557 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 558 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 559 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 560 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 561 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_3 562 ; GFX9: liveins: $vgpr0, $vgpr1 563 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 564 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 565 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(3, 3) 566 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 567 %0:_(<2 x s16>) = COPY $vgpr0 568 %1:_(<2 x s16>) = COPY $vgpr1 569 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 3) 570 $vgpr0 = COPY %2 571 572... 573 574--- 575name: shufflevector_v2s16_v2s16_0_2 576tracksRegLiveness: true 577 578body: | 579 bb.0: 580 liveins: $vgpr0, $vgpr1 581 582 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_2 583 ; GFX8: liveins: $vgpr0, $vgpr1 584 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 585 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 586 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 587 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 588 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 589 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 590 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 591 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 592 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 593 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 594 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 595 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 596 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 597 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32) 598 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 599 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 600 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 601 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_2 602 ; GFX9: liveins: $vgpr0, $vgpr1 603 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 604 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 605 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 606 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 607 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 608 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 609 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 610 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 611 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 612 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 613 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 614 %0:_(<2 x s16>) = COPY $vgpr0 615 %1:_(<2 x s16>) = COPY $vgpr1 616 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 2) 617 $vgpr0 = COPY %2 618 619... 620 621--- 622name: shufflevector_v2s16_v2s16_2_0 623tracksRegLiveness: true 624 625body: | 626 bb.0: 627 liveins: $vgpr0, $vgpr1 628 629 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_0 630 ; GFX8: liveins: $vgpr0, $vgpr1 631 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 632 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 633 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 634 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 635 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 636 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 637 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 638 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 639 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 640 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 641 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 642 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 643 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 644 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32) 645 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 646 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 647 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 648 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_0 649 ; GFX9: liveins: $vgpr0, $vgpr1 650 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 651 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 652 ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, 0) 653 ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>) 654 %0:_(<2 x s16>) = COPY $vgpr0 655 %1:_(<2 x s16>) = COPY $vgpr1 656 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 0) 657 $vgpr0 = COPY %2 658 659... 660 661--- 662name: shufflevector_v2s16_v2s16_3_0 663tracksRegLiveness: true 664 665body: | 666 bb.0: 667 liveins: $vgpr0, $vgpr1 668 669 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_0 670 ; GFX8: liveins: $vgpr0, $vgpr1 671 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 672 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 673 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 674 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 675 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 676 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 677 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 678 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 679 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 680 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 681 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 682 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 683 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 684 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 685 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 686 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 687 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 688 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_0 689 ; GFX9: liveins: $vgpr0, $vgpr1 690 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 691 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 692 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 693 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 694 ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 695 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 696 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 697 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 698 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 699 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 700 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 701 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 702 %0:_(<2 x s16>) = COPY $vgpr0 703 %1:_(<2 x s16>) = COPY $vgpr1 704 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 0) 705 $vgpr0 = COPY %2 706 707... 708 709--- 710name: shufflevector_v2s16_v2s16_0_3 711tracksRegLiveness: true 712 713body: | 714 bb.0: 715 liveins: $vgpr0, $vgpr1 716 717 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_3 718 ; GFX8: liveins: $vgpr0, $vgpr1 719 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 720 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 721 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 722 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 723 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 724 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 725 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 726 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 727 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 728 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 729 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 730 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 731 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 732 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 733 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 734 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 735 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 736 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_3 737 ; GFX9: liveins: $vgpr0, $vgpr1 738 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 739 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 740 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 741 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 742 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 743 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 744 ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 745 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 746 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 747 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 748 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 749 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 750 %0:_(<2 x s16>) = COPY $vgpr0 751 %1:_(<2 x s16>) = COPY $vgpr1 752 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 3) 753 $vgpr0 = COPY %2 754 755... 756 757--- 758name: shufflevector_v2s16_v2s16_1_2 759tracksRegLiveness: true 760 761body: | 762 bb.0: 763 liveins: $vgpr0, $vgpr1 764 765 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_1_2 766 ; GFX8: liveins: $vgpr0, $vgpr1 767 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 768 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 769 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 770 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 771 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 772 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 773 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 774 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 775 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 776 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 777 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 778 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 779 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 780 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 781 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 782 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 783 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 784 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_1_2 785 ; GFX9: liveins: $vgpr0, $vgpr1 786 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 787 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 788 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 789 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 790 ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 791 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 792 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 793 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 794 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 795 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 796 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 797 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 798 %0:_(<2 x s16>) = COPY $vgpr0 799 %1:_(<2 x s16>) = COPY $vgpr1 800 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 2) 801 $vgpr0 = COPY %2 802 803... 804 805--- 806name: shufflevector_v2s16_v2s16_2_1 807tracksRegLiveness: true 808 809body: | 810 bb.0: 811 liveins: $vgpr0, $vgpr1 812 813 ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_1 814 ; GFX8: liveins: $vgpr0, $vgpr1 815 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 816 ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 817 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 818 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 819 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 820 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 821 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 822 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 823 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 824 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 825 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 826 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 827 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 828 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 829 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 830 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 831 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 832 ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_1 833 ; GFX9: liveins: $vgpr0, $vgpr1 834 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 835 ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 836 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 837 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 838 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 839 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 840 ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 841 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 842 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 843 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 844 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 845 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 846 %0:_(<2 x s16>) = COPY $vgpr0 847 %1:_(<2 x s16>) = COPY $vgpr1 848 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 1) 849 $vgpr0 = COPY %2 850 851... 852 853--- 854name: shufflevector_v4s16_v3s16_2_0 855tracksRegLiveness: true 856 857body: | 858 bb.0: 859 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 860 861 ; GFX8-LABEL: name: shufflevector_v4s16_v3s16_2_0 862 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 863 ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 864 ; GFX8: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 865 ; GFX8: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY]](<4 x s16>), 0 866 ; GFX8: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY1]](<4 x s16>), 0 867 ; GFX8: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 868 ; GFX8: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT1]](<3 x s16>), 0 869 ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>) 870 ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 871 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 872 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 873 ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 874 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 875 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 876 ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 16 877 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 878 ; GFX8: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 16 879 ; GFX8: [[COPY4:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 880 ; GFX8: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 16 881 ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32), [[SEXT_INREG2]](s32) 882 ; GFX8: [[EXTRACT2:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 64 883 ; GFX8: [[INSERT1:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0 884 ; GFX8: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT1]](<4 x s16>) 885 ; GFX8: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV2]](<2 x s16>) 886 ; GFX8: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 887 ; GFX8: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>) 888 ; GFX8: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32) 889 ; GFX8: [[COPY5:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32) 890 ; GFX8: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 16 891 ; GFX8: [[COPY6:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32) 892 ; GFX8: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY6]], 16 893 ; GFX8: [[COPY7:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32) 894 ; GFX8: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY7]], 16 895 ; GFX8: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG3]](s32), [[SEXT_INREG4]](s32), [[SEXT_INREG5]](s32) 896 ; GFX8: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 32 897 ; GFX8: [[EXTRACT4:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 0 898 ; GFX8: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 0 899 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 900 ; GFX8: [[COPY8:%[0-9]+]]:_(s32) = COPY [[EXTRACT2]](s32) 901 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY8]], [[C1]] 902 ; GFX8: [[COPY9:%[0-9]+]]:_(s32) = COPY [[EXTRACT3]](s32) 903 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY9]], [[C1]] 904 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 905 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 906 ; GFX8: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 907 ; GFX8: [[COPY10:%[0-9]+]]:_(s32) = COPY [[EXTRACT4]](s32) 908 ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY10]], [[C1]] 909 ; GFX8: [[COPY11:%[0-9]+]]:_(s32) = COPY [[EXTRACT5]](s32) 910 ; GFX8: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C1]] 911 ; GFX8: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C]](s32) 912 ; GFX8: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 913 ; GFX8: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 914 ; GFX8: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST4]](<2 x s16>), [[BITCAST5]](<2 x s16>) 915 ; GFX8: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 916 ; GFX9-LABEL: name: shufflevector_v4s16_v3s16_2_0 917 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 918 ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 919 ; GFX9: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 920 ; GFX9: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY]](<4 x s16>), 0 921 ; GFX9: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY1]](<4 x s16>), 0 922 ; GFX9: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 923 ; GFX9: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT1]](<3 x s16>), 0 924 ; GFX9: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>) 925 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 926 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 927 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 928 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 929 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 930 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 931 ; GFX9: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 16 932 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 933 ; GFX9: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 16 934 ; GFX9: [[COPY4:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 935 ; GFX9: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 16 936 ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32), [[SEXT_INREG2]](s32) 937 ; GFX9: [[EXTRACT2:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 64 938 ; GFX9: [[INSERT1:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0 939 ; GFX9: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT1]](<4 x s16>) 940 ; GFX9: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV2]](<2 x s16>) 941 ; GFX9: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 942 ; GFX9: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>) 943 ; GFX9: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32) 944 ; GFX9: [[COPY5:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32) 945 ; GFX9: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 16 946 ; GFX9: [[COPY6:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32) 947 ; GFX9: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY6]], 16 948 ; GFX9: [[COPY7:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32) 949 ; GFX9: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY7]], 16 950 ; GFX9: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG3]](s32), [[SEXT_INREG4]](s32), [[SEXT_INREG5]](s32) 951 ; GFX9: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 32 952 ; GFX9: [[EXTRACT4:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 0 953 ; GFX9: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 0 954 ; GFX9: [[COPY8:%[0-9]+]]:_(s32) = COPY [[EXTRACT2]](s32) 955 ; GFX9: [[COPY9:%[0-9]+]]:_(s32) = COPY [[EXTRACT3]](s32) 956 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY8]](s32), [[COPY9]](s32) 957 ; GFX9: [[COPY10:%[0-9]+]]:_(s32) = COPY [[EXTRACT4]](s32) 958 ; GFX9: [[COPY11:%[0-9]+]]:_(s32) = COPY [[EXTRACT5]](s32) 959 ; GFX9: [[BUILD_VECTOR_TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY10]](s32), [[COPY11]](s32) 960 ; GFX9: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BUILD_VECTOR_TRUNC]](<2 x s16>), [[BUILD_VECTOR_TRUNC1]](<2 x s16>) 961 ; GFX9: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 962 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 963 %1:_(<4 x s16>) = COPY $vgpr2_vgpr3 964 %2:_(<3 x s16>) = G_EXTRACT %0, 0 965 %3:_(<3 x s16>) = G_EXTRACT %1, 0 966 %4:_(<4 x s16>) = G_SHUFFLE_VECTOR %2, %3, shufflemask(5, 1, 3, 0) 967 $vgpr0_vgpr1 = COPY %4 968 969... 970 971--- 972name: shufflevector_v2s16_v4s16_1_0 973tracksRegLiveness: true 974 975body: | 976 bb.0: 977 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 978 979 ; GFX8-LABEL: name: shufflevector_v2s16_v4s16_1_0 980 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 981 ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 982 ; GFX8: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 983 ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 984 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 985 ; GFX8: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0 986 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 987 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C1]](s32) 988 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 989 ; GFX8: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 0 990 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32) 991 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 992 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 993 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]] 994 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 995 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 996 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 997 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 998 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 999 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 1000 ; GFX9-LABEL: name: shufflevector_v2s16_v4s16_1_0 1001 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 1002 ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 1003 ; GFX9: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 1004 ; GFX9: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 1005 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 1006 ; GFX9: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0 1007 ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1008 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C1]](s32) 1009 ; GFX9: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 1010 ; GFX9: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 0 1011 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32) 1012 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 1013 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 1014 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 1015 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 1016 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 1017 %1:_(<4 x s16>) = COPY $vgpr2_vgpr3 1018 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 0) 1019 $vgpr0 = COPY %2 1020 1021... 1022 1023--- 1024name: shufflevector_v2s16_v4s16_1_3 1025tracksRegLiveness: true 1026 1027body: | 1028 bb.0: 1029 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 1030 1031 ; GFX8-LABEL: name: shufflevector_v2s16_v4s16_1_3 1032 ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 1033 ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 1034 ; GFX8: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 1035 ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 1036 ; GFX8: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0 1037 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1038 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C]](s32) 1039 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 1040 ; GFX8: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 32 1041 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32) 1042 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 1043 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 1044 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 1045 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 1046 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 1047 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 1048 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 1049 ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 1050 ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>) 1051 ; GFX9-LABEL: name: shufflevector_v2s16_v4s16_1_3 1052 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3 1053 ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 1054 ; GFX9: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 1055 ; GFX9: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 1056 ; GFX9: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0 1057 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1058 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C]](s32) 1059 ; GFX9: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>) 1060 ; GFX9: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 32 1061 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32) 1062 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 1063 ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 1064 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32) 1065 ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>) 1066 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 1067 %1:_(<4 x s16>) = COPY $vgpr2_vgpr3 1068 %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 3) 1069 $vgpr0 = COPY %2 1070 1071... 1072