1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -global-isel-abort=0 -o - %s | FileCheck %s 3 4--- 5name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32 6body: | 7 bb.0: 8 ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32 9 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 10 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 11 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 12 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 13 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 14 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 15 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1) 16 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1) 17 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 18 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 1 19 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT1]](s32) 20 ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 1 21 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32) 22 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 23 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 24 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1 25 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>) 26 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>) 27 %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4 28 %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5 29 %8:_(s32) = G_ANYEXT %6(s1) 30 %9:_(s32) = G_ANYEXT %7(s1) 31 %10:_(<2 x s32>) = G_BUILD_VECTOR %8, %9 32 %11:_(<2 x s1>) = G_TRUNC %10(<2 x s32>) 33 %12:_(s1), %13:_(s1) = G_UNMERGE_VALUES %11 34 %14:_(s32) = G_SEXT %12 35 %15:_(s32) = G_SEXT %13 36 %16:_(<2 x s32>) = G_BUILD_VECTOR %14, %15 37 $vgpr0_vgpr1 = COPY %16 38 39... 40 41# Requires looking thorugh extra copies between the build_vector, 42# trunc and unmerge. 43--- 44name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32_extra_copies 45body: | 46 bb.0: 47 ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32_extra_copies 48 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 49 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 50 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 51 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 52 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 53 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 54 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1) 55 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1) 56 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32) 57 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 1 58 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT1]](s32) 59 ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 1 60 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32) 61 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 62 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 63 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1 64 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>) 65 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>) 66 %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4 67 %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5 68 %8:_(s32) = G_ANYEXT %6(s1) 69 %9:_(s32) = G_ANYEXT %7(s1) 70 %10:_(<2 x s32>) = G_BUILD_VECTOR %8, %9 71 %11:_(<2 x s32>) = COPY %10 72 %12:_(<2 x s1>) = G_TRUNC %11(<2 x s32>) 73 %13:_(<2 x s1>) = COPY %12 74 %14:_(s1), %15:_(s1) = G_UNMERGE_VALUES %13 75 %16:_(s32) = G_SEXT %14 76 %17:_(s32) = G_SEXT %15 77 %18:_(<2 x s32>) = G_BUILD_VECTOR %16, %17 78 $vgpr0_vgpr1 = COPY %18 79 80... 81 82--- 83name: test_unmerge_values_s32_sext_v2s32_of_build_vector_v2s16 84body: | 85 bb.0: 86 ; CHECK-LABEL: name: test_unmerge_values_s32_sext_v2s32_of_build_vector_v2s16 87 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 88 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 89 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 90 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 91 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 92 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 93 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1) 94 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1) 95 ; CHECK: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ANYEXT]](s16) 96 ; CHECK: [[SEXT1:%[0-9]+]]:_(s32) = G_SEXT [[ANYEXT1]](s16) 97 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT]](s32), [[SEXT1]](s32) 98 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 99 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 100 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1 101 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>) 102 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>) 103 %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4 104 %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5 105 %8:_(s16) = G_ANYEXT %6 106 %9:_(s16) = G_ANYEXT %7 107 %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9 108 %11:_(<2 x s32>) = G_SEXT %10 109 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11 110 %14:_(<2 x s32>) = G_BUILD_VECTOR %12, %13 111 $vgpr0_vgpr1 = COPY %14 112 113... 114 115--- 116name: test_unmerge_values_s32_zext_v2s32_of_build_vector_v2s16 117body: | 118 bb.0: 119 ; CHECK-LABEL: name: test_unmerge_values_s32_zext_v2s32_of_build_vector_v2s16 120 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 121 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 122 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 123 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 124 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 125 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 126 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1) 127 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1) 128 ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16) 129 ; CHECK: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16) 130 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ZEXT]](s32), [[ZEXT1]](s32) 131 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 132 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 133 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1 134 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>) 135 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>) 136 %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4 137 %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5 138 %8:_(s16) = G_ANYEXT %6(s1) 139 %9:_(s16) = G_ANYEXT %7(s1) 140 %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9 141 %11:_(<2 x s32>) = G_ZEXT %10 142 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11 143 %14:_(<2 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32) 144 $vgpr0_vgpr1 = COPY %14(<2 x s32>) 145 146... 147 148--- 149name: test_unmerge_values_s32_anyext_v2s32_of_build_vector_v2s16 150body: | 151 bb.0: 152 ; CHECK-LABEL: name: test_unmerge_values_s32_anyext_v2s32_of_build_vector_v2s16 153 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 154 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 155 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 156 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 157 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 158 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 159 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1) 160 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1) 161 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32) 162 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 163 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 164 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1 165 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>) 166 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>) 167 %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4 168 %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5 169 %8:_(s16) = G_ANYEXT %6(s1) 170 %9:_(s16) = G_ANYEXT %7(s1) 171 %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9 172 %11:_(<2 x s32>) = G_ANYEXT %10 173 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11 174 %14:_(<2 x s32>) = G_BUILD_VECTOR %12, %13 175 $vgpr0_vgpr1 = COPY %14 176 177... 178 179--- 180name: test_unmerge_values_v2s16_zext_v4s32_of_build_vector_v4s16 181 182body: | 183 bb.0: 184 ; CHECK-LABEL: name: test_unmerge_values_v2s16_zext_v4s32_of_build_vector_v4s16 185 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 186 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 187 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 188 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 189 ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]] 190 ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]] 191 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1) 192 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1) 193 ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16) 194 ; CHECK: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16) 195 ; CHECK: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16) 196 ; CHECK: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16) 197 ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT]](s32) 198 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT1]](s32) 199 ; CHECK: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT2]](s32) 200 ; CHECK: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT3]](s32) 201 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>) 202 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 203 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1 204 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>) 205 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>) 206 %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4 207 %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5 208 %8:_(s16) = G_ANYEXT %6 209 %9:_(s16) = G_ANYEXT %7 210 %10:_(<4 x s16>) = G_BUILD_VECTOR %8, %9, %8, %9 211 %11:_(<4 x s32>) = G_ZEXT %10 212 %12:_(<2 x s16>), %13:_(<2 x s16>), %14:_(<2 x s16>), %15:_(<2 x s16>) = G_UNMERGE_VALUES %11 213 S_ENDPGM 0, implicit %12, implicit %13, implicit %14, implicit %15 214 215... 216 217--- 218name: test_unmerge_values_s1_trunc_v4s1_of_concat_vectors_v4s32_v2s32 219body: | 220 bb.0: 221 ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v4s1_of_concat_vectors_v4s32_v2s32 222 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 223 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 224 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 225 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 226 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV]](s32) 227 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 1 228 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32) 229 ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 1 230 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32) 231 ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 1 232 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[UV3]](s32) 233 ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 1 234 ; CHECK: $vgpr0 = COPY [[SEXT_INREG]](s32) 235 ; CHECK: $vgpr1 = COPY [[SEXT_INREG1]](s32) 236 ; CHECK: $vgpr2 = COPY [[SEXT_INREG2]](s32) 237 ; CHECK: $vgpr3 = COPY [[SEXT_INREG3]](s32) 238 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 239 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 240 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 241 %3:_(<4 x s1>) = G_TRUNC %2 242 %4:_(s1), %5:_(s1), %6:_(s1), %7:_(s1) = G_UNMERGE_VALUES %3 243 %8:_(s32) = G_SEXT %4 244 %9:_(s32) = G_SEXT %5 245 %10:_(s32) = G_SEXT %6 246 %11:_(s32) = G_SEXT %7 247 $vgpr0 = COPY %8 248 $vgpr1 = COPY %9 249 $vgpr2 = COPY %10 250 $vgpr3 = COPY %11 251... 252 253--- 254name: test_unmerge_values_s16_of_concat_vectors_v2s16_v2s16 255body: | 256 bb.0: 257 ; CHECK-LABEL: name: test_unmerge_values_s16_of_concat_vectors_v2s16_v2s16 258 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 259 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 260 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 261 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 262 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 263 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 264 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 265 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 266 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 267 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 268 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 269 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16) 270 %0:_(<2 x s16>) = COPY $vgpr0 271 %1:_(<2 x s16>) = COPY $vgpr1 272 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1 273 %3:_(s16), %4:_(s16), %5:_(s16), %6:_(s16) = G_UNMERGE_VALUES %2 274 S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6 275... 276 277--- 278name: test_unmerge_values_s32_of_concat_vectors_v2s32_v2s32 279body: | 280 bb.0: 281 ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v2s32_v2s32 282 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 283 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr1_vgpr2 284 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 285 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 286 ; CHECK: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32) 287 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 288 %1:_(<2 x s32>) = COPY $vgpr1_vgpr2 289 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 290 %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %2 291 S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6 292... 293 294--- 295name: test_unmerge_values_s32_of_concat_vectors_v2s64_v2s64 296body: | 297 bb.0: 298 ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v2s64_v2s64 299 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 300 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 301 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 302 ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>) 303 ; CHECK: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32), implicit [[UV4]](s32), implicit [[UV5]](s32), implicit [[UV6]](s32), implicit [[UV7]](s32) 304 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 305 %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 306 %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1 307 %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %2 308 S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10 309... 310 311--- 312name: test_unmerge_values_s32_of_trunc_concat_vectors_v2s64_v2s64 313body: | 314 bb.0: 315 ; CHECK-LABEL: name: test_unmerge_values_s32_of_trunc_concat_vectors_v2s64_v2s64 316 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 317 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 318 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 319 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>) 320 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64) 321 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64) 322 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64) 323 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64) 324 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s32), implicit [[TRUNC1]](s32), implicit [[TRUNC2]](s32), implicit [[TRUNC3]](s32) 325 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 326 %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 327 %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1 328 %3:_(<4 x s32>) = G_TRUNC %2 329 %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %3 330 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7 331... 332 333--- 334name: test_unmerge_values_s64_of_sext_concat_vectors_v2s32_v2s32 335body: | 336 bb.0: 337 ; CHECK-LABEL: name: test_unmerge_values_s64_of_sext_concat_vectors_v2s32_v2s32 338 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 339 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 340 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 341 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 342 ; CHECK: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[UV]](s32) 343 ; CHECK: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[UV1]](s32) 344 ; CHECK: [[SEXT2:%[0-9]+]]:_(s64) = G_SEXT [[UV2]](s32) 345 ; CHECK: [[SEXT3:%[0-9]+]]:_(s64) = G_SEXT [[UV3]](s32) 346 ; CHECK: S_ENDPGM 0, implicit [[SEXT]](s64), implicit [[SEXT1]](s64), implicit [[SEXT2]](s64), implicit [[SEXT3]](s64) 347 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 348 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 349 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 350 %3:_(<4 x s64>) = G_SEXT %2 351 %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3 352 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7 353... 354 355--- 356name: test_unmerge_values_s64_of_zext_concat_vectors_v2s32_v2s32 357body: | 358 bb.0: 359 ; CHECK-LABEL: name: test_unmerge_values_s64_of_zext_concat_vectors_v2s32_v2s32 360 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 361 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 362 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 363 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 364 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32) 365 ; CHECK: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32) 366 ; CHECK: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32) 367 ; CHECK: [[ZEXT3:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32) 368 ; CHECK: S_ENDPGM 0, implicit [[ZEXT]](s64), implicit [[ZEXT1]](s64), implicit [[ZEXT2]](s64), implicit [[ZEXT3]](s64) 369 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 370 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 371 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 372 %3:_(<4 x s64>) = G_ZEXT %2 373 %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3 374 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7 375... 376 377--- 378name: test_unmerge_values_s64_of_anyext_concat_vectors_v2s32_v2s32 379body: | 380 bb.0: 381 ; CHECK-LABEL: name: test_unmerge_values_s64_of_anyext_concat_vectors_v2s32_v2s32 382 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 383 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 384 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 385 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>) 386 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[UV]](s32) 387 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[UV1]](s32) 388 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[UV2]](s32) 389 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[UV3]](s32) 390 ; CHECK: S_ENDPGM 0, implicit [[ANYEXT]](s64), implicit [[ANYEXT1]](s64), implicit [[ANYEXT2]](s64), implicit [[ANYEXT3]](s64) 391 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 392 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 393 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 394 %3:_(<4 x s64>) = G_ANYEXT %2 395 %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3 396 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7 397... 398 399--- 400name: test_unmerge_values_s8_of_trunc_v4s16_concat_vectors_v2s32_v2s32 401body: | 402 bb.0: 403 ; CHECK-LABEL: name: test_unmerge_values_s8_of_trunc_v4s16_concat_vectors_v2s32_v2s32 404 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 405 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 406 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY]](<2 x s32>) 407 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY1]](<2 x s32>) 408 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>) 409 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST]](s32) 410 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 411 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 412 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32) 413 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 414 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32) 415 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR1]](s32) 416 ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 417 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C2]](s32) 418 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR2]](s32) 419 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>) 420 ; CHECK: [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST1]](s32) 421 ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 422 ; CHECK: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR3]](s32) 423 ; CHECK: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32) 424 ; CHECK: [[TRUNC8:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR4]](s32) 425 ; CHECK: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C2]](s32) 426 ; CHECK: [[TRUNC9:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR5]](s32) 427 ; CHECK: S_ENDPGM 0, implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8), implicit [[TRUNC4]](s8), implicit [[TRUNC5]](s8), implicit [[TRUNC6]](s8), implicit [[TRUNC7]](s8), implicit [[TRUNC8]](s8), implicit [[TRUNC9]](s8) 428 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 429 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 430 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 431 %3:_(<4 x s16>) = G_TRUNC %2 432 %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8), %9:_(s8), %10:_(s8), %11:_(s8) = G_UNMERGE_VALUES %3 433 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11 434... 435 436--- 437name: test_unmerge_values_s16_of_anyext_v4s64_concat_vectors_v2s32_v2s32 438body: | 439 bb.0: 440 ; CHECK-LABEL: name: test_unmerge_values_s16_of_anyext_v4s64_concat_vectors_v2s32_v2s32 441 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 442 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 443 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 444 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[UV]](s32) 445 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64) 446 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32) 447 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 448 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32) 449 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 450 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32) 451 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV3]], [[C]](s32) 452 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 453 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16) 454 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 455 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 456 %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1 457 %3:_(<4 x s64>) = G_ANYEXT %2 458 %4:_(s16), %5:_(s16), %6:_(s16), %7:_(s16), %8:_(s16), %9:_(s16), %10:_(s16), %11:_(s16), %12:_(s16), %13:_(s16), %14:_(s16), %15:_(s16), %16:_(s16), %17:_(s16), %18:_(s16), %19:_(s16) = G_UNMERGE_VALUES %3 459 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7 460... 461 462# FIXME: Handle this 463--- 464name: test_unmerge_values_s32_of_concat_vectors_v4s32_v4s32 465body: | 466 bb.0: 467 ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v4s32_v4s32 468 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 469 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3 470 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5 471 ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr6_vgpr7 472 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY]](<2 x s32>) 473 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY1]](<2 x s32>) 474 ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY2]](<2 x s32>) 475 ; CHECK: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY3]](<2 x s32>) 476 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>) 477 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>) 478 ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC2]](<2 x s16>) 479 ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC3]](<2 x s16>) 480 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](s32), implicit [[BITCAST1]](s32), implicit [[BITCAST2]](s32), implicit [[BITCAST3]](s32) 481 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 482 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3 483 %2:_(<2 x s32>) = COPY $vgpr4_vgpr5 484 %3:_(<2 x s32>) = COPY $vgpr6_vgpr7 485 %4:_(<8 x s32>) = G_CONCAT_VECTORS %0, %1, %2, %3 486 %5:_(<8 x s16>) = G_TRUNC %4 487 %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32) = G_UNMERGE_VALUES %5 488 S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9 489... 490 491--- 492name: test_unmerge_values_s64_of_build_vector_v4s32 493body: | 494 bb.0: 495 ; CHECK-LABEL: name: test_unmerge_values_s64_of_build_vector_v4s32 496 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 497 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 498 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 499 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3 500 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32) 501 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY2]](s32), [[COPY3]](s32) 502 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR]](<2 x s32>) 503 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR1]](<2 x s32>) 504 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>) 505 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>) 506 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](s32), implicit [[BITCAST1]](s32) 507 %0:_(s32) = COPY $vgpr0 508 %1:_(s32) = COPY $vgpr1 509 %2:_(s32) = COPY $vgpr2 510 %3:_(s32) = COPY $vgpr3 511 %4:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %2, %3 512 %5:_(<4 x s16>) = G_TRUNC %4 513 %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %5 514 S_ENDPGM 0, implicit %6, implicit %7 515... 516 517# To properly simplify that one, we would need to insert bitcast 518# after the G_ZEXT. 519# i.e., 520# s64 = zext <2 x s16> <-- invalid 521# vs. 522# <2 x s32> = zext <2 x s16> 523# s64 = bitcast <2 x s32> <-- we are missing the code to do that 524--- 525name: test_unmerge_values_s128_of_zext_of_concat_vectors 526body: | 527 bb.0: 528 ; CHECK-LABEL: name: test_unmerge_values_s128_of_zext_of_concat_vectors 529 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 530 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1 531 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 532 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 533 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 534 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>) 535 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 536 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 537 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 538 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 539 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 540 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]] 541 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 542 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C1]] 543 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32) 544 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C1]] 545 ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32) 546 ; CHECK: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND2]](s32), [[AND3]](s32) 547 ; CHECK: S_ENDPGM 0, implicit [[MV]](s64), implicit [[MV1]](s64) 548 %0:_(<2 x s16>) = COPY $vgpr0 549 %1:_(<2 x s16>) = COPY $vgpr1 550 %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1 551 %3:_(<4 x s32>) = G_ZEXT %2 552 %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3 553 S_ENDPGM 0, implicit %4, implicit %5 554... 555 556--- 557 558name: test_unmerge_values_v3s32_of_v12s32_concat_vectors_v4s32 559body: | 560 bb.0: 561 ; CHECK-LABEL: name: test_unmerge_values_v3s32_of_v12s32_concat_vectors_v4s32 562 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 563 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 564 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 565 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>), [[COPY2]](<4 x s32>) 566 ; CHECK: [[UV:%[0-9]+]]:_(<3 x s32>), [[UV1:%[0-9]+]]:_(<3 x s32>), [[UV2:%[0-9]+]]:_(<3 x s32>), [[UV3:%[0-9]+]]:_(<3 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s32>) 567 ; CHECK: S_ENDPGM 0, implicit [[UV]](<3 x s32>), implicit [[UV1]](<3 x s32>), implicit [[UV2]](<3 x s32>), implicit [[UV3]](<3 x s32>) 568 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 569 %1:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7 570 %2:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11 571 %3:_(<12 x s32>) = G_CONCAT_VECTORS %0, %1, %2 572 %4:_(<3 x s32>), %5:_(<3 x s32>), %6:_(<3 x s32>), %7:_(<3 x s32>) = G_UNMERGE_VALUES %3 573 S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7 574... 575 576--- 577name: test_unmerge_values_v3s16_of_v12s16_concat_vectors_v4s16 578body: | 579 bb.0: 580 ; CHECK-LABEL: name: test_unmerge_values_v3s16_of_v12s16_concat_vectors_v4s16 581 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 582 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3 583 ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr4_vgpr5 584 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 585 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 586 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 587 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 588 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 589 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 590 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 591 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 592 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 593 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32) 594 ; CHECK: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 595 ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>) 596 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 597 ; CHECK: [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>) 598 ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>) 599 ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32) 600 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32) 601 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32) 602 ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[LSHR3]](s32) 603 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32) 604 ; CHECK: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>) 605 ; CHECK: [[BITCAST4:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>) 606 ; CHECK: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST4]], [[C]](s32) 607 ; CHECK: [[UV8:%[0-9]+]]:_(<2 x s16>), [[UV9:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>) 608 ; CHECK: [[BITCAST5:%[0-9]+]]:_(s32) = G_BITCAST [[UV8]](<2 x s16>) 609 ; CHECK: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST5]], [[C]](s32) 610 ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[BITCAST4]](s32) 611 ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[LSHR4]](s32) 612 ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[BITCAST5]](s32) 613 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32) 614 ; CHECK: [[UV10:%[0-9]+]]:_(<2 x s16>), [[UV11:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>) 615 ; CHECK: [[BITCAST6:%[0-9]+]]:_(s32) = G_BITCAST [[UV10]](<2 x s16>) 616 ; CHECK: [[LSHR6:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST6]], [[C]](s32) 617 ; CHECK: [[BITCAST7:%[0-9]+]]:_(s32) = G_BITCAST [[UV11]](<2 x s16>) 618 ; CHECK: [[LSHR7:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST7]], [[C]](s32) 619 ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[LSHR6]](s32) 620 ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[BITCAST7]](s32) 621 ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[LSHR7]](s32) 622 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32) 623 ; CHECK: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<3 x s32>), implicit [[BUILD_VECTOR1]](<3 x s32>), implicit [[BUILD_VECTOR2]](<3 x s32>), implicit [[BUILD_VECTOR3]](<3 x s32>) 624 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 625 %1:_(<4 x s16>) = COPY $vgpr2_vgpr3 626 %2:_(<4 x s16>) = COPY $vgpr4_vgpr5 627 %3:_(<12 x s16>) = G_CONCAT_VECTORS %0, %1, %2 628 %4:_(<3 x s16>), %5:_(<3 x s16>), %6:_(<3 x s16>), %7:_(<3 x s16>) = G_UNMERGE_VALUES %3 629 %8:_(<3 x s32>) = G_ANYEXT %4 630 %9:_(<3 x s32>) = G_ANYEXT %5 631 %10:_(<3 x s32>) = G_ANYEXT %6 632 %11:_(<3 x s32>) = G_ANYEXT %7 633 S_ENDPGM 0, implicit %8, implicit %9, implicit %10, implicit %11 634... 635 636--- 637name: unmerge_v2s16_from_v4s16_sext_v4s8_concat_vectors_v2s8 638tracksRegLiveness: true 639body: | 640 bb.1: 641 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 642 643 ; CHECK-LABEL: name: unmerge_v2s16_from_v4s16_sext_v4s8_concat_vectors_v2s8 644 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 645 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 646 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 647 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 648 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3 649 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 650 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 651 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 652 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[COPY3]](s32) 653 ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[COPY4]](s32) 654 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY8]], 8 655 ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[COPY5]](s32) 656 ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY9]], 8 657 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 658 ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG]](s32) 659 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY10]], [[C]] 660 ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG1]](s32) 661 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C]] 662 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 663 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 664 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 665 ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 666 ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY6]](s32) 667 ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY12]], 8 668 ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY7]](s32) 669 ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY13]], 8 670 ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG2]](s32) 671 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY14]], [[C]] 672 ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG3]](s32) 673 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C]] 674 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32) 675 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 676 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 677 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>) 678 %0:_(s32) = COPY $vgpr0 679 %1:_(s32) = COPY $vgpr1 680 %2:_(s32) = COPY $vgpr2 681 %3:_(s32) = COPY $vgpr3 682 %4:_(s8) = G_TRUNC %0 683 %5:_(s8) = G_TRUNC %1 684 %6:_(s8) = G_TRUNC %2 685 %7:_(s8) = G_TRUNC %3 686 %8:_(<2 x s8>) = G_BUILD_VECTOR %4, %5 687 %9:_(<2 x s8>) = G_BUILD_VECTOR %6, %7 688 %10:_(<4 x s8>) = G_CONCAT_VECTORS %8, %9 689 %11:_(<4 x s16>) = G_SEXT %10 690 %12:_(<2 x s16>), %13:_(<2 x s16>) = G_UNMERGE_VALUES %11 691 S_ENDPGM 0, implicit %12, implicit %13 692... 693 694--- 695name: unmerge_v2s16_from_v8s16_sext_v8s8_concat_vectors_v4s8 696tracksRegLiveness: true 697body: | 698 bb.1: 699 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7 700 701 ; CHECK-LABEL: name: unmerge_v2s16_from_v8s16_sext_v8s8_concat_vectors_v4s8 702 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7 703 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 704 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 705 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 706 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3 707 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4 708 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5 709 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6 710 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7 711 ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 712 ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 713 ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 714 ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[COPY3]](s32) 715 ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY8]](s32) 716 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY12]], 8 717 ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY9]](s32) 718 ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY13]], 8 719 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 720 ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG]](s32) 721 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY14]], [[C]] 722 ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG1]](s32) 723 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C]] 724 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 725 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 726 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 727 ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 728 ; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY10]](s32) 729 ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY16]], 8 730 ; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY11]](s32) 731 ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY17]], 8 732 ; CHECK: [[COPY18:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG2]](s32) 733 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY18]], [[C]] 734 ; CHECK: [[COPY19:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG3]](s32) 735 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY19]], [[C]] 736 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32) 737 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 738 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 739 ; CHECK: [[COPY20:%[0-9]+]]:_(s32) = COPY [[COPY4]](s32) 740 ; CHECK: [[COPY21:%[0-9]+]]:_(s32) = COPY [[COPY5]](s32) 741 ; CHECK: [[COPY22:%[0-9]+]]:_(s32) = COPY [[COPY6]](s32) 742 ; CHECK: [[COPY23:%[0-9]+]]:_(s32) = COPY [[COPY7]](s32) 743 ; CHECK: [[COPY24:%[0-9]+]]:_(s32) = COPY [[COPY20]](s32) 744 ; CHECK: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY24]], 8 745 ; CHECK: [[COPY25:%[0-9]+]]:_(s32) = COPY [[COPY21]](s32) 746 ; CHECK: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY25]], 8 747 ; CHECK: [[COPY26:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG4]](s32) 748 ; CHECK: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY26]], [[C]] 749 ; CHECK: [[COPY27:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG5]](s32) 750 ; CHECK: [[AND5:%[0-9]+]]:_(s32) = G_AND [[COPY27]], [[C]] 751 ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32) 752 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]] 753 ; CHECK: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 754 ; CHECK: [[COPY28:%[0-9]+]]:_(s32) = COPY [[COPY22]](s32) 755 ; CHECK: [[SEXT_INREG6:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY28]], 8 756 ; CHECK: [[COPY29:%[0-9]+]]:_(s32) = COPY [[COPY23]](s32) 757 ; CHECK: [[SEXT_INREG7:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY29]], 8 758 ; CHECK: [[COPY30:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG6]](s32) 759 ; CHECK: [[AND6:%[0-9]+]]:_(s32) = G_AND [[COPY30]], [[C]] 760 ; CHECK: [[COPY31:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG7]](s32) 761 ; CHECK: [[AND7:%[0-9]+]]:_(s32) = G_AND [[COPY31]], [[C]] 762 ; CHECK: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C1]](s32) 763 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]] 764 ; CHECK: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32) 765 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>) 766 %0:_(s32) = COPY $vgpr0 767 %1:_(s32) = COPY $vgpr1 768 %2:_(s32) = COPY $vgpr2 769 %3:_(s32) = COPY $vgpr3 770 %4:_(s32) = COPY $vgpr4 771 %5:_(s32) = COPY $vgpr5 772 %6:_(s32) = COPY $vgpr6 773 %7:_(s32) = COPY $vgpr7 774 %8:_(s8) = G_TRUNC %0 775 %9:_(s8) = G_TRUNC %1 776 %10:_(s8) = G_TRUNC %2 777 %11:_(s8) = G_TRUNC %3 778 %12:_(s8) = G_TRUNC %4 779 %13:_(s8) = G_TRUNC %5 780 %14:_(s8) = G_TRUNC %6 781 %15:_(s8) = G_TRUNC %7 782 %16:_(<4 x s8>) = G_BUILD_VECTOR %8, %9, %10, %11 783 %17:_(<4 x s8>) = G_BUILD_VECTOR %12, %13, %14, %15 784 %18:_(<8 x s8>) = G_CONCAT_VECTORS %16, %17 785 %19:_(<8 x s16>) = G_SEXT %18 786 %20:_(<2 x s16>), %21:_(<2 x s16>), %22:_(<2 x s16>), %23:_(<2 x s16>) = G_UNMERGE_VALUES %19 787 S_ENDPGM 0, implicit %20, implicit %21, implicit %22, implicit %23 788... 789 790--- 791name: unmerge_v2s16_from_v16s16_sext_v16s8_concat_vectors_v8s8 792tracksRegLiveness: true 793body: | 794 bb.1: 795 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15 796 797 ; CHECK-LABEL: name: unmerge_v2s16_from_v16s16_sext_v16s8_concat_vectors_v8s8 798 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15 799 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 800 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 801 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 802 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3 803 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4 804 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5 805 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6 806 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7 807 ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8 808 ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9 809 ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10 810 ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11 811 ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12 812 ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13 813 ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14 814 ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15 815 ; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY]](s32) 816 ; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32) 817 ; CHECK: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32) 818 ; CHECK: [[COPY19:%[0-9]+]]:_(s32) = COPY [[COPY3]](s32) 819 ; CHECK: [[COPY20:%[0-9]+]]:_(s32) = COPY [[COPY4]](s32) 820 ; CHECK: [[COPY21:%[0-9]+]]:_(s32) = COPY [[COPY5]](s32) 821 ; CHECK: [[COPY22:%[0-9]+]]:_(s32) = COPY [[COPY6]](s32) 822 ; CHECK: [[COPY23:%[0-9]+]]:_(s32) = COPY [[COPY7]](s32) 823 ; CHECK: [[COPY24:%[0-9]+]]:_(s32) = COPY [[COPY16]](s32) 824 ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY24]], 8 825 ; CHECK: [[COPY25:%[0-9]+]]:_(s32) = COPY [[COPY17]](s32) 826 ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY25]], 8 827 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 828 ; CHECK: [[COPY26:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG]](s32) 829 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY26]], [[C]] 830 ; CHECK: [[COPY27:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG1]](s32) 831 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY27]], [[C]] 832 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 833 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 834 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 835 ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 836 ; CHECK: [[COPY28:%[0-9]+]]:_(s32) = COPY [[COPY18]](s32) 837 ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY28]], 8 838 ; CHECK: [[COPY29:%[0-9]+]]:_(s32) = COPY [[COPY19]](s32) 839 ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY29]], 8 840 ; CHECK: [[COPY30:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG2]](s32) 841 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY30]], [[C]] 842 ; CHECK: [[COPY31:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG3]](s32) 843 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY31]], [[C]] 844 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32) 845 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 846 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 847 ; CHECK: [[COPY32:%[0-9]+]]:_(s32) = COPY [[COPY20]](s32) 848 ; CHECK: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY32]], 8 849 ; CHECK: [[COPY33:%[0-9]+]]:_(s32) = COPY [[COPY21]](s32) 850 ; CHECK: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY33]], 8 851 ; CHECK: [[COPY34:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG4]](s32) 852 ; CHECK: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY34]], [[C]] 853 ; CHECK: [[COPY35:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG5]](s32) 854 ; CHECK: [[AND5:%[0-9]+]]:_(s32) = G_AND [[COPY35]], [[C]] 855 ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32) 856 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]] 857 ; CHECK: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 858 ; CHECK: [[COPY36:%[0-9]+]]:_(s32) = COPY [[COPY22]](s32) 859 ; CHECK: [[SEXT_INREG6:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY36]], 8 860 ; CHECK: [[COPY37:%[0-9]+]]:_(s32) = COPY [[COPY23]](s32) 861 ; CHECK: [[SEXT_INREG7:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY37]], 8 862 ; CHECK: [[COPY38:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG6]](s32) 863 ; CHECK: [[AND6:%[0-9]+]]:_(s32) = G_AND [[COPY38]], [[C]] 864 ; CHECK: [[COPY39:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG7]](s32) 865 ; CHECK: [[AND7:%[0-9]+]]:_(s32) = G_AND [[COPY39]], [[C]] 866 ; CHECK: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C1]](s32) 867 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]] 868 ; CHECK: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32) 869 ; CHECK: [[COPY40:%[0-9]+]]:_(s32) = COPY [[COPY8]](s32) 870 ; CHECK: [[COPY41:%[0-9]+]]:_(s32) = COPY [[COPY9]](s32) 871 ; CHECK: [[COPY42:%[0-9]+]]:_(s32) = COPY [[COPY10]](s32) 872 ; CHECK: [[COPY43:%[0-9]+]]:_(s32) = COPY [[COPY11]](s32) 873 ; CHECK: [[COPY44:%[0-9]+]]:_(s32) = COPY [[COPY12]](s32) 874 ; CHECK: [[COPY45:%[0-9]+]]:_(s32) = COPY [[COPY13]](s32) 875 ; CHECK: [[COPY46:%[0-9]+]]:_(s32) = COPY [[COPY14]](s32) 876 ; CHECK: [[COPY47:%[0-9]+]]:_(s32) = COPY [[COPY15]](s32) 877 ; CHECK: [[COPY48:%[0-9]+]]:_(s32) = COPY [[COPY40]](s32) 878 ; CHECK: [[SEXT_INREG8:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY48]], 8 879 ; CHECK: [[COPY49:%[0-9]+]]:_(s32) = COPY [[COPY41]](s32) 880 ; CHECK: [[SEXT_INREG9:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY49]], 8 881 ; CHECK: [[COPY50:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG8]](s32) 882 ; CHECK: [[AND8:%[0-9]+]]:_(s32) = G_AND [[COPY50]], [[C]] 883 ; CHECK: [[COPY51:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG9]](s32) 884 ; CHECK: [[AND9:%[0-9]+]]:_(s32) = G_AND [[COPY51]], [[C]] 885 ; CHECK: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[AND9]], [[C1]](s32) 886 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[AND8]], [[SHL4]] 887 ; CHECK: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32) 888 ; CHECK: [[COPY52:%[0-9]+]]:_(s32) = COPY [[COPY42]](s32) 889 ; CHECK: [[SEXT_INREG10:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY52]], 8 890 ; CHECK: [[COPY53:%[0-9]+]]:_(s32) = COPY [[COPY43]](s32) 891 ; CHECK: [[SEXT_INREG11:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY53]], 8 892 ; CHECK: [[COPY54:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG10]](s32) 893 ; CHECK: [[AND10:%[0-9]+]]:_(s32) = G_AND [[COPY54]], [[C]] 894 ; CHECK: [[COPY55:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG11]](s32) 895 ; CHECK: [[AND11:%[0-9]+]]:_(s32) = G_AND [[COPY55]], [[C]] 896 ; CHECK: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[AND11]], [[C1]](s32) 897 ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[AND10]], [[SHL5]] 898 ; CHECK: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32) 899 ; CHECK: [[COPY56:%[0-9]+]]:_(s32) = COPY [[COPY44]](s32) 900 ; CHECK: [[SEXT_INREG12:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY56]], 8 901 ; CHECK: [[COPY57:%[0-9]+]]:_(s32) = COPY [[COPY45]](s32) 902 ; CHECK: [[SEXT_INREG13:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY57]], 8 903 ; CHECK: [[COPY58:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG12]](s32) 904 ; CHECK: [[AND12:%[0-9]+]]:_(s32) = G_AND [[COPY58]], [[C]] 905 ; CHECK: [[COPY59:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG13]](s32) 906 ; CHECK: [[AND13:%[0-9]+]]:_(s32) = G_AND [[COPY59]], [[C]] 907 ; CHECK: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[AND13]], [[C1]](s32) 908 ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[AND12]], [[SHL6]] 909 ; CHECK: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR6]](s32) 910 ; CHECK: [[COPY60:%[0-9]+]]:_(s32) = COPY [[COPY46]](s32) 911 ; CHECK: [[SEXT_INREG14:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY60]], 8 912 ; CHECK: [[COPY61:%[0-9]+]]:_(s32) = COPY [[COPY47]](s32) 913 ; CHECK: [[SEXT_INREG15:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY61]], 8 914 ; CHECK: [[COPY62:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG14]](s32) 915 ; CHECK: [[AND14:%[0-9]+]]:_(s32) = G_AND [[COPY62]], [[C]] 916 ; CHECK: [[COPY63:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG15]](s32) 917 ; CHECK: [[AND15:%[0-9]+]]:_(s32) = G_AND [[COPY63]], [[C]] 918 ; CHECK: [[SHL7:%[0-9]+]]:_(s32) = G_SHL [[AND15]], [[C1]](s32) 919 ; CHECK: [[OR7:%[0-9]+]]:_(s32) = G_OR [[AND14]], [[SHL7]] 920 ; CHECK: [[BITCAST7:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR7]](s32) 921 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>), implicit [[BITCAST4]](<2 x s16>), implicit [[BITCAST5]](<2 x s16>), implicit [[BITCAST6]](<2 x s16>), implicit [[BITCAST7]](<2 x s16>) 922 %0:_(s32) = COPY $vgpr0 923 %1:_(s32) = COPY $vgpr1 924 %2:_(s32) = COPY $vgpr2 925 %3:_(s32) = COPY $vgpr3 926 %4:_(s32) = COPY $vgpr4 927 %5:_(s32) = COPY $vgpr5 928 %6:_(s32) = COPY $vgpr6 929 %7:_(s32) = COPY $vgpr7 930 %8:_(s32) = COPY $vgpr8 931 %9:_(s32) = COPY $vgpr9 932 %10:_(s32) = COPY $vgpr10 933 %11:_(s32) = COPY $vgpr11 934 %12:_(s32) = COPY $vgpr12 935 %13:_(s32) = COPY $vgpr13 936 %14:_(s32) = COPY $vgpr14 937 %15:_(s32) = COPY $vgpr15 938 %16:_(s8) = G_TRUNC %0 939 %17:_(s8) = G_TRUNC %1 940 %18:_(s8) = G_TRUNC %2 941 %19:_(s8) = G_TRUNC %3 942 %20:_(s8) = G_TRUNC %4 943 %21:_(s8) = G_TRUNC %5 944 %22:_(s8) = G_TRUNC %6 945 %23:_(s8) = G_TRUNC %7 946 %24:_(s8) = G_TRUNC %8 947 %25:_(s8) = G_TRUNC %9 948 %26:_(s8) = G_TRUNC %10 949 %27:_(s8) = G_TRUNC %11 950 %28:_(s8) = G_TRUNC %12 951 %29:_(s8) = G_TRUNC %13 952 %30:_(s8) = G_TRUNC %14 953 %31:_(s8) = G_TRUNC %15 954 %32:_(<8 x s8>) = G_BUILD_VECTOR %16, %17, %18, %19, %20, %21, %22, %23 955 %33:_(<8 x s8>) = G_BUILD_VECTOR %24, %25, %26, %27, %28, %29, %30, %31 956 %34:_(<16 x s8>) = G_CONCAT_VECTORS %32, %33 957 %35:_(<16 x s16>) = G_SEXT %34 958 %36:_(<2 x s16>), %37:_(<2 x s16>), %38:_(<2 x s16>), %39:_(<2 x s16>), %40:_(<2 x s16>), %41:_(<2 x s16>), %42:_(<2 x s16>), %43:_(<2 x s16>) = G_UNMERGE_VALUES %35 959 S_ENDPGM 0, implicit %36, implicit %37, implicit %38, implicit %39, implicit %40, implicit %41, implicit %42, implicit %43 960... 961 962--- 963name: test_unmerge_values_s32_trunc_s96_of_merge_values_s192_s64 964body: | 965 bb.0: 966 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 967 ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s96_of_merge_values_s192_s64 968 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 969 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3 970 ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 971 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 972 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64) 973 ; CHECK: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32) 974 %0:_(s64) = COPY $vgpr0_vgpr1 975 %1:_(s64) = COPY $vgpr2_vgpr3 976 %2:_(s64) = COPY $vgpr4_vgpr5 977 %3:_(s192) = G_MERGE_VALUES %0, %1, %2 978 %4:_(s96) = G_TRUNC %3 979 %5:_(s32), %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %4 980 S_ENDPGM 0, implicit %5, implicit %6, implicit %7 981 982... 983 984--- 985name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s64 986body: | 987 bb.0: 988 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5 989 ; CHECK-LABEL: name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s64 990 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 991 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3 992 ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 993 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 994 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32) 995 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 996 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32) 997 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 998 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32) 999 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32) 1000 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 1001 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64) 1002 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32) 1003 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32) 1004 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 1005 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16) 1006 %0:_(s64) = COPY $vgpr0_vgpr1 1007 %1:_(s64) = COPY $vgpr2_vgpr3 1008 %2:_(s64) = COPY $vgpr4_vgpr5 1009 %3:_(s192) = G_MERGE_VALUES %0, %1, %2 1010 %4:_(s96) = G_TRUNC %3 1011 %5:_(s16), %6:_(s16), %7:_(s16), %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %4 1012 S_ENDPGM 0, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10 1013 1014... 1015 1016--- 1017name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s32 1018body: | 1019 bb.0: 1020 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 1021 ; CHECK-LABEL: name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s32 1022 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1023 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 1024 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2 1025 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3 1026 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4 1027 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5 1028 ; CHECK: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32) 1029 ; CHECK: [[MV1:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32) 1030 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 1031 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1032 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32) 1033 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 1034 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32) 1035 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C]](s32) 1036 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 1037 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32) 1038 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C]](s32) 1039 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 1040 ; CHECK: S_ENDPGM 0, implicit [[MV]](s192), implicit [[MV1]](s96), implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16) 1041 %0:_(s32) = COPY $vgpr0 1042 %1:_(s32) = COPY $vgpr1 1043 %2:_(s32) = COPY $vgpr2 1044 %3:_(s32) = COPY $vgpr3 1045 %4:_(s32) = COPY $vgpr4 1046 %5:_(s32) = COPY $vgpr5 1047 %6:_(s192) = G_MERGE_VALUES %0, %1, %2, %3, %4, %5 1048 %7:_(s96) = G_TRUNC %6 1049 %8:_(s16), %9:_(s16), %10:_(s16), %11:_(s16), %12:_(s16), %13:_(s16) = G_UNMERGE_VALUES %7 1050 S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11, implicit %12, implicit %13 1051 1052... 1053 1054--- 1055name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64 1056body: | 1057 bb.0: 1058 ; CHECK-LABEL: name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64 1059 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 1060 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1 1061 ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32) 1062 ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF 1063 ; CHECK: $vgpr0_vgpr1 = COPY [[MV]](s64) 1064 ; CHECK: $vgpr2_vgpr3 = COPY [[DEF]](s64) 1065 %0:_(s32) = COPY $vgpr0 1066 %1:_(s32) = COPY $vgpr1 1067 %2:_(s64) = G_MERGE_VALUES %0, %1 1068 %3:_(s128) = G_ANYEXT %2 1069 %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3 1070 $vgpr0_vgpr1 = COPY %4 1071 $vgpr2_vgpr3 = COPY %5 1072 1073... 1074 1075--- 1076name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128 1077body: | 1078 bb.0: 1079 ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128 1080 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 1081 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3 1082 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 1083 ; CHECK: $vgpr0 = COPY [[UV]](s32) 1084 ; CHECK: $vgpr1 = COPY [[UV1]](s32) 1085 %0:_(s64) = COPY $vgpr0_vgpr1 1086 %1:_(s64) = COPY $vgpr2_vgpr3 1087 %2:_(s128) = G_MERGE_VALUES %0, %1 1088 %3:_(s64) = G_TRUNC %2 1089 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %3 1090 $vgpr0 = COPY %4 1091 $vgpr1 = COPY %5 1092... 1093 1094--- 1095name: test_unmerge_values_s8_v4s8_trunc_v4s32 1096body: | 1097 bb.0: 1098 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 1099 1100 ; CHECK-LABEL: name: test_unmerge_values_s8_v4s8_trunc_v4s32 1101 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1102 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>) 1103 ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s32) 1104 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[UV1]](s32) 1105 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32) 1106 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[UV3]](s32) 1107 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s8), implicit [[TRUNC1]](s8), implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8) 1108 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1109 %1:_(<4 x s8>) = G_TRUNC %0 1110 %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %1 1111 S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5 1112 1113... 1114 1115--- 1116name: test_unmerge_values_v2s8_v4s8_trunc_v4s32 1117body: | 1118 bb.0: 1119 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 1120 1121 ; CHECK-LABEL: name: test_unmerge_values_v2s8_v4s8_trunc_v4s32 1122 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1123 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>) 1124 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 1125 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 1126 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>) 1127 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1128 %1:_(<4 x s8>) = G_TRUNC %0 1129 %2:_(<2 x s8>), %3:_(<2 x s8>) = G_UNMERGE_VALUES %1 1130 %4:_(<2 x s16>) = G_ANYEXT %2 1131 %5:_(<2 x s16>) = G_ANYEXT %3 1132 S_ENDPGM 0, implicit %4, implicit %5 1133 1134... 1135 1136--- 1137name: test_unmerge_values_v4s8_v8s8_trunc_v8s32 1138body: | 1139 bb.0: 1140 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1141 1142 ; CHECK-LABEL: name: test_unmerge_values_v4s8_v8s8_trunc_v8s32 1143 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1144 ; CHECK: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>) 1145 ; CHECK: [[TRUNC:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[UV]](<4 x s32>) 1146 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[UV1]](<4 x s32>) 1147 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<4 x s8>), implicit [[TRUNC1]](<4 x s8>) 1148 %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1149 %1:_(<8 x s8>) = G_TRUNC %0 1150 %2:_(<4 x s8>), %3:_(<4 x s8>) = G_UNMERGE_VALUES %1 1151 S_ENDPGM 0, implicit %2, implicit %3 1152 1153... 1154 1155--- 1156 1157name: test_unmerge_values_s16_v4s16_trunc_v4s32 1158body: | 1159 bb.0: 1160 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 1161 1162 ; CHECK-LABEL: name: test_unmerge_values_s16_v4s16_trunc_v4s32 1163 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1164 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>) 1165 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32) 1166 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32) 1167 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32) 1168 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32) 1169 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16) 1170 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1171 %1:_(<4 x s16>) = G_TRUNC %0 1172 %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1 1173 S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5 1174 1175... 1176 1177--- 1178name: test_unmerge_values_v2s16_v4s16_trunc_v4s32 1179body: | 1180 bb.0: 1181 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 1182 1183 ; CHECK-LABEL: name: test_unmerge_values_v2s16_v4s16_trunc_v4s32 1184 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1185 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>) 1186 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 1187 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 1188 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>) 1189 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 1190 %1:_(<4 x s16>) = G_TRUNC %0 1191 %2:_(<2 x s16>), %3:_(<2 x s16>) = G_UNMERGE_VALUES %1 1192 S_ENDPGM 0, implicit %2, implicit %3 1193 1194... 1195 1196--- 1197name: test_unmerge_values_v2s16_v8s16_trunc_v8s32 1198body: | 1199 bb.0: 1200 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1201 1202 ; CHECK-LABEL: name: test_unmerge_values_v2s16_v8s16_trunc_v8s32 1203 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1204 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>), [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>) 1205 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>) 1206 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>) 1207 ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV2]](<2 x s32>) 1208 ; CHECK: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV3]](<2 x s32>) 1209 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>), implicit [[TRUNC2]](<2 x s16>), implicit [[TRUNC3]](<2 x s16>) 1210 %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1211 %1:_(<8 x s16>) = G_TRUNC %0 1212 %2:_(<2 x s16>), %3:_(<2 x s16>), %4:_(<2 x s16>), %5:_(<2 x s16>) = G_UNMERGE_VALUES %1 1213 S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5 1214 1215... 1216 1217--- 1218name: test_unmerge_values_v4s16_v8s16_trunc_v8s32 1219body: | 1220 bb.0: 1221 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1222 1223 ; CHECK-LABEL: name: test_unmerge_values_v4s16_v8s16_trunc_v8s32 1224 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1225 ; CHECK: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>) 1226 ; CHECK: [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[UV]](<4 x s32>) 1227 ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV2]](<2 x s32>) 1228 ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV3]](<2 x s32>) 1229 ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>) 1230 ; CHECK: [[UV4:%[0-9]+]]:_(<2 x s32>), [[UV5:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[UV1]](<4 x s32>) 1231 ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV4]](<2 x s32>) 1232 ; CHECK: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV5]](<2 x s32>) 1233 ; CHECK: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC2]](<2 x s16>), [[TRUNC3]](<2 x s16>) 1234 ; CHECK: S_ENDPGM 0, implicit [[CONCAT_VECTORS]](<4 x s16>), implicit [[CONCAT_VECTORS1]](<4 x s16>) 1235 %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1236 %1:_(<8 x s16>) = G_TRUNC %0 1237 %2:_(<4 x s16>), %3:_(<4 x s16>) = G_UNMERGE_VALUES %1 1238 S_ENDPGM 0, implicit %2, implicit %3 1239 1240... 1241 1242--- 1243name: test_unmerge_values_s8_v4s8_trunc_v4s16 1244body: | 1245 bb.0: 1246 liveins: $vgpr0_vgpr1 1247 1248 ; CHECK-LABEL: name: test_unmerge_values_s8_v4s8_trunc_v4s16 1249 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 1250 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 1251 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 1252 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1253 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 1254 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 1255 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 1256 ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST]](s32) 1257 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32) 1258 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST1]](s32) 1259 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR1]](s32) 1260 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s8), implicit [[TRUNC1]](s8), implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8) 1261 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 1262 %1:_(<4 x s8>) = G_TRUNC %0 1263 %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %1 1264 S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5 1265 1266... 1267 1268--- 1269name: test_unmerge_values_v2s8_v4s8_trunc_v4s16 1270body: | 1271 bb.0: 1272 liveins: $vgpr0_vgpr1 1273 1274 ; CHECK-LABEL: name: test_unmerge_values_v2s8_v4s8_trunc_v4s16 1275 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 1276 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 1277 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY [[UV]](<2 x s16>) 1278 ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY [[UV1]](<2 x s16>) 1279 ; CHECK: S_ENDPGM 0, implicit [[COPY1]](<2 x s16>), implicit [[COPY2]](<2 x s16>) 1280 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 1281 %1:_(<4 x s8>) = G_TRUNC %0 1282 %2:_(<2 x s8>), %3:_(<2 x s8>) = G_UNMERGE_VALUES %1 1283 %4:_(<2 x s16>) = G_ANYEXT %2 1284 %5:_(<2 x s16>) = G_ANYEXT %3 1285 S_ENDPGM 0, implicit %4, implicit %5 1286 1287... 1288 1289--- 1290name: test_unmerge_values_s32_v4s32_trunc_v4s64 1291body: | 1292 bb.0: 1293 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1294 1295 ; CHECK-LABEL: name: test_unmerge_values_s32_v4s32_trunc_v4s64 1296 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1297 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>) 1298 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64) 1299 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64) 1300 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64) 1301 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64) 1302 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s32), implicit [[TRUNC1]](s32), implicit [[TRUNC2]](s32), implicit [[TRUNC3]](s32) 1303 %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1304 %1:_(<4 x s32>) = G_TRUNC %0 1305 %2:_(s32), %3:_(s32), %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1 1306 S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5 1307 1308... 1309 1310--- 1311name: test_unmerge_values_v2s32_v4s32_trunc_v4s64 1312body: | 1313 bb.0: 1314 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1315 1316 ; CHECK-LABEL: name: test_unmerge_values_v2s32_v4s32_trunc_v4s64 1317 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1318 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[COPY]](<4 x s64>) 1319 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV]](<2 x s64>) 1320 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64) 1321 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64) 1322 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC]](s32), [[TRUNC1]](s32) 1323 ; CHECK: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV1]](<2 x s64>) 1324 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV4]](s64) 1325 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV5]](s64) 1326 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC2]](s32), [[TRUNC3]](s32) 1327 ; CHECK: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<2 x s32>), implicit [[BUILD_VECTOR1]](<2 x s32>) 1328 %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1329 %1:_(<4 x s32>) = G_TRUNC %0 1330 %2:_(<2 x s32>), %3:_(<2 x s32>) = G_UNMERGE_VALUES %1 1331 S_ENDPGM 0, implicit %2, implicit %3 1332 1333... 1334 1335--- 1336name: test_unmerge_values_s16_v4s16_trunc_v4s64 1337body: | 1338 bb.0: 1339 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1340 1341 ; CHECK-LABEL: name: test_unmerge_values_s16_v4s16_trunc_v4s64 1342 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1343 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>) 1344 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s64) 1345 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s64) 1346 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s64) 1347 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s64) 1348 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16) 1349 %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1350 %1:_(<4 x s16>) = G_TRUNC %0 1351 %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1 1352 S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5 1353 1354... 1355 1356--- 1357name: test_unmerge_values_v2s16_v4s16_trunc_v4s64 1358body: | 1359 bb.0: 1360 liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1361 1362 ; CHECK-LABEL: name: test_unmerge_values_v2s16_v4s16_trunc_v4s64 1363 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1364 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[COPY]](<4 x s64>) 1365 ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV]](<2 x s64>) 1366 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 1367 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64) 1368 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]] 1369 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64) 1370 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC1]], [[C]] 1371 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1372 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32) 1373 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 1374 ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 1375 ; CHECK: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV1]](<2 x s64>) 1376 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV4]](s64) 1377 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]] 1378 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV5]](s64) 1379 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]] 1380 ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32) 1381 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 1382 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 1383 ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>) 1384 %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 1385 %1:_(<4 x s16>) = G_TRUNC %0 1386 %2:_(<2 x s16>), %3:_(<2 x s16>) = G_UNMERGE_VALUES %1 1387 S_ENDPGM 0, implicit %2, implicit %3 1388 1389... 1390 1391--- 1392name: test_unmerge_values_s16_from_v3s16_from_v6s16 1393body: | 1394 bb.0: 1395 liveins: $vgpr0_vgpr1_vgpr2 1396 1397 ; CHECK-LABEL: name: test_unmerge_values_s16_from_v3s16_from_v6s16 1398 ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 1399 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>), [[UV2:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 1400 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 1401 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 1402 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1403 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 1404 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 1405 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 1406 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 1407 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 1408 ; CHECK: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 1409 ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>) 1410 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 1411 ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32) 1412 ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>) 1413 ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST3]](s32) 1414 ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32) 1415 ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR3]](s32) 1416 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16) 1417 %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 1418 %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %0 1419 %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1 1420 %6:_(s16), %7:_(s16), %8:_(s16) = G_UNMERGE_VALUES %2 1421 S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8 1422 1423... 1424 1425--- 1426name: test_unmerge_values_s16_from_v3s16_from_v6s16_other_def_use 1427body: | 1428 bb.0: 1429 liveins: $vgpr0_vgpr1_vgpr2 1430 1431 ; CHECK-LABEL: name: test_unmerge_values_s16_from_v3s16_from_v6s16_other_def_use 1432 ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 1433 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>), [[UV2:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 1434 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 1435 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 1436 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 1437 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 1438 ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 1439 ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 1440 ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 1441 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 1442 ; CHECK: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>) 1443 ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>) 1444 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 1445 ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>) 1446 ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32) 1447 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32) 1448 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32) 1449 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR3]](s32) 1450 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32) 1451 ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[BUILD_VECTOR]](<3 x s32>) 1452 %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2 1453 %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %0 1454 %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1 1455 %6:_(<3 x s32>) = G_ANYEXT %2 1456 S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6 1457 1458... 1459