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