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: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BSWAP]](<2 x s16>), [[BSWAP1]](<2 x s16>), [[DEF]](<2 x s16>) 253 ; GFX8: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[CONCAT_VECTORS]](<6 x s16>), 0 254 ; GFX8: [[DEF1:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 255 ; GFX8: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF1]], [[EXTRACT]](<3 x s16>), 0 256 ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>) 257 ; GFX8: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 258 ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C1]](s32) 259 ; GFX8: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 260 ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C1]](s32) 261 ; GFX8: [[COPY6:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32) 262 ; GFX8: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 263 ; GFX8: [[COPY8:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32) 264 ; GFX8: $vgpr0 = COPY [[COPY6]](s32) 265 ; GFX8: $vgpr1 = COPY [[COPY7]](s32) 266 ; GFX8: $vgpr2 = COPY [[COPY8]](s32) 267 %0:_(s32) = COPY $vgpr0 268 %1:_(s32) = COPY $vgpr1 269 %2:_(s32) = COPY $vgpr2 270 %3:_(s16) = G_TRUNC %0 271 %4:_(s16) = G_TRUNC %1 272 %5:_(s16) = G_TRUNC %2 273 274 %6:_(<3 x s16>) = G_BUILD_VECTOR %3, %4, %5 275 %7:_(<3 x s16>) = G_BSWAP %6 276 %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %7 277 %11:_(s32) = G_ANYEXT %8 278 %12:_(s32) = G_ANYEXT %9 279 %13:_(s32) = G_ANYEXT %10 280 $vgpr0 = COPY %11 281 $vgpr1 = COPY %12 282 $vgpr2 = COPY %13 283... 284 285--- 286name: bswap_v4s16 287 288body: | 289 bb.0: 290 liveins: $vgpr0_vgpr1 291 ; GFX7-LABEL: name: bswap_v4s16 292 ; GFX7: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 293 ; GFX7: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 294 ; GFX7: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 295 ; GFX7: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 296 ; GFX7: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 297 ; GFX7: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 298 ; GFX7: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 299 ; GFX7: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 300 ; GFX7: [[COPY1:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 301 ; GFX7: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C1]](s32) 302 ; GFX7: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SHL]](s32) 303 ; GFX7: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 304 ; GFX7: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 305 ; GFX7: [[COPY3:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 306 ; GFX7: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]] 307 ; GFX7: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[AND]], [[COPY2]](s32) 308 ; GFX7: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 309 ; GFX7: [[OR:%[0-9]+]]:_(s16) = G_OR [[TRUNC1]], [[TRUNC]] 310 ; GFX7: [[COPY4:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 311 ; GFX7: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 312 ; GFX7: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[COPY5]], [[COPY4]](s32) 313 ; GFX7: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[SHL1]](s32) 314 ; GFX7: [[COPY6:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 315 ; GFX7: [[COPY7:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 316 ; GFX7: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY7]], [[C2]] 317 ; GFX7: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[AND1]], [[COPY6]](s32) 318 ; GFX7: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR3]](s32) 319 ; GFX7: [[OR1:%[0-9]+]]:_(s16) = G_OR [[TRUNC3]], [[TRUNC2]] 320 ; GFX7: [[COPY8:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 321 ; GFX7: [[COPY9:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 322 ; GFX7: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[COPY9]], [[COPY8]](s32) 323 ; GFX7: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[SHL2]](s32) 324 ; GFX7: [[COPY10:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 325 ; GFX7: [[COPY11:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 326 ; GFX7: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C2]] 327 ; GFX7: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[AND2]], [[COPY10]](s32) 328 ; GFX7: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR4]](s32) 329 ; GFX7: [[OR2:%[0-9]+]]:_(s16) = G_OR [[TRUNC5]], [[TRUNC4]] 330 ; GFX7: [[COPY12:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 331 ; GFX7: [[COPY13:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 332 ; GFX7: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[COPY13]], [[COPY12]](s32) 333 ; GFX7: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[SHL3]](s32) 334 ; GFX7: [[COPY14:%[0-9]+]]:_(s32) = COPY [[C1]](s32) 335 ; GFX7: [[COPY15:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 336 ; GFX7: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C2]] 337 ; GFX7: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[AND3]], [[COPY14]](s32) 338 ; GFX7: [[TRUNC7:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR5]](s32) 339 ; GFX7: [[OR3:%[0-9]+]]:_(s16) = G_OR [[TRUNC7]], [[TRUNC6]] 340 ; GFX7: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[OR]](s16) 341 ; GFX7: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[OR1]](s16) 342 ; GFX7: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32) 343 ; GFX7: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL4]] 344 ; GFX7: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32) 345 ; GFX7: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[OR2]](s16) 346 ; GFX7: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[OR3]](s16) 347 ; GFX7: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C]](s32) 348 ; GFX7: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL5]] 349 ; GFX7: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32) 350 ; GFX7: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST2]](<2 x s16>), [[BITCAST3]](<2 x s16>) 351 ; GFX7: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 352 ; GFX8-LABEL: name: bswap_v4s16 353 ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 354 ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 355 ; GFX8: [[BSWAP:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV]] 356 ; GFX8: [[BSWAP1:%[0-9]+]]:_(<2 x s16>) = G_BSWAP [[UV1]] 357 ; GFX8: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BSWAP]](<2 x s16>), [[BSWAP1]](<2 x s16>) 358 ; GFX8: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 359 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 360 %1:_(<4 x s16>) = G_BSWAP %0 361 $vgpr0_vgpr1 = COPY %1 362... 363 364--- 365name: bswap_v2s32 366 367body: | 368 bb.0: 369 liveins: $vgpr0_vgpr1 370 ; GFX7-LABEL: name: bswap_v2s32 371 ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 372 ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 373 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 374 ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 375 ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32) 376 ; GFX7: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 377 ; GFX8-LABEL: name: bswap_v2s32 378 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 379 ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 380 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 381 ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 382 ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BSWAP]](s32), [[BSWAP1]](s32) 383 ; GFX8: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 384 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 385 %1:_(<2 x s32>) = G_BSWAP %0 386 $vgpr0_vgpr1 = COPY %1 387... 388 389--- 390name: bswap_s64 391 392body: | 393 bb.0: 394 liveins: $vgpr0_vgpr1 395 ; GFX7-LABEL: name: bswap_s64 396 ; GFX7: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 397 ; GFX7: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 398 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 399 ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 400 ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 401 ; GFX7: $vgpr0_vgpr1 = COPY [[MV]](s64) 402 ; GFX8-LABEL: name: bswap_s64 403 ; GFX8: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 404 ; GFX8: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 405 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV1]] 406 ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV]] 407 ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 408 ; GFX8: $vgpr0_vgpr1 = COPY [[MV]](s64) 409 %0:_(s64) = COPY $vgpr0_vgpr1 410 %1:_(s64) = G_BSWAP %0 411 $vgpr0_vgpr1 = COPY %1 412... 413 414--- 415name: bswap_v2s64 416 417body: | 418 bb.0: 419 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 420 ; GFX7-LABEL: name: bswap_v2s64 421 ; GFX7: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 422 ; GFX7: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 423 ; GFX7: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64) 424 ; GFX7: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]] 425 ; GFX7: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]] 426 ; GFX7: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 427 ; GFX7: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64) 428 ; GFX7: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]] 429 ; GFX7: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]] 430 ; GFX7: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32) 431 ; GFX7: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64) 432 ; GFX7: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 433 ; GFX8-LABEL: name: bswap_v2s64 434 ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 435 ; GFX8: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 436 ; GFX8: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV]](s64) 437 ; GFX8: [[BSWAP:%[0-9]+]]:_(s32) = G_BSWAP [[UV3]] 438 ; GFX8: [[BSWAP1:%[0-9]+]]:_(s32) = G_BSWAP [[UV2]] 439 ; GFX8: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP]](s32), [[BSWAP1]](s32) 440 ; GFX8: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UV1]](s64) 441 ; GFX8: [[BSWAP2:%[0-9]+]]:_(s32) = G_BSWAP [[UV5]] 442 ; GFX8: [[BSWAP3:%[0-9]+]]:_(s32) = G_BSWAP [[UV4]] 443 ; GFX8: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[BSWAP2]](s32), [[BSWAP3]](s32) 444 ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64) 445 ; GFX8: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 446 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 447 %1:_(<2 x s64>) = G_BSWAP %0 448 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 449... 450