1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -o - %s | FileCheck -check-prefix=SI %s 3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -o - %s | FileCheck -check-prefix=VI %s 4# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s 5# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s 6# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s 7 8 9--- 10name: test_fabs_s32 11body: | 12 bb.0: 13 liveins: $vgpr0 14 15 ; SI-LABEL: name: test_fabs_s32 16 ; SI: liveins: $vgpr0 17 ; SI-NEXT: {{ $}} 18 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 19 ; SI-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[COPY]] 20 ; SI-NEXT: $vgpr0 = COPY [[FABS]](s32) 21 ; 22 ; VI-LABEL: name: test_fabs_s32 23 ; VI: liveins: $vgpr0 24 ; VI-NEXT: {{ $}} 25 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 26 ; VI-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[COPY]] 27 ; VI-NEXT: $vgpr0 = COPY [[FABS]](s32) 28 ; 29 ; GFX9-LABEL: name: test_fabs_s32 30 ; GFX9: liveins: $vgpr0 31 ; GFX9-NEXT: {{ $}} 32 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 33 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[COPY]] 34 ; GFX9-NEXT: $vgpr0 = COPY [[FABS]](s32) 35 %0:_(s32) = COPY $vgpr0 36 %1:_(s32) = G_FABS %0 37 $vgpr0 = COPY %1 38 39... 40--- 41name: test_fabs_s64 42body: | 43 bb.0: 44 liveins: $vgpr0 45 46 ; SI-LABEL: name: test_fabs_s64 47 ; SI: liveins: $vgpr0 48 ; SI-NEXT: {{ $}} 49 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 50 ; SI-NEXT: [[FABS:%[0-9]+]]:_(s64) = G_FABS [[COPY]] 51 ; SI-NEXT: $vgpr0_vgpr1 = COPY [[FABS]](s64) 52 ; 53 ; VI-LABEL: name: test_fabs_s64 54 ; VI: liveins: $vgpr0 55 ; VI-NEXT: {{ $}} 56 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 57 ; VI-NEXT: [[FABS:%[0-9]+]]:_(s64) = G_FABS [[COPY]] 58 ; VI-NEXT: $vgpr0_vgpr1 = COPY [[FABS]](s64) 59 ; 60 ; GFX9-LABEL: name: test_fabs_s64 61 ; GFX9: liveins: $vgpr0 62 ; GFX9-NEXT: {{ $}} 63 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 64 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(s64) = G_FABS [[COPY]] 65 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[FABS]](s64) 66 %0:_(s64) = COPY $vgpr0_vgpr1 67 %1:_(s64) = G_FABS %0 68 $vgpr0_vgpr1 = COPY %1 69... 70--- 71name: test_fabs_s16 72body: | 73 bb.0: 74 liveins: $vgpr0 75 76 ; SI-LABEL: name: test_fabs_s16 77 ; SI: liveins: $vgpr0 78 ; SI-NEXT: {{ $}} 79 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 80 ; SI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 81 ; SI-NEXT: [[FABS:%[0-9]+]]:_(s16) = G_FABS [[TRUNC]] 82 ; SI-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FABS]](s16) 83 ; SI-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 84 ; 85 ; VI-LABEL: name: test_fabs_s16 86 ; VI: liveins: $vgpr0 87 ; VI-NEXT: {{ $}} 88 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 89 ; VI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 90 ; VI-NEXT: [[FABS:%[0-9]+]]:_(s16) = G_FABS [[TRUNC]] 91 ; VI-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FABS]](s16) 92 ; VI-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 93 ; 94 ; GFX9-LABEL: name: test_fabs_s16 95 ; GFX9: liveins: $vgpr0 96 ; GFX9-NEXT: {{ $}} 97 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 98 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 99 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(s16) = G_FABS [[TRUNC]] 100 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FABS]](s16) 101 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 102 %0:_(s32) = COPY $vgpr0 103 %1:_(s16) = G_TRUNC %0 104 %2:_(s16) = G_FABS %1 105 %3:_(s32) = G_ANYEXT %2 106 $vgpr0 = COPY %3 107... 108 109--- 110name: test_fabs_v2s32 111body: | 112 bb.0: 113 liveins: $vgpr0_vgpr1 114 115 ; SI-LABEL: name: test_fabs_v2s32 116 ; SI: liveins: $vgpr0_vgpr1 117 ; SI-NEXT: {{ $}} 118 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 119 ; SI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 120 ; SI-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[UV]] 121 ; SI-NEXT: [[FABS1:%[0-9]+]]:_(s32) = G_FABS [[UV1]] 122 ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[FABS]](s32), [[FABS1]](s32) 123 ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 124 ; 125 ; VI-LABEL: name: test_fabs_v2s32 126 ; VI: liveins: $vgpr0_vgpr1 127 ; VI-NEXT: {{ $}} 128 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 129 ; VI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 130 ; VI-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[UV]] 131 ; VI-NEXT: [[FABS1:%[0-9]+]]:_(s32) = G_FABS [[UV1]] 132 ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[FABS]](s32), [[FABS1]](s32) 133 ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 134 ; 135 ; GFX9-LABEL: name: test_fabs_v2s32 136 ; GFX9: liveins: $vgpr0_vgpr1 137 ; GFX9-NEXT: {{ $}} 138 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 139 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 140 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[UV]] 141 ; GFX9-NEXT: [[FABS1:%[0-9]+]]:_(s32) = G_FABS [[UV1]] 142 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[FABS]](s32), [[FABS1]](s32) 143 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 144 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 145 %1:_(<2 x s32>) = G_FABS %0 146 $vgpr0_vgpr1 = COPY %1 147... 148 149--- 150name: test_fabs_v3s32 151body: | 152 bb.0: 153 liveins: $vgpr0_vgpr1_vgpr2 154 155 ; SI-LABEL: name: test_fabs_v3s32 156 ; SI: liveins: $vgpr0_vgpr1_vgpr2 157 ; SI-NEXT: {{ $}} 158 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 159 ; SI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 160 ; SI-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[UV]] 161 ; SI-NEXT: [[FABS1:%[0-9]+]]:_(s32) = G_FABS [[UV1]] 162 ; SI-NEXT: [[FABS2:%[0-9]+]]:_(s32) = G_FABS [[UV2]] 163 ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[FABS]](s32), [[FABS1]](s32), [[FABS2]](s32) 164 ; SI-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 165 ; 166 ; VI-LABEL: name: test_fabs_v3s32 167 ; VI: liveins: $vgpr0_vgpr1_vgpr2 168 ; VI-NEXT: {{ $}} 169 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 170 ; VI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 171 ; VI-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[UV]] 172 ; VI-NEXT: [[FABS1:%[0-9]+]]:_(s32) = G_FABS [[UV1]] 173 ; VI-NEXT: [[FABS2:%[0-9]+]]:_(s32) = G_FABS [[UV2]] 174 ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[FABS]](s32), [[FABS1]](s32), [[FABS2]](s32) 175 ; VI-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 176 ; 177 ; GFX9-LABEL: name: test_fabs_v3s32 178 ; GFX9: liveins: $vgpr0_vgpr1_vgpr2 179 ; GFX9-NEXT: {{ $}} 180 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 181 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 182 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(s32) = G_FABS [[UV]] 183 ; GFX9-NEXT: [[FABS1:%[0-9]+]]:_(s32) = G_FABS [[UV1]] 184 ; GFX9-NEXT: [[FABS2:%[0-9]+]]:_(s32) = G_FABS [[UV2]] 185 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[FABS]](s32), [[FABS1]](s32), [[FABS2]](s32) 186 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 187 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 188 %1:_(<3 x s32>) = G_FABS %0 189 $vgpr0_vgpr1_vgpr2 = COPY %1 190... 191 192--- 193name: test_fabs_v2s64 194body: | 195 bb.0: 196 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 197 198 ; SI-LABEL: name: test_fabs_v2s64 199 ; SI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 200 ; SI-NEXT: {{ $}} 201 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 202 ; SI-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 203 ; SI-NEXT: [[FABS:%[0-9]+]]:_(s64) = G_FABS [[UV]] 204 ; SI-NEXT: [[FABS1:%[0-9]+]]:_(s64) = G_FABS [[UV1]] 205 ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[FABS]](s64), [[FABS1]](s64) 206 ; SI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 207 ; 208 ; VI-LABEL: name: test_fabs_v2s64 209 ; VI: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 210 ; VI-NEXT: {{ $}} 211 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 212 ; VI-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 213 ; VI-NEXT: [[FABS:%[0-9]+]]:_(s64) = G_FABS [[UV]] 214 ; VI-NEXT: [[FABS1:%[0-9]+]]:_(s64) = G_FABS [[UV1]] 215 ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[FABS]](s64), [[FABS1]](s64) 216 ; VI-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 217 ; 218 ; GFX9-LABEL: name: test_fabs_v2s64 219 ; GFX9: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 220 ; GFX9-NEXT: {{ $}} 221 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 222 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 223 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(s64) = G_FABS [[UV]] 224 ; GFX9-NEXT: [[FABS1:%[0-9]+]]:_(s64) = G_FABS [[UV1]] 225 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[FABS]](s64), [[FABS1]](s64) 226 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 227 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 228 %1:_(<2 x s64>) = G_FABS %0 229 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 230... 231 232--- 233name: test_fabs_v2s16 234body: | 235 bb.0: 236 liveins: $vgpr0 237 238 ; SI-LABEL: name: test_fabs_v2s16 239 ; SI: liveins: $vgpr0 240 ; SI-NEXT: {{ $}} 241 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 242 ; SI-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[COPY]] 243 ; SI-NEXT: $vgpr0 = COPY [[FABS]](<2 x s16>) 244 ; 245 ; VI-LABEL: name: test_fabs_v2s16 246 ; VI: liveins: $vgpr0 247 ; VI-NEXT: {{ $}} 248 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 249 ; VI-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[COPY]] 250 ; VI-NEXT: $vgpr0 = COPY [[FABS]](<2 x s16>) 251 ; 252 ; GFX9-LABEL: name: test_fabs_v2s16 253 ; GFX9: liveins: $vgpr0 254 ; GFX9-NEXT: {{ $}} 255 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 256 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[COPY]] 257 ; GFX9-NEXT: $vgpr0 = COPY [[FABS]](<2 x s16>) 258 %0:_(<2 x s16>) = COPY $vgpr0 259 %1:_(<2 x s16>) = G_FABS %0 260 $vgpr0 = COPY %1 261... 262 263--- 264name: test_fabs_v3s16 265body: | 266 bb.0: 267 268 ; SI-LABEL: name: test_fabs_v3s16 269 ; SI: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 270 ; SI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 271 ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 272 ; SI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 273 ; SI-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 274 ; SI-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]] 275 ; SI-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 276 ; SI-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32) 277 ; SI-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 278 ; SI-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 279 ; SI-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV]] 280 ; SI-NEXT: [[FABS1:%[0-9]+]]:_(<2 x s16>) = G_FABS [[BITCAST1]] 281 ; SI-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[FABS]](<2 x s16>) 282 ; SI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 283 ; SI-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[FABS1]](<2 x s16>) 284 ; SI-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[BITCAST2]], [[C1]] 285 ; SI-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[LSHR]], [[C]](s32) 286 ; SI-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND1]], [[SHL1]] 287 ; SI-NEXT: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 288 ; SI-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST3]], [[C1]] 289 ; SI-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 290 ; SI-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL2]] 291 ; SI-NEXT: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 292 ; SI-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND2]], [[C]](s32) 293 ; SI-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[SHL3]] 294 ; SI-NEXT: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32) 295 ; SI-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BITCAST4]](<2 x s16>), [[BITCAST5]](<2 x s16>), [[BITCAST6]](<2 x s16>) 296 ; SI-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<6 x s16>) 297 ; 298 ; VI-LABEL: name: test_fabs_v3s16 299 ; VI: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 300 ; VI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 301 ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 302 ; VI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 303 ; VI-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 304 ; VI-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]] 305 ; VI-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 306 ; VI-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32) 307 ; VI-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 308 ; VI-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 309 ; VI-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV]] 310 ; VI-NEXT: [[FABS1:%[0-9]+]]:_(<2 x s16>) = G_FABS [[BITCAST1]] 311 ; VI-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[FABS]](<2 x s16>) 312 ; VI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32) 313 ; VI-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[FABS1]](<2 x s16>) 314 ; VI-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[BITCAST2]], [[C1]] 315 ; VI-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[LSHR]], [[C]](s32) 316 ; VI-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND1]], [[SHL1]] 317 ; VI-NEXT: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 318 ; VI-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[BITCAST3]], [[C1]] 319 ; VI-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 320 ; VI-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL2]] 321 ; VI-NEXT: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32) 322 ; VI-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND2]], [[C]](s32) 323 ; VI-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[SHL3]] 324 ; VI-NEXT: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32) 325 ; VI-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BITCAST4]](<2 x s16>), [[BITCAST5]](<2 x s16>), [[BITCAST6]](<2 x s16>) 326 ; VI-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<6 x s16>) 327 ; 328 ; GFX9-LABEL: name: test_fabs_v3s16 329 ; GFX9: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 330 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 331 ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 332 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 333 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 334 ; GFX9-NEXT: [[DEF1:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF 335 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[TRUNC]](s16), [[DEF1]](s16) 336 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV]] 337 ; GFX9-NEXT: [[FABS1:%[0-9]+]]:_(<2 x s16>) = G_FABS [[BUILD_VECTOR]] 338 ; GFX9-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[FABS]](<2 x s16>) 339 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 340 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 341 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 342 ; GFX9-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[FABS1]](<2 x s16>) 343 ; GFX9-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST2]](s32) 344 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[TRUNC1]](s16), [[TRUNC2]](s16) 345 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[TRUNC3]](s16), [[TRUNC1]](s16) 346 ; GFX9-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR [[TRUNC2]](s16), [[TRUNC3]](s16) 347 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[BUILD_VECTOR1]](<2 x s16>), [[BUILD_VECTOR2]](<2 x s16>), [[BUILD_VECTOR3]](<2 x s16>) 348 ; GFX9-NEXT: S_NOP 0, implicit [[CONCAT_VECTORS]](<6 x s16>) 349 %0:_(<3 x s16>) = G_IMPLICIT_DEF 350 %1:_(<3 x s16>) = G_FABS %0 351 %2:_(<6 x s16>) = G_CONCAT_VECTORS %1, %1 352 S_NOP 0, implicit %2 353... 354 355--- 356name: test_fabs_v4s16 357body: | 358 bb.0: 359 liveins: $vgpr0_vgpr1 360 361 ; SI-LABEL: name: test_fabs_v4s16 362 ; SI: liveins: $vgpr0_vgpr1 363 ; SI-NEXT: {{ $}} 364 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 365 ; SI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 366 ; SI-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV]] 367 ; SI-NEXT: [[FABS1:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV1]] 368 ; SI-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[FABS]](<2 x s16>), [[FABS1]](<2 x s16>) 369 ; SI-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 370 ; 371 ; VI-LABEL: name: test_fabs_v4s16 372 ; VI: liveins: $vgpr0_vgpr1 373 ; VI-NEXT: {{ $}} 374 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 375 ; VI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 376 ; VI-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV]] 377 ; VI-NEXT: [[FABS1:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV1]] 378 ; VI-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[FABS]](<2 x s16>), [[FABS1]](<2 x s16>) 379 ; VI-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 380 ; 381 ; GFX9-LABEL: name: test_fabs_v4s16 382 ; GFX9: liveins: $vgpr0_vgpr1 383 ; GFX9-NEXT: {{ $}} 384 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 385 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 386 ; GFX9-NEXT: [[FABS:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV]] 387 ; GFX9-NEXT: [[FABS1:%[0-9]+]]:_(<2 x s16>) = G_FABS [[UV1]] 388 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[FABS]](<2 x s16>), [[FABS1]](<2 x s16>) 389 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 390 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 391 %1:_(<4 x s16>) = G_FABS %0 392 $vgpr0_vgpr1 = COPY %1 393... 394