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 %s -o - | FileCheck -check-prefix=SI %s 3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer %s -o - | FileCheck -check-prefix=VI %s 4# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX9 %s 5# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX9 %s 6# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX9 %s 7 8--- 9name: test_abs_s32 10body: | 11 bb.0: 12 liveins: $vgpr0 13 14 ; SI-LABEL: name: test_abs_s32 15 ; SI: liveins: $vgpr0 16 ; SI-NEXT: {{ $}} 17 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 18 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[COPY]] 19 ; SI-NEXT: $vgpr0 = COPY [[ABS]](s32) 20 ; 21 ; VI-LABEL: name: test_abs_s32 22 ; VI: liveins: $vgpr0 23 ; VI-NEXT: {{ $}} 24 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 25 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[COPY]] 26 ; VI-NEXT: $vgpr0 = COPY [[ABS]](s32) 27 ; 28 ; GFX9-LABEL: name: test_abs_s32 29 ; GFX9: liveins: $vgpr0 30 ; GFX9-NEXT: {{ $}} 31 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 32 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[COPY]] 33 ; GFX9-NEXT: $vgpr0 = COPY [[ABS]](s32) 34 %0:_(s32) = COPY $vgpr0 35 %1:_(s32) = G_ABS %0 36 $vgpr0 = COPY %1 37... 38 39--- 40name: test_abs_s64 41body: | 42 bb.0: 43 liveins: $vgpr0_vgpr1 44 45 ; SI-LABEL: name: test_abs_s64 46 ; SI: liveins: $vgpr0_vgpr1 47 ; SI-NEXT: {{ $}} 48 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 49 ; SI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63 50 ; SI-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32) 51 ; SI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 52 ; SI-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64) 53 ; SI-NEXT: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]] 54 ; SI-NEXT: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]] 55 ; SI-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32) 56 ; SI-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]] 57 ; SI-NEXT: $vgpr0_vgpr1 = COPY [[XOR]](s64) 58 ; 59 ; VI-LABEL: name: test_abs_s64 60 ; VI: liveins: $vgpr0_vgpr1 61 ; VI-NEXT: {{ $}} 62 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 63 ; VI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63 64 ; VI-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32) 65 ; VI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 66 ; VI-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64) 67 ; VI-NEXT: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]] 68 ; VI-NEXT: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]] 69 ; VI-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32) 70 ; VI-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]] 71 ; VI-NEXT: $vgpr0_vgpr1 = COPY [[XOR]](s64) 72 ; 73 ; GFX9-LABEL: name: test_abs_s64 74 ; GFX9: liveins: $vgpr0_vgpr1 75 ; GFX9-NEXT: {{ $}} 76 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 77 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 63 78 ; GFX9-NEXT: [[ASHR:%[0-9]+]]:_(s64) = G_ASHR [[COPY]], [[C]](s32) 79 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64) 80 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ASHR]](s64) 81 ; GFX9-NEXT: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV]], [[UV2]] 82 ; GFX9-NEXT: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV1]], [[UV3]], [[UADDO1]] 83 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32) 84 ; GFX9-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[MV]], [[ASHR]] 85 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[XOR]](s64) 86 %0:_(s64) = COPY $vgpr0_vgpr1 87 %1:_(s64) = G_ABS %0 88 $vgpr0_vgpr1 = COPY %1 89... 90 91--- 92name: test_abs_s16 93body: | 94 bb.0: 95 liveins: $vgpr0, $vgpr1 96 97 ; SI-LABEL: name: test_abs_s16 98 ; SI: liveins: $vgpr0, $vgpr1 99 ; SI-NEXT: {{ $}} 100 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 101 ; SI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 16 102 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 103 ; SI-NEXT: $vgpr0 = COPY [[ABS]](s32) 104 ; 105 ; VI-LABEL: name: test_abs_s16 106 ; VI: liveins: $vgpr0, $vgpr1 107 ; VI-NEXT: {{ $}} 108 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 109 ; VI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 110 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 111 ; VI-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS]](s16) 112 ; VI-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 113 ; 114 ; GFX9-LABEL: name: test_abs_s16 115 ; GFX9: liveins: $vgpr0, $vgpr1 116 ; GFX9-NEXT: {{ $}} 117 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 118 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 119 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 120 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS]](s16) 121 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 122 %0:_(s32) = COPY $vgpr0 123 %1:_(s16) = G_TRUNC %0 124 %2:_(s16) = G_ABS %1 125 %3:_(s32) = G_ANYEXT %2 126 $vgpr0 = COPY %3 127... 128 129--- 130name: test_abs_s8 131body: | 132 bb.0: 133 liveins: $vgpr0 134 135 ; SI-LABEL: name: test_abs_s8 136 ; SI: liveins: $vgpr0 137 ; SI-NEXT: {{ $}} 138 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 139 ; SI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8 140 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 141 ; SI-NEXT: $vgpr0 = COPY [[ABS]](s32) 142 ; 143 ; VI-LABEL: name: test_abs_s8 144 ; VI: liveins: $vgpr0 145 ; VI-NEXT: {{ $}} 146 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 147 ; VI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 148 ; VI-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 8 149 ; VI-NEXT: [[SHL:%[0-9]+]]:_(s16) = G_SHL [[TRUNC]], [[C]](s16) 150 ; VI-NEXT: [[ASHR:%[0-9]+]]:_(s16) = G_ASHR [[SHL]], [[C]](s16) 151 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[ASHR]] 152 ; VI-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS]](s16) 153 ; VI-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 154 ; 155 ; GFX9-LABEL: name: test_abs_s8 156 ; GFX9: liveins: $vgpr0 157 ; GFX9-NEXT: {{ $}} 158 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 159 ; GFX9-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8 160 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SEXT_INREG]](s32) 161 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 162 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS]](s16) 163 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32) 164 %0:_(s32) = COPY $vgpr0 165 %1:_(s8) = G_TRUNC %0 166 %2:_(s8) = G_ABS %1 167 %3:_(s32) = G_ANYEXT %2 168 $vgpr0 = COPY %3 169... 170 171--- 172name: test_abs_s17 173body: | 174 bb.0: 175 liveins: $vgpr0 176 177 ; SI-LABEL: name: test_abs_s17 178 ; SI: liveins: $vgpr0 179 ; SI-NEXT: {{ $}} 180 ; SI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 181 ; SI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 17 182 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 183 ; SI-NEXT: $vgpr0 = COPY [[ABS]](s32) 184 ; 185 ; VI-LABEL: name: test_abs_s17 186 ; VI: liveins: $vgpr0 187 ; VI-NEXT: {{ $}} 188 ; VI-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 189 ; VI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 17 190 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 191 ; VI-NEXT: $vgpr0 = COPY [[ABS]](s32) 192 ; 193 ; GFX9-LABEL: name: test_abs_s17 194 ; GFX9: liveins: $vgpr0 195 ; GFX9-NEXT: {{ $}} 196 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 197 ; GFX9-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 17 198 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 199 ; GFX9-NEXT: $vgpr0 = COPY [[ABS]](s32) 200 %0:_(s32) = COPY $vgpr0 201 %1:_(s17) = G_TRUNC %0 202 %2:_(s17) = G_ABS %1 203 %3:_(s32) = G_ANYEXT %2 204 $vgpr0 = COPY %3 205... 206 207--- 208name: test_abs_v2s32 209body: | 210 bb.0: 211 liveins: $vgpr0_vgpr1 212 213 ; SI-LABEL: name: test_abs_v2s32 214 ; SI: liveins: $vgpr0_vgpr1 215 ; SI-NEXT: {{ $}} 216 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 217 ; SI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 218 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[UV]] 219 ; SI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[UV1]] 220 ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32) 221 ; SI-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 222 ; 223 ; VI-LABEL: name: test_abs_v2s32 224 ; VI: liveins: $vgpr0_vgpr1 225 ; VI-NEXT: {{ $}} 226 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 227 ; VI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 228 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[UV]] 229 ; VI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[UV1]] 230 ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32) 231 ; VI-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 232 ; 233 ; GFX9-LABEL: name: test_abs_v2s32 234 ; GFX9: liveins: $vgpr0_vgpr1 235 ; GFX9-NEXT: {{ $}} 236 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 237 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 238 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[UV]] 239 ; GFX9-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[UV1]] 240 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32) 241 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 242 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 243 %1:_(<2 x s32>) = G_ABS %0 244 $vgpr0_vgpr1 = COPY %1 245... 246 247--- 248name: test_abs_v3s32 249body: | 250 bb.0: 251 liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5 252 253 ; SI-LABEL: name: test_abs_v3s32 254 ; SI: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5 255 ; SI-NEXT: {{ $}} 256 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 257 ; SI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 258 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[UV]] 259 ; SI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[UV1]] 260 ; SI-NEXT: [[ABS2:%[0-9]+]]:_(s32) = G_ABS [[UV2]] 261 ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32), [[ABS2]](s32) 262 ; SI-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 263 ; 264 ; VI-LABEL: name: test_abs_v3s32 265 ; VI: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5 266 ; VI-NEXT: {{ $}} 267 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 268 ; VI-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 269 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[UV]] 270 ; VI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[UV1]] 271 ; VI-NEXT: [[ABS2:%[0-9]+]]:_(s32) = G_ABS [[UV2]] 272 ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32), [[ABS2]](s32) 273 ; VI-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 274 ; 275 ; GFX9-LABEL: name: test_abs_v3s32 276 ; GFX9: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3_vgpr4_vgpr5 277 ; GFX9-NEXT: {{ $}} 278 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 279 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 280 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[UV]] 281 ; GFX9-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[UV1]] 282 ; GFX9-NEXT: [[ABS2:%[0-9]+]]:_(s32) = G_ABS [[UV2]] 283 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32), [[ABS2]](s32) 284 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 285 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 286 %1:_(<3 x s32>) = G_ABS %0 287 $vgpr0_vgpr1_vgpr2 = COPY %1 288... 289 290--- 291name: test_abs_v2s16 292body: | 293 bb.0: 294 liveins: $vgpr0 295 296 ; SI-LABEL: name: test_abs_v2s16 297 ; SI: liveins: $vgpr0 298 ; SI-NEXT: {{ $}} 299 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 300 ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 301 ; SI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 302 ; SI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 303 ; SI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST]], 16 304 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 305 ; SI-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16 306 ; SI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG1]] 307 ; SI-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 308 ; SI-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ABS]], [[C1]] 309 ; SI-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ABS1]], [[C1]] 310 ; SI-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 311 ; SI-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 312 ; SI-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 313 ; SI-NEXT: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 314 ; 315 ; VI-LABEL: name: test_abs_v2s16 316 ; VI: liveins: $vgpr0 317 ; VI-NEXT: {{ $}} 318 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 319 ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 320 ; VI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 321 ; VI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 322 ; VI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 323 ; VI-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 324 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 325 ; VI-NEXT: [[ABS1:%[0-9]+]]:_(s16) = G_ABS [[TRUNC1]] 326 ; VI-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ABS]](s16) 327 ; VI-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ABS1]](s16) 328 ; VI-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32) 329 ; VI-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL]] 330 ; VI-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 331 ; VI-NEXT: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 332 ; 333 ; GFX9-LABEL: name: test_abs_v2s16 334 ; GFX9: liveins: $vgpr0 335 ; GFX9-NEXT: {{ $}} 336 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 337 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(<2 x s16>) = G_ABS [[COPY]] 338 ; GFX9-NEXT: $vgpr0 = COPY [[ABS]](<2 x s16>) 339 %0:_(<2 x s16>) = COPY $vgpr0 340 %1:_(<2 x s16>) = G_ABS %0 341 $vgpr0 = COPY %1 342... 343 344--- 345name: test_abs_v3s16 346body: | 347 bb.0: 348 liveins: $vgpr0 349 350 ; SI-LABEL: name: test_abs_v3s16 351 ; SI: liveins: $vgpr0 352 ; SI-NEXT: {{ $}} 353 ; SI-NEXT: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 354 ; SI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 355 ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 356 ; SI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 357 ; SI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 358 ; SI-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 359 ; SI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST]], 16 360 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 361 ; SI-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16 362 ; SI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG1]] 363 ; SI-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST1]], 16 364 ; SI-NEXT: [[ABS2:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG2]] 365 ; SI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ABS]](s32), [[ABS1]](s32), [[ABS2]](s32) 366 ; SI-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s32>) 367 ; 368 ; VI-LABEL: name: test_abs_v3s16 369 ; VI: liveins: $vgpr0 370 ; VI-NEXT: {{ $}} 371 ; VI-NEXT: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 372 ; VI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 373 ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 374 ; VI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 375 ; VI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 376 ; VI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 377 ; VI-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 378 ; VI-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 379 ; VI-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 380 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 381 ; VI-NEXT: [[ABS1:%[0-9]+]]:_(s16) = G_ABS [[TRUNC1]] 382 ; VI-NEXT: [[ABS2:%[0-9]+]]:_(s16) = G_ABS [[TRUNC2]] 383 ; VI-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS]](s16) 384 ; VI-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS1]](s16) 385 ; VI-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS2]](s16) 386 ; VI-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32), [[ANYEXT2]](s32) 387 ; VI-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s32>) 388 ; 389 ; GFX9-LABEL: name: test_abs_v3s16 390 ; GFX9: liveins: $vgpr0 391 ; GFX9-NEXT: {{ $}} 392 ; GFX9-NEXT: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 393 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[DEF]](<4 x s16>) 394 ; GFX9-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 395 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 396 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 397 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(<2 x s16>) = G_ABS [[UV]] 398 ; GFX9-NEXT: [[ABS1:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 399 ; GFX9-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[ABS]](<2 x s16>) 400 ; GFX9-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 401 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ABS1]](s16) 402 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[BITCAST1]](s32), [[LSHR]](s32), [[ANYEXT]](s32) 403 ; GFX9-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<3 x s32>) 404 %0:_(<3 x s16>) = G_IMPLICIT_DEF 405 %1:_(<3 x s16>) = G_ABS %0 406 %2:_(<3 x s32>) = G_ANYEXT %1 407 S_NOP 0, implicit %2 408... 409 410--- 411name: test_abs_v4s16 412body: | 413 bb.0: 414 liveins: $vgpr0_vgpr1 415 416 ; SI-LABEL: name: test_abs_v4s16 417 ; SI: liveins: $vgpr0_vgpr1 418 ; SI-NEXT: {{ $}} 419 ; SI-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 420 ; SI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 421 ; SI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 422 ; SI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 423 ; SI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 424 ; SI-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 425 ; SI-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 426 ; SI-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST]], 16 427 ; SI-NEXT: [[ABS:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG]] 428 ; SI-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16 429 ; SI-NEXT: [[ABS1:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG1]] 430 ; SI-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST1]], 16 431 ; SI-NEXT: [[ABS2:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG2]] 432 ; SI-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR1]], 16 433 ; SI-NEXT: [[ABS3:%[0-9]+]]:_(s32) = G_ABS [[SEXT_INREG3]] 434 ; SI-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 435 ; SI-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ABS]], [[C1]] 436 ; SI-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[ABS1]], [[C1]] 437 ; SI-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 438 ; SI-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 439 ; SI-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 440 ; SI-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ABS2]], [[C1]] 441 ; SI-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ABS3]], [[C1]] 442 ; SI-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C]](s32) 443 ; SI-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 444 ; SI-NEXT: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 445 ; SI-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST2]](<2 x s16>), [[BITCAST3]](<2 x s16>) 446 ; SI-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 447 ; 448 ; VI-LABEL: name: test_abs_v4s16 449 ; VI: liveins: $vgpr0_vgpr1 450 ; VI-NEXT: {{ $}} 451 ; VI-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 452 ; VI-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 453 ; VI-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 454 ; VI-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32) 455 ; VI-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 456 ; VI-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 457 ; VI-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32) 458 ; VI-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 459 ; VI-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32) 460 ; VI-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 461 ; VI-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32) 462 ; VI-NEXT: [[ABS:%[0-9]+]]:_(s16) = G_ABS [[TRUNC]] 463 ; VI-NEXT: [[ABS1:%[0-9]+]]:_(s16) = G_ABS [[TRUNC1]] 464 ; VI-NEXT: [[ABS2:%[0-9]+]]:_(s16) = G_ABS [[TRUNC2]] 465 ; VI-NEXT: [[ABS3:%[0-9]+]]:_(s16) = G_ABS [[TRUNC3]] 466 ; VI-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ABS]](s16) 467 ; VI-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ABS1]](s16) 468 ; VI-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32) 469 ; VI-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL]] 470 ; VI-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 471 ; VI-NEXT: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[ABS2]](s16) 472 ; VI-NEXT: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[ABS3]](s16) 473 ; VI-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[ZEXT3]], [[C]](s32) 474 ; VI-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ZEXT2]], [[SHL1]] 475 ; VI-NEXT: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 476 ; VI-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST2]](<2 x s16>), [[BITCAST3]](<2 x s16>) 477 ; VI-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 478 ; 479 ; GFX9-LABEL: name: test_abs_v4s16 480 ; GFX9: liveins: $vgpr0_vgpr1 481 ; GFX9-NEXT: {{ $}} 482 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 483 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 484 ; GFX9-NEXT: [[ABS:%[0-9]+]]:_(<2 x s16>) = G_ABS [[UV]] 485 ; GFX9-NEXT: [[ABS1:%[0-9]+]]:_(<2 x s16>) = G_ABS [[UV1]] 486 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[ABS]](<2 x s16>), [[ABS1]](<2 x s16>) 487 ; GFX9-NEXT: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 488 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 489 %1:_(<4 x s16>) = G_ABS %0 490 $vgpr0_vgpr1 = COPY %1 491... 492