1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -O0 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX7 %s 3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX8 %s 4 5--- 6name: bswap_s8 7 8body: | 9 bb.0: 10 liveins: $vgpr0 11 ; GFX7-LABEL: name: bswap_s8 12 ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 13 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 14 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 15 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32) 16 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]] 17 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 18 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY2]], [[AND]](s32) 19 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32) 20 ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 21 ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 22 ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C1]] 23 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32) 24 ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 25 ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[SHL]](s32) 26 ; GFX7: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]] 27 ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR]](s32) 28 ; GFX7: $vgpr0 = COPY [[COPY7]](s32) 29 ; GFX8-LABEL: name: bswap_s8 30 ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 31 ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 32 ; GFX8: [[BSWAP:%[0-9]+]]:_(s16) = G_BSWAP [[TRUNC]] 33 ; GFX8: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8 34 ; GFX8: [[LSHR:%[0-9]+]]:_(s16) = G_LSHR [[BSWAP]], [[C]](s16) 35 ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[LSHR]](s16) 36 ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32) 37 %0:_(s32) = COPY $vgpr0 38 %1:_(s8) = G_TRUNC %0 39 %2:_(s8) = G_BSWAP %1 40 %3:_(s32) = G_ANYEXT %2 41 $vgpr0 = COPY %3 42... 43 44--- 45name: bswap_s16 46 47body: | 48 bb.0: 49 liveins: $vgpr0 50 ; GFX7-LABEL: name: bswap_s16 51 ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 52 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 53 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 54 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 55 ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32) 56 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32) 57 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 58 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 59 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 60 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32) 61 ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 62 ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]] 63 ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16) 64 ; GFX7: $vgpr0 = COPY [[ANYEXT]](s32) 65 ; GFX8-LABEL: name: bswap_s16 66 ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 67 ; GFX8: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 68 ; GFX8: [[BSWAP:%[0-9]+]]:_(s16) = G_BSWAP [[TRUNC]] 69 ; GFX8: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[BSWAP]](s16) 70 ; GFX8: $vgpr0 = COPY [[ANYEXT]](s32) 71 %0:_(s32) = COPY $vgpr0 72 %1:_(s16) = G_TRUNC %0 73 %2:_(s16) = G_BSWAP %1 74 %3:_(s32) = G_ANYEXT %2 75 $vgpr0 = COPY %3 76... 77 78--- 79name: bswap_s24 80 81body: | 82 bb.0: 83 liveins: $vgpr0 84 ; GFX7-LABEL: name: bswap_s24 85 ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 86 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 87 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16777215 88 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[C]](s32) 89 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]] 90 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 91 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY2]], [[AND]](s32) 92 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32) 93 ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 94 ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 95 ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C1]] 96 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[AND1]](s32) 97 ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 98 ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[SHL]](s32) 99 ; GFX7: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]] 100 ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR]](s32) 101 ; GFX7: $vgpr0 = COPY [[COPY7]](s32) 102 ; GFX8-LABEL: name: bswap_s24 103 ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 104 ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 105 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[COPY1]] 106 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 107 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BSWAP]], [[C]](s32) 108 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 109 ; GFX8: $vgpr0 = COPY [[COPY2]](s32) 110 %0:_(s32) = COPY $vgpr0 111 %1:_(s24) = G_TRUNC %0 112 %2:_(s24) = G_BSWAP %1 113 %3:_(s32) = G_ANYEXT %2 114 $vgpr0 = COPY %3 115... 116 117--- 118name: bswap_s32 119 120body: | 121 bb.0: 122 liveins: $vgpr0 123 ; GFX7-LABEL: name: bswap_s32 124 ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 125 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[COPY]] 126 ; GFX7: $vgpr0 = COPY [[BSWAP]](s32) 127 ; GFX8-LABEL: name: bswap_s32 128 ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 129 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[COPY]] 130 ; GFX8: $vgpr0 = COPY [[BSWAP]](s32) 131 %0:_(s32) = COPY $vgpr0 132 %1:_(s32) = G_BSWAP %0 133 $vgpr0 = COPY %1 134... 135 136--- 137name: bswap_v2s16 138 139body: | 140 bb.0: 141 liveins: $vgpr0 142 ; GFX7-LABEL: name: bswap_v2s16 143 ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 144 ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 145 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 146 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 147 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 148 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 149 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C1]](s32) 150 ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32) 151 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 152 ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 153 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 154 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 155 ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32) 156 ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 157 ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]] 158 ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 159 ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 160 ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY5]], [[COPY4]](s32) 161 ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32) 162 ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 163 ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 164 ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY7]], [[C2]] 165 ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY6]](s32) 166 ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 167 ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]] 168 ; GFX7: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16) 169 ; GFX7: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16) 170 ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32) 171 ; GFX7: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL2]] 172 ; GFX7: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 173 ; GFX7: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 174 ; GFX8-LABEL: name: bswap_v2s16 175 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 176 ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[COPY]] 177 ; GFX8: $vgpr0 = COPY [[BSWAP]](<2 x s16>) 178 %0:_(<2 x s16>) = COPY $vgpr0 179 %1:_(<2 x s16>) = G_BSWAP %0 180 $vgpr0 = COPY %1 181... 182 183--- 184name: bswap_v3s16 185 186body: | 187 bb.0: 188 liveins: $vgpr0, $vgpr1, $vgpr2 189 ; GFX7-LABEL: name: bswap_v3s16 190 ; GFX7: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 191 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 192 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 193 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 194 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 195 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY3]], [[C]](s32) 196 ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32) 197 ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C]](s32) 198 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 199 ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 200 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C1]] 201 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY4]](s32) 202 ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 203 ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]] 204 ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C]](s32) 205 ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 206 ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY7]], [[COPY6]](s32) 207 ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32) 208 ; GFX7: [[COPY8:%[0-9]+]]:_(s32) = COPY [[C]](s32) 209 ; GFX7: [[COPY9:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 210 ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY9]], [[C1]] 211 ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY8]](s32) 212 ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 213 ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]] 214 ; GFX7: [[COPY10:%[0-9]+]]:_(s32) = COPY [[C]](s32) 215 ; GFX7: [[COPY11:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 216 ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY11]], [[COPY10]](s32) 217 ; GFX7: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[SHL2]](s32) 218 ; GFX7: [[COPY12:%[0-9]+]]:_(s32) = COPY [[C]](s32) 219 ; GFX7: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 220 ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY13]], [[C1]] 221 ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY12]](s32) 222 ; GFX7: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 223 ; GFX7: [[OR2:%[0-9]+]]:_(s16) = G_OR [[TRUNC5]], [[TRUNC4]] 224 ; GFX7: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[OR]](s16) 225 ; GFX7: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[OR1]](s16) 226 ; GFX7: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[OR2]](s16) 227 ; GFX7: $vgpr0 = COPY [[ANYEXT]](s32) 228 ; GFX7: $vgpr1 = COPY [[ANYEXT1]](s32) 229 ; GFX7: $vgpr2 = COPY [[ANYEXT2]](s32) 230 ; GFX8-LABEL: name: bswap_v3s16 231 ; GFX8: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 232 ; GFX8: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 233 ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 234 ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 235 ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 236 ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]] 237 ; GFX8: [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 238 ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C]] 239 ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 240 ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 241 ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 242 ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 243 ; GFX8: [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 244 ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C]] 245 ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 246 ; GFX8: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C1]](s32) 247 ; GFX8: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 248 ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 249 ; GFX8: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 250 ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[BITCAST]] 251 ; GFX8: [[BSWAP1:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[BITCAST1]] 252 ; GFX8: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[BSWAP]](<2 x s16>) 253 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C1]](s32) 254 ; GFX8: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[BSWAP1]](<2 x s16>) 255 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C1]](s32) 256 ; GFX8: [[COPY6:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32) 257 ; GFX8: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 258 ; GFX8: [[COPY8:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32) 259 ; GFX8: $vgpr0 = COPY [[COPY6]](s32) 260 ; GFX8: $vgpr1 = COPY [[COPY7]](s32) 261 ; GFX8: $vgpr2 = COPY [[COPY8]](s32) 262 %0:_(s32) = COPY $vgpr0 263 %1:_(s32) = COPY $vgpr1 264 %2:_(s32) = COPY $vgpr2 265 %3:_(s16) = G_TRUNC %0 266 %4:_(s16) = G_TRUNC %1 267 %5:_(s16) = G_TRUNC %2 268 269 %6:_(<3 x s16>) = G_BUILD_VECTOR %3, %4, %5 270 %7:_(<3 x s16>) = G_BSWAP %6 271 %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %7 272 %11:_(s32) = G_ANYEXT %8 273 %12:_(s32) = G_ANYEXT %9 274 %13:_(s32) = G_ANYEXT %10 275 $vgpr0 = COPY %11 276 $vgpr1 = COPY %12 277 $vgpr2 = COPY %13 278... 279 280--- 281name: bswap_v4s16 282 283body: | 284 bb.0: 285 liveins: $vgpr0_vgpr1 286 ; GFX7-LABEL: name: bswap_v4s16 287 ; GFX7: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 288 ; GFX7: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 289 ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 290 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 291 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 292 ; GFX7: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 293 ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 294 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 295 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 296 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C1]](s32) 297 ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32) 298 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 299 ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 300 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 301 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 302 ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32) 303 ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 304 ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]] 305 ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 306 ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 307 ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY5]], [[COPY4]](s32) 308 ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32) 309 ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 310 ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 311 ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY7]], [[C2]] 312 ; GFX7: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY6]](s32) 313 ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR3]](s32) 314 ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]] 315 ; GFX7: [[COPY8:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 316 ; GFX7: [[COPY9:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 317 ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY9]], [[COPY8]](s32) 318 ; GFX7: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[SHL2]](s32) 319 ; GFX7: [[COPY10:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 320 ; GFX7: [[COPY11:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 321 ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C2]] 322 ; GFX7: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY10]](s32) 323 ; GFX7: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR4]](s32) 324 ; GFX7: [[OR2:%[0-9]+]]:_(s16) = G_OR [[TRUNC5]], [[TRUNC4]] 325 ; GFX7: [[COPY12:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 326 ; GFX7: [[COPY13:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 327 ; GFX7: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[COPY13]], [[COPY12]](s32) 328 ; GFX7: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[SHL3]](s32) 329 ; GFX7: [[COPY14:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 330 ; GFX7: [[COPY15:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 331 ; GFX7: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C2]] 332 ; GFX7: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[AND3]], [[COPY14]](s32) 333 ; GFX7: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR5]](s32) 334 ; GFX7: [[OR3:%[0-9]+]]:_(s16) = G_OR [[TRUNC7]], [[TRUNC6]] 335 ; GFX7: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16) 336 ; GFX7: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16) 337 ; GFX7: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32) 338 ; GFX7: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL4]] 339 ; GFX7: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32) 340 ; GFX7: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16) 341 ; GFX7: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[OR3]](s16) 342 ; GFX7: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C]](s32) 343 ; GFX7: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL5]] 344 ; GFX7: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32) 345 ; GFX7: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST2]](<2 x s16>), [[BITCAST3]](<2 x s16>) 346 ; GFX7: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 347 ; GFX8-LABEL: name: bswap_v4s16 348 ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 349 ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 350 ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV]] 351 ; GFX8: [[BSWAP1:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV1]] 352 ; GFX8: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BSWAP]](<2 x s16>), [[BSWAP1]](<2 x s16>) 353 ; GFX8: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 354 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 355 %1:_(<4 x s16>) = G_BSWAP %0 356 $vgpr0_vgpr1 = COPY %1 357... 358 359--- 360name: bswap_v2s32 361 362body: | 363 bb.0: 364 liveins: $vgpr0_vgpr1 365 ; GFX7-LABEL: name: bswap_v2s32 366 ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 367 ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 368 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 369 ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 370 ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32) 371 ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 372 ; GFX8-LABEL: name: bswap_v2s32 373 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 374 ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 375 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 376 ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 377 ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32) 378 ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 379 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 380 %1:_(<2 x s32>) = G_BSWAP %0 381 $vgpr0_vgpr1 = COPY %1 382... 383 384--- 385name: bswap_s64 386 387body: | 388 bb.0: 389 liveins: $vgpr0_vgpr1 390 ; GFX7-LABEL: name: bswap_s64 391 ; GFX7: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 392 ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 393 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 394 ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 395 ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 396 ; GFX7: $vgpr0_vgpr1 = COPY [[MV]](s64) 397 ; GFX8-LABEL: name: bswap_s64 398 ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 399 ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 400 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 401 ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 402 ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 403 ; GFX8: $vgpr0_vgpr1 = COPY [[MV]](s64) 404 %0:_(s64) = COPY $vgpr0_vgpr1 405 %1:_(s64) = G_BSWAP %0 406 $vgpr0_vgpr1 = COPY %1 407... 408 409--- 410name: bswap_v2s64 411 412body: | 413 bb.0: 414 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 415 ; GFX7-LABEL: name: bswap_v2s64 416 ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 417 ; GFX7: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 418 ; GFX7: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64) 419 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]] 420 ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]] 421 ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 422 ; GFX7: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64) 423 ; GFX7: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]] 424 ; GFX7: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]] 425 ; GFX7: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32) 426 ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64) 427 ; GFX7: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 428 ; GFX8-LABEL: name: bswap_v2s64 429 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 430 ; GFX8: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 431 ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64) 432 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]] 433 ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]] 434 ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 435 ; GFX8: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64) 436 ; GFX8: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]] 437 ; GFX8: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]] 438 ; GFX8: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32) 439 ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64) 440 ; GFX8: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 441 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 442 %1:_(<2 x s64>) = G_BSWAP %0 443 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 444... 445