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 6--- 7name: test_fneg_s32 8body: | 9 bb.0: 10 liveins: $vgpr0 11 12 ; SI-LABEL: name: test_fneg_s32 13 ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 14 ; SI: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 15 ; SI: $vgpr0 = COPY [[FNEG]](s32) 16 ; VI-LABEL: name: test_fneg_s32 17 ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 18 ; VI: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 19 ; VI: $vgpr0 = COPY [[FNEG]](s32) 20 ; GFX9-LABEL: name: test_fneg_s32 21 ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 22 ; GFX9: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]] 23 ; GFX9: $vgpr0 = COPY [[FNEG]](s32) 24 %0:_(s32) = COPY $vgpr0 25 %1:_(s32) = G_FNEG %0 26 $vgpr0 = COPY %1 27... 28--- 29name: test_fneg_s64 30body: | 31 bb.0: 32 liveins: $vgpr0 33 34 ; SI-LABEL: name: test_fneg_s64 35 ; SI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 36 ; SI: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[COPY]] 37 ; SI: $vgpr0_vgpr1 = COPY [[FNEG]](s64) 38 ; VI-LABEL: name: test_fneg_s64 39 ; VI: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 40 ; VI: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[COPY]] 41 ; VI: $vgpr0_vgpr1 = COPY [[FNEG]](s64) 42 ; GFX9-LABEL: name: test_fneg_s64 43 ; GFX9: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 44 ; GFX9: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[COPY]] 45 ; GFX9: $vgpr0_vgpr1 = COPY [[FNEG]](s64) 46 %0:_(s64) = COPY $vgpr0_vgpr1 47 %1:_(s64) = G_FNEG %0 48 $vgpr0_vgpr1 = COPY %1 49... 50--- 51name: test_fneg_s16 52body: | 53 bb.0: 54 liveins: $vgpr0 55 56 ; SI-LABEL: name: test_fneg_s16 57 ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 58 ; SI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 59 ; SI: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG [[TRUNC]] 60 ; SI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FNEG]](s16) 61 ; SI: $vgpr0 = COPY [[ANYEXT]](s32) 62 ; VI-LABEL: name: test_fneg_s16 63 ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 64 ; VI: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 65 ; VI: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG [[TRUNC]] 66 ; VI: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FNEG]](s16) 67 ; VI: $vgpr0 = COPY [[ANYEXT]](s32) 68 ; GFX9-LABEL: name: test_fneg_s16 69 ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 70 ; GFX9: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32) 71 ; GFX9: [[FNEG:%[0-9]+]]:_(s16) = G_FNEG [[TRUNC]] 72 ; GFX9: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FNEG]](s16) 73 ; GFX9: $vgpr0 = COPY [[ANYEXT]](s32) 74 %0:_(s32) = COPY $vgpr0 75 %1:_(s16) = G_TRUNC %0 76 %2:_(s16) = G_FNEG %1 77 %3:_(s32) = G_ANYEXT %2 78 $vgpr0 = COPY %3 79... 80 81--- 82name: test_fneg_v2s32 83body: | 84 bb.0: 85 liveins: $vgpr0_vgpr1 86 87 ; SI-LABEL: name: test_fneg_v2s32 88 ; SI: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 89 ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 90 ; SI: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[UV]] 91 ; SI: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[UV1]] 92 ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[FNEG]](s32), [[FNEG1]](s32) 93 ; SI: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 94 ; VI-LABEL: name: test_fneg_v2s32 95 ; VI: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 96 ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 97 ; VI: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[UV]] 98 ; VI: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[UV1]] 99 ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[FNEG]](s32), [[FNEG1]](s32) 100 ; VI: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 101 ; GFX9-LABEL: name: test_fneg_v2s32 102 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 103 ; GFX9: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 104 ; GFX9: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[UV]] 105 ; GFX9: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[UV1]] 106 ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[FNEG]](s32), [[FNEG1]](s32) 107 ; GFX9: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 108 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 109 %1:_(<2 x s32>) = G_FNEG %0 110 $vgpr0_vgpr1 = COPY %1 111... 112 113--- 114name: test_fneg_v3s32 115body: | 116 bb.0: 117 liveins: $vgpr0_vgpr1_vgpr2 118 119 ; SI-LABEL: name: test_fneg_v3s32 120 ; SI: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 121 ; SI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 122 ; SI: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[UV]] 123 ; SI: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[UV1]] 124 ; SI: [[FNEG2:%[0-9]+]]:_(s32) = G_FNEG [[UV2]] 125 ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[FNEG]](s32), [[FNEG1]](s32), [[FNEG2]](s32) 126 ; SI: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 127 ; VI-LABEL: name: test_fneg_v3s32 128 ; VI: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 129 ; VI: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 130 ; VI: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[UV]] 131 ; VI: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[UV1]] 132 ; VI: [[FNEG2:%[0-9]+]]:_(s32) = G_FNEG [[UV2]] 133 ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[FNEG]](s32), [[FNEG1]](s32), [[FNEG2]](s32) 134 ; VI: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 135 ; GFX9-LABEL: name: test_fneg_v3s32 136 ; GFX9: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 137 ; GFX9: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<3 x s32>) 138 ; GFX9: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[UV]] 139 ; GFX9: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[UV1]] 140 ; GFX9: [[FNEG2:%[0-9]+]]:_(s32) = G_FNEG [[UV2]] 141 ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[FNEG]](s32), [[FNEG1]](s32), [[FNEG2]](s32) 142 ; GFX9: $vgpr0_vgpr1_vgpr2 = COPY [[BUILD_VECTOR]](<3 x s32>) 143 %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 144 %1:_(<3 x s32>) = G_FNEG %0 145 $vgpr0_vgpr1_vgpr2 = COPY %1 146... 147 148--- 149name: test_fneg_v2s64 150body: | 151 bb.0: 152 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 153 154 ; SI-LABEL: name: test_fneg_v2s64 155 ; SI: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 156 ; SI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 157 ; SI: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[UV]] 158 ; SI: [[FNEG1:%[0-9]+]]:_(s64) = G_FNEG [[UV1]] 159 ; SI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[FNEG]](s64), [[FNEG1]](s64) 160 ; SI: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 161 ; VI-LABEL: name: test_fneg_v2s64 162 ; VI: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 163 ; VI: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 164 ; VI: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[UV]] 165 ; VI: [[FNEG1:%[0-9]+]]:_(s64) = G_FNEG [[UV1]] 166 ; VI: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[FNEG]](s64), [[FNEG1]](s64) 167 ; VI: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 168 ; GFX9-LABEL: name: test_fneg_v2s64 169 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 170 ; GFX9: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 171 ; GFX9: [[FNEG:%[0-9]+]]:_(s64) = G_FNEG [[UV]] 172 ; GFX9: [[FNEG1:%[0-9]+]]:_(s64) = G_FNEG [[UV1]] 173 ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[FNEG]](s64), [[FNEG1]](s64) 174 ; GFX9: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 175 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 176 %1:_(<2 x s64>) = G_FNEG %0 177 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 178... 179 180--- 181name: test_fneg_v2s16 182body: | 183 bb.0: 184 liveins: $vgpr0 185 186 ; SI-LABEL: name: test_fneg_v2s16 187 ; SI: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 188 ; SI: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[COPY]] 189 ; SI: $vgpr0 = COPY [[FNEG]](<2 x s16>) 190 ; VI-LABEL: name: test_fneg_v2s16 191 ; VI: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 192 ; VI: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[COPY]] 193 ; VI: $vgpr0 = COPY [[FNEG]](<2 x s16>) 194 ; GFX9-LABEL: name: test_fneg_v2s16 195 ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 196 ; GFX9: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[COPY]] 197 ; GFX9: $vgpr0 = COPY [[FNEG]](<2 x s16>) 198 %0:_(<2 x s16>) = COPY $vgpr0 199 %1:_(<2 x s16>) = G_FNEG %0 200 $vgpr0 = COPY %1 201... 202 203--- 204name: test_fneg_v3s16 205body: | 206 bb.0: 207 208 ; SI-LABEL: name: test_fneg_v3s16 209 ; SI: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 210 ; SI: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[DEF]](<4 x s16>), 0 211 ; SI: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0 212 ; SI: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>) 213 ; SI: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 214 ; SI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 215 ; SI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 216 ; SI: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 217 ; SI: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 218 ; SI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 219 ; SI: [[COPY:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 220 ; SI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]] 221 ; SI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 222 ; SI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]] 223 ; SI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 224 ; SI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 225 ; SI: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 226 ; SI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 227 ; SI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 228 ; SI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 229 ; SI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32) 230 ; SI: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 231 ; SI: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 232 ; SI: [[DEF1:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 233 ; SI: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[BITCAST2]] 234 ; SI: [[FNEG1:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[BITCAST3]] 235 ; SI: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FNEG]](<2 x s16>), [[FNEG1]](<2 x s16>), [[DEF1]](<2 x s16>) 236 ; SI: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[CONCAT_VECTORS]](<6 x s16>), 0 237 ; SI: S_NOP 0, implicit [[EXTRACT1]](<3 x s16>) 238 ; VI-LABEL: name: test_fneg_v3s16 239 ; VI: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 240 ; VI: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[DEF]](<4 x s16>), 0 241 ; VI: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0 242 ; VI: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>) 243 ; VI: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 244 ; VI: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 245 ; VI: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 246 ; VI: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 247 ; VI: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 248 ; VI: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 249 ; VI: [[COPY:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 250 ; VI: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C1]] 251 ; VI: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 252 ; VI: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]] 253 ; VI: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 254 ; VI: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 255 ; VI: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 256 ; VI: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 257 ; VI: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 258 ; VI: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 259 ; VI: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32) 260 ; VI: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]] 261 ; VI: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32) 262 ; VI: [[DEF1:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 263 ; VI: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[BITCAST2]] 264 ; VI: [[FNEG1:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[BITCAST3]] 265 ; VI: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FNEG]](<2 x s16>), [[FNEG1]](<2 x s16>), [[DEF1]](<2 x s16>) 266 ; VI: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[CONCAT_VECTORS]](<6 x s16>), 0 267 ; VI: S_NOP 0, implicit [[EXTRACT1]](<3 x s16>) 268 ; GFX9-LABEL: name: test_fneg_v3s16 269 ; GFX9: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF 270 ; GFX9: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[DEF]](<4 x s16>), 0 271 ; GFX9: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0 272 ; GFX9: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>) 273 ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>) 274 ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 275 ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 276 ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>) 277 ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32) 278 ; GFX9: [[COPY:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32) 279 ; GFX9: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32) 280 ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY]](s32), [[COPY1]](s32) 281 ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32) 282 ; GFX9: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF 283 ; GFX9: [[BUILD_VECTOR_TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[DEF1]](s32) 284 ; GFX9: [[DEF2:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF 285 ; GFX9: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[BUILD_VECTOR_TRUNC]] 286 ; GFX9: [[FNEG1:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[BUILD_VECTOR_TRUNC1]] 287 ; GFX9: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FNEG]](<2 x s16>), [[FNEG1]](<2 x s16>), [[DEF2]](<2 x s16>) 288 ; GFX9: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[CONCAT_VECTORS]](<6 x s16>), 0 289 ; GFX9: S_NOP 0, implicit [[EXTRACT1]](<3 x s16>) 290 %0:_(<3 x s16>) = G_IMPLICIT_DEF 291 %1:_(<3 x s16>) = G_FNEG %0 292 S_NOP 0, implicit %1 293... 294 295--- 296name: test_fneg_v4s16 297body: | 298 bb.0: 299 liveins: $vgpr0_vgpr1 300 301 ; SI-LABEL: name: test_fneg_v4s16 302 ; SI: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 303 ; SI: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 304 ; SI: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[UV]] 305 ; SI: [[FNEG1:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[UV1]] 306 ; SI: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[FNEG]](<2 x s16>), [[FNEG1]](<2 x s16>) 307 ; SI: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 308 ; VI-LABEL: name: test_fneg_v4s16 309 ; VI: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 310 ; VI: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 311 ; VI: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[UV]] 312 ; VI: [[FNEG1:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[UV1]] 313 ; VI: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[FNEG]](<2 x s16>), [[FNEG1]](<2 x s16>) 314 ; VI: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 315 ; GFX9-LABEL: name: test_fneg_v4s16 316 ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1 317 ; GFX9: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>) 318 ; GFX9: [[FNEG:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[UV]] 319 ; GFX9: [[FNEG1:%[0-9]+]]:_(<2 x s16>) = G_FNEG [[UV1]] 320 ; GFX9: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[FNEG]](<2 x s16>), [[FNEG1]](<2 x s16>) 321 ; GFX9: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>) 322 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1 323 %1:_(<4 x s16>) = G_FNEG %0 324 $vgpr0_vgpr1 = COPY %1 325... 326