2869 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -run-pass=amdgpu-prelegalizer-combiner %s -o - | FileCheck -check-prefix=GFX9 %s3# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -run-pass=amdgpu-prelegalizer-combiner --denormal-fp-math=preserve-sign %s -o - | FileCheck -check-prefix=GFX9-DENORM %s4# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-prelegalizer-combiner %s -o - | FileCheck -check-prefix=GFX10 %s5# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-prelegalizer-combiner --denormal-fp-math=preserve-sign %s -o - | FileCheck -check-prefix=GFX10-DENORM %s6 7---8name: test_f32_add_mul9body: |10 bb.1.entry:11 liveins: $vgpr0, $vgpr1, $vgpr212 13 ; GFX9-LABEL: name: test_f32_add_mul14 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr215 ; GFX9-NEXT: {{ $}}16 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr017 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr118 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr219 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]20 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[FMUL]], [[COPY2]]21 ; GFX9-NEXT: $vgpr0 = COPY [[FADD]](s32)22 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr023 ;24 ; GFX9-DENORM-LABEL: name: test_f32_add_mul25 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr226 ; GFX9-DENORM-NEXT: {{ $}}27 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr028 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr129 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr230 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]31 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[FMUL]], [[COPY2]]32 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)33 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr034 ;35 ; GFX10-LABEL: name: test_f32_add_mul36 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr237 ; GFX10-NEXT: {{ $}}38 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr039 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr140 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr241 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]42 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[FMUL]], [[COPY2]]43 ; GFX10-NEXT: $vgpr0 = COPY [[FADD]](s32)44 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr045 ;46 ; GFX10-DENORM-LABEL: name: test_f32_add_mul47 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr248 ; GFX10-DENORM-NEXT: {{ $}}49 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr050 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr151 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr252 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]53 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[FMUL]], [[COPY2]]54 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)55 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr056 %0:_(s32) = COPY $vgpr057 %1:_(s32) = COPY $vgpr158 %2:_(s32) = COPY $vgpr259 %4:_(s32) = reassoc G_FMUL %0, %160 %5:_(s32) = reassoc G_FADD %4, %261 $vgpr0 = COPY %5(s32)62 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr063...64 65---66name: test_f32_add_mul_contract67body: |68 bb.1.entry:69 liveins: $vgpr0, $vgpr1, $vgpr270 71 ; GFX9-LABEL: name: test_f32_add_mul_contract72 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr273 ; GFX9-NEXT: {{ $}}74 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr075 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr176 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr277 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]78 ; GFX9-NEXT: $vgpr0 = COPY [[FMA]](s32)79 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr080 ;81 ; GFX9-DENORM-LABEL: name: test_f32_add_mul_contract82 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr283 ; GFX9-DENORM-NEXT: {{ $}}84 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr085 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr186 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr287 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]88 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)89 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr090 ;91 ; GFX10-LABEL: name: test_f32_add_mul_contract92 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr293 ; GFX10-NEXT: {{ $}}94 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr095 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr196 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr297 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]98 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)99 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0100 ;101 ; GFX10-DENORM-LABEL: name: test_f32_add_mul_contract102 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2103 ; GFX10-DENORM-NEXT: {{ $}}104 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0105 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1106 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2107 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]108 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)109 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0110 %0:_(s32) = COPY $vgpr0111 %1:_(s32) = COPY $vgpr1112 %2:_(s32) = COPY $vgpr2113 %4:_(s32) = reassoc contract G_FMUL %0, %1114 %5:_(s32) = reassoc contract G_FADD %4, %2115 $vgpr0 = COPY %5(s32)116 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0117...118 119---120name: test_f32_add_mul_rhs121body: |122 bb.1.entry:123 liveins: $vgpr0, $vgpr1, $vgpr2124 125 ; GFX9-LABEL: name: test_f32_add_mul_rhs126 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2127 ; GFX9-NEXT: {{ $}}128 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0129 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1130 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2131 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]132 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[COPY2]], [[FMUL]]133 ; GFX9-NEXT: $vgpr0 = COPY [[FADD]](s32)134 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0135 ;136 ; GFX9-DENORM-LABEL: name: test_f32_add_mul_rhs137 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2138 ; GFX9-DENORM-NEXT: {{ $}}139 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0140 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1141 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2142 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]143 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[COPY2]], [[FMUL]]144 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)145 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0146 ;147 ; GFX10-LABEL: name: test_f32_add_mul_rhs148 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2149 ; GFX10-NEXT: {{ $}}150 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0151 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1152 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2153 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]154 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[COPY2]], [[FMUL]]155 ; GFX10-NEXT: $vgpr0 = COPY [[FADD]](s32)156 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0157 ;158 ; GFX10-DENORM-LABEL: name: test_f32_add_mul_rhs159 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2160 ; GFX10-DENORM-NEXT: {{ $}}161 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0162 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1163 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2164 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = reassoc G_FMUL [[COPY]], [[COPY1]]165 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = reassoc G_FADD [[COPY2]], [[FMUL]]166 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)167 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0168 %0:_(s32) = COPY $vgpr0169 %1:_(s32) = COPY $vgpr1170 %2:_(s32) = COPY $vgpr2171 %4:_(s32) = reassoc G_FMUL %0, %1172 %5:_(s32) = reassoc G_FADD %2, %4173 $vgpr0 = COPY %5(s32)174 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0175...176 177---178name: test_f32_add_mul_rhs_contract179body: |180 bb.1.entry:181 liveins: $vgpr0, $vgpr1, $vgpr2182 183 ; GFX9-LABEL: name: test_f32_add_mul_rhs_contract184 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2185 ; GFX9-NEXT: {{ $}}186 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0187 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1188 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2189 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]190 ; GFX9-NEXT: $vgpr0 = COPY [[FMA]](s32)191 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0192 ;193 ; GFX9-DENORM-LABEL: name: test_f32_add_mul_rhs_contract194 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2195 ; GFX9-DENORM-NEXT: {{ $}}196 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0197 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1198 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2199 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]200 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)201 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0202 ;203 ; GFX10-LABEL: name: test_f32_add_mul_rhs_contract204 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2205 ; GFX10-NEXT: {{ $}}206 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0207 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1208 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2209 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]210 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)211 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0212 ;213 ; GFX10-DENORM-LABEL: name: test_f32_add_mul_rhs_contract214 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2215 ; GFX10-DENORM-NEXT: {{ $}}216 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0217 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1218 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2219 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[COPY2]]220 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)221 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0222 %0:_(s32) = COPY $vgpr0223 %1:_(s32) = COPY $vgpr1224 %2:_(s32) = COPY $vgpr2225 %4:_(s32) = reassoc contract G_FMUL %0, %1226 %5:_(s32) = reassoc contract G_FADD %2, %4227 $vgpr0 = COPY %5(s32)228 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0229...230 231---232name: test_half_add_mul233body: |234 bb.1.entry:235 liveins: $vgpr0, $vgpr1, $vgpr2236 237 ; GFX9-LABEL: name: test_half_add_mul238 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2239 ; GFX9-NEXT: {{ $}}240 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0241 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)242 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1243 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)244 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2245 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)246 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]247 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[FMUL]], [[TRUNC2]]248 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)249 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)250 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0251 ;252 ; GFX9-DENORM-LABEL: name: test_half_add_mul253 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2254 ; GFX9-DENORM-NEXT: {{ $}}255 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0256 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)257 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1258 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)259 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2260 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)261 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]262 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[FMUL]], [[TRUNC2]]263 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)264 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)265 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0266 ;267 ; GFX10-LABEL: name: test_half_add_mul268 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2269 ; GFX10-NEXT: {{ $}}270 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0271 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)272 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1273 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)274 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2275 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)276 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]277 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[FMUL]], [[TRUNC2]]278 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)279 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)280 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0281 ;282 ; GFX10-DENORM-LABEL: name: test_half_add_mul283 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2284 ; GFX10-DENORM-NEXT: {{ $}}285 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0286 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)287 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1288 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)289 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2290 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)291 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]292 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[FMUL]], [[TRUNC2]]293 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)294 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)295 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0296 %4:_(s32) = COPY $vgpr0297 %0:_(s16) = G_TRUNC %4(s32)298 %5:_(s32) = COPY $vgpr1299 %1:_(s16) = G_TRUNC %5(s32)300 %6:_(s32) = COPY $vgpr2301 %2:_(s16) = G_TRUNC %6(s32)302 %7:_(s16) = reassoc G_FMUL %0, %1303 %8:_(s16) = reassoc G_FADD %7, %2304 %10:_(s32) = G_ANYEXT %8(s16)305 $vgpr0 = COPY %10(s32)306 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0307...308 309---310name: test_half_add_mul_contract311body: |312 bb.1.entry:313 liveins: $vgpr0, $vgpr1, $vgpr2314 315 ; GFX9-LABEL: name: test_half_add_mul_contract316 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2317 ; GFX9-NEXT: {{ $}}318 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0319 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)320 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1321 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)322 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2323 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)324 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]325 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)326 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)327 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0328 ;329 ; GFX9-DENORM-LABEL: name: test_half_add_mul_contract330 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2331 ; GFX9-DENORM-NEXT: {{ $}}332 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0333 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)334 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1335 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)336 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2337 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)338 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]339 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)340 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)341 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0342 ;343 ; GFX10-LABEL: name: test_half_add_mul_contract344 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2345 ; GFX10-NEXT: {{ $}}346 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0347 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)348 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1349 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)350 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2351 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)352 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]353 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)354 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)355 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0356 ;357 ; GFX10-DENORM-LABEL: name: test_half_add_mul_contract358 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2359 ; GFX10-DENORM-NEXT: {{ $}}360 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0361 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)362 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1363 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)364 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2365 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)366 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]367 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)368 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)369 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0370 %4:_(s32) = COPY $vgpr0371 %0:_(s16) = G_TRUNC %4(s32)372 %5:_(s32) = COPY $vgpr1373 %1:_(s16) = G_TRUNC %5(s32)374 %6:_(s32) = COPY $vgpr2375 %2:_(s16) = G_TRUNC %6(s32)376 %7:_(s16) = reassoc contract G_FMUL %0, %1377 %8:_(s16) = reassoc contract G_FADD %7, %2378 %10:_(s32) = G_ANYEXT %8(s16)379 $vgpr0 = COPY %10(s32)380 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0381...382 383 384---385name: test_half_add_mul_rhs386body: |387 bb.1.entry:388 liveins: $vgpr0, $vgpr1, $vgpr2389 390 ; GFX9-LABEL: name: test_half_add_mul_rhs391 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2392 ; GFX9-NEXT: {{ $}}393 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0394 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)395 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1396 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)397 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2398 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)399 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]400 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]401 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)402 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)403 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0404 ;405 ; GFX9-DENORM-LABEL: name: test_half_add_mul_rhs406 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2407 ; GFX9-DENORM-NEXT: {{ $}}408 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0409 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)410 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1411 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)412 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2413 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)414 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]415 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]416 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)417 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)418 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0419 ;420 ; GFX10-LABEL: name: test_half_add_mul_rhs421 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2422 ; GFX10-NEXT: {{ $}}423 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0424 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)425 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1426 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)427 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2428 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)429 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]430 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]431 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)432 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)433 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0434 ;435 ; GFX10-DENORM-LABEL: name: test_half_add_mul_rhs436 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2437 ; GFX10-DENORM-NEXT: {{ $}}438 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0439 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)440 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1441 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)442 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2443 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)444 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]445 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]446 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)447 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)448 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0449 %4:_(s32) = COPY $vgpr0450 %0:_(s16) = G_TRUNC %4(s32)451 %5:_(s32) = COPY $vgpr1452 %1:_(s16) = G_TRUNC %5(s32)453 %6:_(s32) = COPY $vgpr2454 %2:_(s16) = G_TRUNC %6(s32)455 %7:_(s16) = reassoc G_FMUL %0, %1456 %8:_(s16) = reassoc G_FADD %2, %7457 %10:_(s32) = G_ANYEXT %8(s16)458 $vgpr0 = COPY %10(s32)459 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0460...461 462---463name: test_half_add_mul_rhs_contract464body: |465 bb.1.entry:466 liveins: $vgpr0, $vgpr1, $vgpr2467 468 ; GFX9-LABEL: name: test_half_add_mul_rhs_contract469 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2470 ; GFX9-NEXT: {{ $}}471 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0472 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)473 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1474 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)475 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2476 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)477 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]478 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]479 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)480 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)481 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0482 ;483 ; GFX9-DENORM-LABEL: name: test_half_add_mul_rhs_contract484 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2485 ; GFX9-DENORM-NEXT: {{ $}}486 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0487 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)488 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1489 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)490 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2491 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)492 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]493 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]494 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)495 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)496 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0497 ;498 ; GFX10-LABEL: name: test_half_add_mul_rhs_contract499 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2500 ; GFX10-NEXT: {{ $}}501 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0502 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)503 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1504 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)505 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2506 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)507 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]508 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]509 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)510 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)511 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0512 ;513 ; GFX10-DENORM-LABEL: name: test_half_add_mul_rhs_contract514 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2515 ; GFX10-DENORM-NEXT: {{ $}}516 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0517 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)518 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1519 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)520 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2521 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)522 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = reassoc G_FMUL [[TRUNC]], [[TRUNC1]]523 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = reassoc G_FADD [[TRUNC2]], [[FMUL]]524 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)525 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)526 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0527 %4:_(s32) = COPY $vgpr0528 %0:_(s16) = G_TRUNC %4(s32)529 %5:_(s32) = COPY $vgpr1530 %1:_(s16) = G_TRUNC %5(s32)531 %6:_(s32) = COPY $vgpr2532 %2:_(s16) = G_TRUNC %6(s32)533 %7:_(s16) = reassoc G_FMUL %0, %1534 %8:_(s16) = reassoc G_FADD %2, %7535 %10:_(s32) = G_ANYEXT %8(s16)536 $vgpr0 = COPY %10(s32)537 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0538...539 540---541name: test_double_add_mul542body: |543 bb.1.entry:544 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5545 546 ; GFX9-LABEL: name: test_double_add_mul547 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5548 ; GFX9-NEXT: {{ $}}549 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0550 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1551 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)552 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2553 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3554 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)555 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4556 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5557 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)558 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]559 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[FMUL]], [[MV2]]560 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)561 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)562 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)563 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1564 ;565 ; GFX9-DENORM-LABEL: name: test_double_add_mul566 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5567 ; GFX9-DENORM-NEXT: {{ $}}568 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0569 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1570 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)571 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2572 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3573 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)574 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4575 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5576 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)577 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]578 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[FMUL]], [[MV2]]579 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)580 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)581 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)582 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1583 ;584 ; GFX10-LABEL: name: test_double_add_mul585 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5586 ; GFX10-NEXT: {{ $}}587 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0588 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1589 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)590 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2591 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3592 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)593 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4594 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5595 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)596 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]597 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[FMUL]], [[MV2]]598 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)599 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)600 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)601 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1602 ;603 ; GFX10-DENORM-LABEL: name: test_double_add_mul604 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5605 ; GFX10-DENORM-NEXT: {{ $}}606 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0607 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1608 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)609 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2610 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3611 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)612 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4613 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5614 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)615 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]616 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[FMUL]], [[MV2]]617 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)618 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)619 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)620 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1621 %4:_(s32) = COPY $vgpr0622 %5:_(s32) = COPY $vgpr1623 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)624 %6:_(s32) = COPY $vgpr2625 %7:_(s32) = COPY $vgpr3626 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)627 %8:_(s32) = COPY $vgpr4628 %9:_(s32) = COPY $vgpr5629 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)630 %10:_(s64) = reassoc G_FMUL %0, %1631 %11:_(s64) = reassoc G_FADD %10, %2632 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)633 $vgpr0 = COPY %13(s32)634 $vgpr1 = COPY %14(s32)635 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1636...637 638---639name: test_double_add_mul_contract640body: |641 bb.1.entry:642 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5643 644 ; GFX9-LABEL: name: test_double_add_mul_contract645 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5646 ; GFX9-NEXT: {{ $}}647 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0648 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1649 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)650 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2651 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3652 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)653 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4654 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5655 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)656 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]657 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)658 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)659 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)660 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1661 ;662 ; GFX9-DENORM-LABEL: name: test_double_add_mul_contract663 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5664 ; GFX9-DENORM-NEXT: {{ $}}665 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0666 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1667 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)668 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2669 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3670 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)671 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4672 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5673 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)674 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]675 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)676 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)677 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)678 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1679 ;680 ; GFX10-LABEL: name: test_double_add_mul_contract681 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5682 ; GFX10-NEXT: {{ $}}683 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0684 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1685 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)686 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2687 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3688 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)689 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4690 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5691 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)692 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]693 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)694 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)695 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)696 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1697 ;698 ; GFX10-DENORM-LABEL: name: test_double_add_mul_contract699 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5700 ; GFX10-DENORM-NEXT: {{ $}}701 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0702 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1703 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)704 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2705 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3706 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)707 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4708 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5709 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)710 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]711 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)712 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)713 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)714 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1715 %4:_(s32) = COPY $vgpr0716 %5:_(s32) = COPY $vgpr1717 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)718 %6:_(s32) = COPY $vgpr2719 %7:_(s32) = COPY $vgpr3720 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)721 %8:_(s32) = COPY $vgpr4722 %9:_(s32) = COPY $vgpr5723 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)724 %10:_(s64) = reassoc contract G_FMUL %0, %1725 %11:_(s64) = reassoc contract G_FADD %10, %2726 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)727 $vgpr0 = COPY %13(s32)728 $vgpr1 = COPY %14(s32)729 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1730...731 732---733name: test_double_add_mul_rhs734body: |735 bb.1.entry:736 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5737 738 ; GFX9-LABEL: name: test_double_add_mul_rhs739 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5740 ; GFX9-NEXT: {{ $}}741 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0742 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1743 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)744 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2745 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3746 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)747 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4748 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5749 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)750 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]751 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[MV2]], [[FMUL]]752 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)753 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)754 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)755 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1756 ;757 ; GFX9-DENORM-LABEL: name: test_double_add_mul_rhs758 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5759 ; GFX9-DENORM-NEXT: {{ $}}760 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0761 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1762 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)763 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2764 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3765 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)766 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4767 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5768 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)769 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]770 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[MV2]], [[FMUL]]771 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)772 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)773 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)774 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1775 ;776 ; GFX10-LABEL: name: test_double_add_mul_rhs777 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5778 ; GFX10-NEXT: {{ $}}779 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0780 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1781 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)782 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2783 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3784 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)785 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4786 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5787 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)788 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]789 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[MV2]], [[FMUL]]790 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)791 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)792 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)793 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1794 ;795 ; GFX10-DENORM-LABEL: name: test_double_add_mul_rhs796 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5797 ; GFX10-DENORM-NEXT: {{ $}}798 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0799 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1800 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)801 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2802 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3803 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)804 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4805 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5806 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)807 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = reassoc G_FMUL [[MV]], [[MV1]]808 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = reassoc G_FADD [[MV2]], [[FMUL]]809 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)810 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)811 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)812 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1813 %4:_(s32) = COPY $vgpr0814 %5:_(s32) = COPY $vgpr1815 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)816 %6:_(s32) = COPY $vgpr2817 %7:_(s32) = COPY $vgpr3818 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)819 %8:_(s32) = COPY $vgpr4820 %9:_(s32) = COPY $vgpr5821 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)822 %10:_(s64) = reassoc G_FMUL %0, %1823 %11:_(s64) = reassoc G_FADD %2, %10824 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)825 $vgpr0 = COPY %13(s32)826 $vgpr1 = COPY %14(s32)827 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1828...829 830---831name: test_double_add_mul_rhs_contract832body: |833 bb.1.entry:834 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5835 836 ; GFX9-LABEL: name: test_double_add_mul_rhs_contract837 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5838 ; GFX9-NEXT: {{ $}}839 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0840 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1841 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)842 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2843 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3844 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)845 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4846 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5847 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)848 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]849 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)850 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)851 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)852 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1853 ;854 ; GFX9-DENORM-LABEL: name: test_double_add_mul_rhs_contract855 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5856 ; GFX9-DENORM-NEXT: {{ $}}857 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0858 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1859 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)860 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2861 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3862 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)863 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4864 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5865 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)866 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]867 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)868 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)869 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)870 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1871 ;872 ; GFX10-LABEL: name: test_double_add_mul_rhs_contract873 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5874 ; GFX10-NEXT: {{ $}}875 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0876 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1877 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)878 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2879 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3880 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)881 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4882 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5883 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)884 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]885 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)886 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)887 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)888 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1889 ;890 ; GFX10-DENORM-LABEL: name: test_double_add_mul_rhs_contract891 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5892 ; GFX10-DENORM-NEXT: {{ $}}893 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0894 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1895 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)896 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2897 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3898 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)899 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4900 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5901 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)902 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]903 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)904 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)905 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)906 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1907 %4:_(s32) = COPY $vgpr0908 %5:_(s32) = COPY $vgpr1909 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)910 %6:_(s32) = COPY $vgpr2911 %7:_(s32) = COPY $vgpr3912 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)913 %8:_(s32) = COPY $vgpr4914 %9:_(s32) = COPY $vgpr5915 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)916 %10:_(s64) = reassoc contract G_FMUL %0, %1917 %11:_(s64) = reassoc contract G_FADD %2, %10918 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)919 $vgpr0 = COPY %13(s32)920 $vgpr1 = COPY %14(s32)921 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1922...923 924---925name: test_4xfloat_add_mul926body: |927 bb.1.entry:928 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11929 930 ; GFX9-LABEL: name: test_4xfloat_add_mul931 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11932 ; GFX9-NEXT: {{ $}}933 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0934 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1935 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2936 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3937 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)938 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4939 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5940 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6941 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7942 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)943 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8944 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9945 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10946 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11947 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)948 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]949 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]950 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s32>)951 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)952 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)953 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)954 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)955 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3956 ;957 ; GFX9-DENORM-LABEL: name: test_4xfloat_add_mul958 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11959 ; GFX9-DENORM-NEXT: {{ $}}960 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0961 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1962 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2963 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3964 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)965 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4966 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5967 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6968 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7969 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)970 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8971 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9972 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10973 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11974 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)975 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]976 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]977 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s32>)978 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)979 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)980 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)981 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)982 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3983 ;984 ; GFX10-LABEL: name: test_4xfloat_add_mul985 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11986 ; GFX10-NEXT: {{ $}}987 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0988 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1989 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2990 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3991 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)992 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4993 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5994 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6995 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7996 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)997 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8998 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9999 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101000 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111001 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1002 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1003 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]1004 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s32>)1005 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1006 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1007 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1008 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)1009 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31010 ;1011 ; GFX10-DENORM-LABEL: name: test_4xfloat_add_mul1012 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr111013 ; GFX10-DENORM-NEXT: {{ $}}1014 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01015 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11016 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21017 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31018 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1019 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41020 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51021 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61022 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71023 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1024 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81025 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91026 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101027 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111028 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1029 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1030 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]1031 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s32>)1032 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1033 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1034 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1035 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1036 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31037 %4:_(s32) = COPY $vgpr01038 %5:_(s32) = COPY $vgpr11039 %6:_(s32) = COPY $vgpr21040 %7:_(s32) = COPY $vgpr31041 %0:_(<4 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32), %7(s32)1042 %8:_(s32) = COPY $vgpr41043 %9:_(s32) = COPY $vgpr51044 %10:_(s32) = COPY $vgpr61045 %11:_(s32) = COPY $vgpr71046 %1:_(<4 x s32>) = G_BUILD_VECTOR %8(s32), %9(s32), %10(s32), %11(s32)1047 %12:_(s32) = COPY $vgpr81048 %13:_(s32) = COPY $vgpr91049 %14:_(s32) = COPY $vgpr101050 %15:_(s32) = COPY $vgpr111051 %2:_(<4 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32), %14(s32), %15(s32)1052 %16:_(<4 x s32>) = reassoc G_FMUL %0, %11053 %17:_(<4 x s32>) = reassoc G_FADD %16, %21054 %19:_(s32), %20:_(s32), %21:_(s32), %22:_(s32) = G_UNMERGE_VALUES %17(<4 x s32>)1055 $vgpr0 = COPY %19(s32)1056 $vgpr1 = COPY %20(s32)1057 $vgpr2 = COPY %21(s32)1058 $vgpr3 = COPY %22(s32)1059 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31060...1061 1062---1063name: test_4xfloat_add_mul_contract1064body: |1065 bb.1.entry:1066 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr111067 1068 ; GFX9-LABEL: name: test_4xfloat_add_mul_contract1069 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr111070 ; GFX9-NEXT: {{ $}}1071 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01072 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11073 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21074 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31075 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1076 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41077 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51078 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61079 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71080 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1081 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81082 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91083 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101084 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111085 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1086 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(<4 x s32>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]1087 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s32>)1088 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1089 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1090 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1091 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)1092 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31093 ;1094 ; GFX9-DENORM-LABEL: name: test_4xfloat_add_mul_contract1095 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr111096 ; GFX9-DENORM-NEXT: {{ $}}1097 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01098 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11099 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21100 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31101 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1102 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41103 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51104 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61105 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71106 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1107 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81108 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91109 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101110 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111111 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1112 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<4 x s32>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]1113 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s32>)1114 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1115 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1116 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1117 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1118 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31119 ;1120 ; GFX10-LABEL: name: test_4xfloat_add_mul_contract1121 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr111122 ; GFX10-NEXT: {{ $}}1123 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01124 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11125 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21126 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31127 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1128 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41129 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51130 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61131 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71132 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1133 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81134 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91135 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101136 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111137 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1138 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(<4 x s32>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]1139 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s32>)1140 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1141 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1142 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1143 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)1144 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31145 ;1146 ; GFX10-DENORM-LABEL: name: test_4xfloat_add_mul_contract1147 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr111148 ; GFX10-DENORM-NEXT: {{ $}}1149 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01150 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11151 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21152 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31153 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1154 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41155 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51156 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61157 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71158 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1159 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81160 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91161 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101162 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111163 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1164 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<4 x s32>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]1165 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s32>)1166 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1167 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1168 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1169 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1170 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31171 %4:_(s32) = COPY $vgpr01172 %5:_(s32) = COPY $vgpr11173 %6:_(s32) = COPY $vgpr21174 %7:_(s32) = COPY $vgpr31175 %0:_(<4 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32), %7(s32)1176 %8:_(s32) = COPY $vgpr41177 %9:_(s32) = COPY $vgpr51178 %10:_(s32) = COPY $vgpr61179 %11:_(s32) = COPY $vgpr71180 %1:_(<4 x s32>) = G_BUILD_VECTOR %8(s32), %9(s32), %10(s32), %11(s32)1181 %12:_(s32) = COPY $vgpr81182 %13:_(s32) = COPY $vgpr91183 %14:_(s32) = COPY $vgpr101184 %15:_(s32) = COPY $vgpr111185 %2:_(<4 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32), %14(s32), %15(s32)1186 %16:_(<4 x s32>) = reassoc contract G_FMUL %0, %11187 %17:_(<4 x s32>) = reassoc contract G_FADD %16, %21188 %19:_(s32), %20:_(s32), %21:_(s32), %22:_(s32) = G_UNMERGE_VALUES %17(<4 x s32>)1189 $vgpr0 = COPY %19(s32)1190 $vgpr1 = COPY %20(s32)1191 $vgpr2 = COPY %21(s32)1192 $vgpr3 = COPY %22(s32)1193 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31194...1195 1196---1197name: test_3xfloat_add_mul_rhs1198body: |1199 bb.1.entry:1200 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81201 1202 ; GFX9-LABEL: name: test_3xfloat_add_mul_rhs1203 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81204 ; GFX9-NEXT: {{ $}}1205 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01206 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11207 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21208 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1209 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31210 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41211 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51212 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1213 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61214 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71215 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81216 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1217 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1218 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1219 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1220 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1221 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1222 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1223 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21224 ;1225 ; GFX9-DENORM-LABEL: name: test_3xfloat_add_mul_rhs1226 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81227 ; GFX9-DENORM-NEXT: {{ $}}1228 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01229 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11230 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21231 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1232 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31233 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41234 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51235 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1236 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61237 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71238 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81239 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1240 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1241 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1242 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1243 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1244 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1245 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1246 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21247 ;1248 ; GFX10-LABEL: name: test_3xfloat_add_mul_rhs1249 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81250 ; GFX10-NEXT: {{ $}}1251 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01252 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11253 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21254 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1255 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31256 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41257 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51258 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1259 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61260 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71261 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81262 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1263 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1264 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1265 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1266 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1267 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1268 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1269 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21270 ;1271 ; GFX10-DENORM-LABEL: name: test_3xfloat_add_mul_rhs1272 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81273 ; GFX10-DENORM-NEXT: {{ $}}1274 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01275 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11276 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21277 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1278 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31279 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41280 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51281 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1282 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61283 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71284 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81285 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1286 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1287 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1288 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1289 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1290 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1291 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1292 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21293 %4:_(s32) = COPY $vgpr01294 %5:_(s32) = COPY $vgpr11295 %6:_(s32) = COPY $vgpr21296 %0:_(<3 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32)1297 %7:_(s32) = COPY $vgpr31298 %8:_(s32) = COPY $vgpr41299 %9:_(s32) = COPY $vgpr51300 %1:_(<3 x s32>) = G_BUILD_VECTOR %7(s32), %8(s32), %9(s32)1301 %10:_(s32) = COPY $vgpr61302 %11:_(s32) = COPY $vgpr71303 %12:_(s32) = COPY $vgpr81304 %2:_(<3 x s32>) = G_BUILD_VECTOR %10(s32), %11(s32), %12(s32)1305 %13:_(<3 x s32>) = reassoc G_FMUL %0, %11306 %14:_(<3 x s32>) = reassoc G_FADD %2, %131307 %16:_(s32), %17:_(s32), %18:_(s32) = G_UNMERGE_VALUES %14(<3 x s32>)1308 $vgpr0 = COPY %16(s32)1309 $vgpr1 = COPY %17(s32)1310 $vgpr2 = COPY %18(s32)1311 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21312...1313 1314---1315name: test_3xfloat_add_mul_rhs_contract1316body: |1317 bb.1.entry:1318 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81319 1320 ; GFX9-LABEL: name: test_3xfloat_add_mul_rhs_contract1321 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81322 ; GFX9-NEXT: {{ $}}1323 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01324 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11325 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21326 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1327 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31328 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41329 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51330 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1331 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61332 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71333 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81334 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1335 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1336 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1337 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1338 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1339 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1340 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1341 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21342 ;1343 ; GFX9-DENORM-LABEL: name: test_3xfloat_add_mul_rhs_contract1344 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81345 ; GFX9-DENORM-NEXT: {{ $}}1346 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01347 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11348 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21349 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1350 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31351 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41352 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51353 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1354 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61355 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71356 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81357 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1358 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1359 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1360 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1361 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1362 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1363 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1364 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21365 ;1366 ; GFX10-LABEL: name: test_3xfloat_add_mul_rhs_contract1367 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81368 ; GFX10-NEXT: {{ $}}1369 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01370 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11371 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21372 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1373 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31374 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41375 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51376 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1377 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61378 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71379 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81380 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1381 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1382 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1383 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1384 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1385 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1386 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1387 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21388 ;1389 ; GFX10-DENORM-LABEL: name: test_3xfloat_add_mul_rhs_contract1390 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81391 ; GFX10-DENORM-NEXT: {{ $}}1392 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01393 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11394 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21395 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1396 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31397 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41398 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51399 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1400 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61401 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71402 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81403 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1404 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1405 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]1406 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1407 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1408 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1409 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1410 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21411 %4:_(s32) = COPY $vgpr01412 %5:_(s32) = COPY $vgpr11413 %6:_(s32) = COPY $vgpr21414 %0:_(<3 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32)1415 %7:_(s32) = COPY $vgpr31416 %8:_(s32) = COPY $vgpr41417 %9:_(s32) = COPY $vgpr51418 %1:_(<3 x s32>) = G_BUILD_VECTOR %7(s32), %8(s32), %9(s32)1419 %10:_(s32) = COPY $vgpr61420 %11:_(s32) = COPY $vgpr71421 %12:_(s32) = COPY $vgpr81422 %2:_(<3 x s32>) = G_BUILD_VECTOR %10(s32), %11(s32), %12(s32)1423 %13:_(<3 x s32>) = reassoc G_FMUL %0, %11424 %14:_(<3 x s32>) = reassoc G_FADD %2, %131425 %16:_(s32), %17:_(s32), %18:_(s32) = G_UNMERGE_VALUES %14(<3 x s32>)1426 $vgpr0 = COPY %16(s32)1427 $vgpr1 = COPY %17(s32)1428 $vgpr2 = COPY %18(s32)1429 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21430...1431 1432---1433name: test_4xhalf_add_mul1434body: |1435 bb.1.entry:1436 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51437 1438 ; GFX9-LABEL: name: test_4xhalf_add_mul1439 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51440 ; GFX9-NEXT: {{ $}}1441 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01442 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11443 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1444 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21445 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31446 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1447 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41448 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51449 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1450 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = reassoc G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1451 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = reassoc G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1452 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1453 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1454 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1455 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11456 ;1457 ; GFX9-DENORM-LABEL: name: test_4xhalf_add_mul1458 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51459 ; GFX9-DENORM-NEXT: {{ $}}1460 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01461 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11462 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1463 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21464 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31465 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1466 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41467 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51468 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1469 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = reassoc G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1470 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = reassoc G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1471 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1472 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1473 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1474 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11475 ;1476 ; GFX10-LABEL: name: test_4xhalf_add_mul1477 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51478 ; GFX10-NEXT: {{ $}}1479 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01480 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11481 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1482 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21483 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31484 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1485 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41486 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51487 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1488 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = reassoc G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1489 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = reassoc G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1490 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1491 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1492 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1493 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11494 ;1495 ; GFX10-DENORM-LABEL: name: test_4xhalf_add_mul1496 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51497 ; GFX10-DENORM-NEXT: {{ $}}1498 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01499 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11500 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1501 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21502 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31503 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1504 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41505 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51506 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1507 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = reassoc G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1508 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = reassoc G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1509 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1510 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1511 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1512 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11513 %4:_(<2 x s16>) = COPY $vgpr01514 %5:_(<2 x s16>) = COPY $vgpr11515 %0:_(<4 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>)1516 %6:_(<2 x s16>) = COPY $vgpr21517 %7:_(<2 x s16>) = COPY $vgpr31518 %1:_(<4 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>)1519 %8:_(<2 x s16>) = COPY $vgpr41520 %9:_(<2 x s16>) = COPY $vgpr51521 %2:_(<4 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>)1522 %10:_(<4 x s16>) = reassoc G_FMUL %0, %11523 %11:_(<4 x s16>) = reassoc G_FADD %10, %21524 %13:_(<2 x s16>), %14:_(<2 x s16>) = G_UNMERGE_VALUES %11(<4 x s16>)1525 $vgpr0 = COPY %13(<2 x s16>)1526 $vgpr1 = COPY %14(<2 x s16>)1527 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11528...1529 1530---1531name: test_4xhalf_add_mul_contract1532body: |1533 bb.1.entry:1534 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51535 1536 ; GFX9-LABEL: name: test_4xhalf_add_mul_contract1537 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51538 ; GFX9-NEXT: {{ $}}1539 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01540 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11541 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1542 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21543 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31544 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1545 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41546 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51547 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1548 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(<4 x s16>) = G_FMA [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]], [[CONCAT_VECTORS2]]1549 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FMA]](<4 x s16>)1550 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1551 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1552 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11553 ;1554 ; GFX9-DENORM-LABEL: name: test_4xhalf_add_mul_contract1555 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51556 ; GFX9-DENORM-NEXT: {{ $}}1557 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01558 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11559 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1560 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21561 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31562 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1563 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41564 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51565 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1566 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<4 x s16>) = G_FMA [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]], [[CONCAT_VECTORS2]]1567 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FMA]](<4 x s16>)1568 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1569 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1570 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11571 ;1572 ; GFX10-LABEL: name: test_4xhalf_add_mul_contract1573 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51574 ; GFX10-NEXT: {{ $}}1575 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01576 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11577 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1578 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21579 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31580 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1581 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41582 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51583 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1584 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(<4 x s16>) = G_FMA [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]], [[CONCAT_VECTORS2]]1585 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FMA]](<4 x s16>)1586 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1587 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1588 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11589 ;1590 ; GFX10-DENORM-LABEL: name: test_4xhalf_add_mul_contract1591 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51592 ; GFX10-DENORM-NEXT: {{ $}}1593 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01594 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11595 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1596 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21597 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31598 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1599 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41600 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51601 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1602 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<4 x s16>) = G_FMA [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]], [[CONCAT_VECTORS2]]1603 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FMA]](<4 x s16>)1604 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1605 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1606 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11607 %4:_(<2 x s16>) = COPY $vgpr01608 %5:_(<2 x s16>) = COPY $vgpr11609 %0:_(<4 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>)1610 %6:_(<2 x s16>) = COPY $vgpr21611 %7:_(<2 x s16>) = COPY $vgpr31612 %1:_(<4 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>)1613 %8:_(<2 x s16>) = COPY $vgpr41614 %9:_(<2 x s16>) = COPY $vgpr51615 %2:_(<4 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>)1616 %10:_(<4 x s16>) = reassoc contract G_FMUL %0, %11617 %11:_(<4 x s16>) = reassoc contract G_FADD %10, %21618 %13:_(<2 x s16>), %14:_(<2 x s16>) = G_UNMERGE_VALUES %11(<4 x s16>)1619 $vgpr0 = COPY %13(<2 x s16>)1620 $vgpr1 = COPY %14(<2 x s16>)1621 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11622...1623 1624---1625name: test_3xhalf_add_mul_rhs1626body: |1627 bb.1.entry:1628 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51629 1630 ; GFX9-LABEL: name: test_3xhalf_add_mul_rhs1631 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51632 ; GFX9-NEXT: {{ $}}1633 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01634 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11635 ; GFX9-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1636 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1637 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1638 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21639 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31640 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1641 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1642 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41643 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51644 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1645 ; GFX9-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1646 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = reassoc G_FMUL [[UV]], [[UV2]]1647 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = reassoc G_FADD [[UV4]], [[FMUL]]1648 ; GFX9-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1649 ; GFX9-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1650 ; GFX9-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1651 ; GFX9-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1652 ; GFX9-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1653 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11654 ;1655 ; GFX9-DENORM-LABEL: name: test_3xhalf_add_mul_rhs1656 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51657 ; GFX9-DENORM-NEXT: {{ $}}1658 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01659 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11660 ; GFX9-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1661 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1662 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1663 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21664 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31665 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1666 ; GFX9-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1667 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41668 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51669 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1670 ; GFX9-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1671 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = reassoc G_FMUL [[UV]], [[UV2]]1672 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = reassoc G_FADD [[UV4]], [[FMUL]]1673 ; GFX9-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1674 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1675 ; GFX9-DENORM-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1676 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1677 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1678 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11679 ;1680 ; GFX10-LABEL: name: test_3xhalf_add_mul_rhs1681 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51682 ; GFX10-NEXT: {{ $}}1683 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01684 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11685 ; GFX10-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1686 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1687 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1688 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21689 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31690 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1691 ; GFX10-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1692 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41693 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51694 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1695 ; GFX10-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1696 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = reassoc G_FMUL [[UV]], [[UV2]]1697 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = reassoc G_FADD [[UV4]], [[FMUL]]1698 ; GFX10-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1699 ; GFX10-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1700 ; GFX10-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1701 ; GFX10-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1702 ; GFX10-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1703 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11704 ;1705 ; GFX10-DENORM-LABEL: name: test_3xhalf_add_mul_rhs1706 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51707 ; GFX10-DENORM-NEXT: {{ $}}1708 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01709 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11710 ; GFX10-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1711 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1712 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1713 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21714 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31715 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1716 ; GFX10-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1717 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41718 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51719 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1720 ; GFX10-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1721 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = reassoc G_FMUL [[UV]], [[UV2]]1722 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = reassoc G_FADD [[UV4]], [[FMUL]]1723 ; GFX10-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1724 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1725 ; GFX10-DENORM-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1726 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1727 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1728 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11729 %4:_(<2 x s16>) = COPY $vgpr01730 %5:_(<2 x s16>) = COPY $vgpr11731 %10:_(<2 x s16>) = G_IMPLICIT_DEF1732 %11:_(<6 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>), %10(<2 x s16>)1733 %0:_(<3 x s16>), %12:_(<3 x s16>) = G_UNMERGE_VALUES %11(<6 x s16>)1734 %6:_(<2 x s16>) = COPY $vgpr21735 %7:_(<2 x s16>) = COPY $vgpr31736 %13:_(<6 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>), %10(<2 x s16>)1737 %1:_(<3 x s16>), %14:_(<3 x s16>) = G_UNMERGE_VALUES %13(<6 x s16>)1738 %8:_(<2 x s16>) = COPY $vgpr41739 %9:_(<2 x s16>) = COPY $vgpr51740 %15:_(<6 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>), %10(<2 x s16>)1741 %2:_(<3 x s16>), %16:_(<3 x s16>) = G_UNMERGE_VALUES %15(<6 x s16>)1742 %17:_(<3 x s16>) = reassoc G_FMUL %0, %11743 %18:_(<3 x s16>) = reassoc G_FADD %2, %171744 %22:_(<3 x s16>) = G_IMPLICIT_DEF1745 %23:_(<6 x s16>) = G_CONCAT_VECTORS %18(<3 x s16>), %22(<3 x s16>)1746 %20:_(<2 x s16>), %21:_(<2 x s16>), %24:_(<2 x s16>) = G_UNMERGE_VALUES %23(<6 x s16>)1747 $vgpr0 = COPY %20(<2 x s16>)1748 $vgpr1 = COPY %21(<2 x s16>)1749 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11750...1751 1752---1753name: test_3xhalf_add_mul_rhs_contract1754body: |1755 bb.1.entry:1756 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51757 1758 ; GFX9-LABEL: name: test_3xhalf_add_mul_rhs_contract1759 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51760 ; GFX9-NEXT: {{ $}}1761 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01762 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11763 ; GFX9-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1764 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1765 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1766 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21767 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31768 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1769 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1770 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41771 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51772 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1773 ; GFX9-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1774 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(<3 x s16>) = G_FMA [[UV]], [[UV2]], [[UV4]]1775 ; GFX9-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1776 ; GFX9-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FMA]](<3 x s16>), [[DEF1]](<3 x s16>)1777 ; GFX9-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1778 ; GFX9-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1779 ; GFX9-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1780 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11781 ;1782 ; GFX9-DENORM-LABEL: name: test_3xhalf_add_mul_rhs_contract1783 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51784 ; GFX9-DENORM-NEXT: {{ $}}1785 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01786 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11787 ; GFX9-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1788 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1789 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1790 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21791 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31792 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1793 ; GFX9-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1794 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41795 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51796 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1797 ; GFX9-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1798 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<3 x s16>) = G_FMA [[UV]], [[UV2]], [[UV4]]1799 ; GFX9-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1800 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FMA]](<3 x s16>), [[DEF1]](<3 x s16>)1801 ; GFX9-DENORM-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1802 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1803 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1804 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11805 ;1806 ; GFX10-LABEL: name: test_3xhalf_add_mul_rhs_contract1807 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51808 ; GFX10-NEXT: {{ $}}1809 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01810 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11811 ; GFX10-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1812 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1813 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1814 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21815 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31816 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1817 ; GFX10-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1818 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41819 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51820 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1821 ; GFX10-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1822 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(<3 x s16>) = G_FMA [[UV]], [[UV2]], [[UV4]]1823 ; GFX10-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1824 ; GFX10-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FMA]](<3 x s16>), [[DEF1]](<3 x s16>)1825 ; GFX10-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1826 ; GFX10-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1827 ; GFX10-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1828 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11829 ;1830 ; GFX10-DENORM-LABEL: name: test_3xhalf_add_mul_rhs_contract1831 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51832 ; GFX10-DENORM-NEXT: {{ $}}1833 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01834 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11835 ; GFX10-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1836 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1837 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1838 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21839 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31840 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1841 ; GFX10-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1842 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41843 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51844 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1845 ; GFX10-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1846 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<3 x s16>) = G_FMA [[UV]], [[UV2]], [[UV4]]1847 ; GFX10-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1848 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FMA]](<3 x s16>), [[DEF1]](<3 x s16>)1849 ; GFX10-DENORM-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>), [[UV8:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS3]](<6 x s16>)1850 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1851 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1852 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11853 %4:_(<2 x s16>) = COPY $vgpr01854 %5:_(<2 x s16>) = COPY $vgpr11855 %10:_(<2 x s16>) = G_IMPLICIT_DEF1856 %11:_(<6 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>), %10(<2 x s16>)1857 %0:_(<3 x s16>), %12:_(<3 x s16>) = G_UNMERGE_VALUES %11(<6 x s16>)1858 %6:_(<2 x s16>) = COPY $vgpr21859 %7:_(<2 x s16>) = COPY $vgpr31860 %13:_(<6 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>), %10(<2 x s16>)1861 %1:_(<3 x s16>), %14:_(<3 x s16>) = G_UNMERGE_VALUES %13(<6 x s16>)1862 %8:_(<2 x s16>) = COPY $vgpr41863 %9:_(<2 x s16>) = COPY $vgpr51864 %15:_(<6 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>), %10(<2 x s16>)1865 %2:_(<3 x s16>), %16:_(<3 x s16>) = G_UNMERGE_VALUES %15(<6 x s16>)1866 %17:_(<3 x s16>) = reassoc contract G_FMUL %0, %11867 %18:_(<3 x s16>) = reassoc contract G_FADD %2, %171868 %22:_(<3 x s16>) = G_IMPLICIT_DEF1869 %23:_(<6 x s16>) = G_CONCAT_VECTORS %18(<3 x s16>), %22(<3 x s16>)1870 %20:_(<2 x s16>), %21:_(<2 x s16>), %24:_(<2 x s16>) = G_UNMERGE_VALUES %23(<6 x s16>)1871 $vgpr0 = COPY %20(<2 x s16>)1872 $vgpr1 = COPY %21(<2 x s16>)1873 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11874...1875 1876---1877name: test_4xdouble_add_mul1878body: |1879 bb.1.entry:1880 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr231881 1882 ; GFX9-LABEL: name: test_4xdouble_add_mul1883 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr231884 ; GFX9-NEXT: {{ $}}1885 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01886 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11887 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21888 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31889 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41890 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51891 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61892 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71893 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1894 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1895 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1896 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)1897 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)1898 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81899 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91900 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101901 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111902 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr121903 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr131904 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr141905 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr151906 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)1907 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)1908 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)1909 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)1910 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)1911 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr161912 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr171913 ; GFX9-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr181914 ; GFX9-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr191915 ; GFX9-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr201916 ; GFX9-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr211917 ; GFX9-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr221918 ; GFX9-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr231919 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)1920 ; GFX9-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)1921 ; GFX9-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)1922 ; GFX9-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)1923 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)1924 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1925 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]1926 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s64>)1927 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1928 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1929 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1930 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)1931 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)1932 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)1933 ; GFX9-NEXT: $vgpr6 = COPY [[UV6]](s32)1934 ; GFX9-NEXT: $vgpr7 = COPY [[UV7]](s32)1935 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr71936 ;1937 ; GFX9-DENORM-LABEL: name: test_4xdouble_add_mul1938 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr231939 ; GFX9-DENORM-NEXT: {{ $}}1940 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01941 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11942 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21943 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31944 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41945 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51946 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61947 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71948 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1949 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1950 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1951 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)1952 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)1953 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81954 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91955 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101956 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111957 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr121958 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr131959 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr141960 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr151961 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)1962 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)1963 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)1964 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)1965 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)1966 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr161967 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr171968 ; GFX9-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr181969 ; GFX9-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr191970 ; GFX9-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr201971 ; GFX9-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr211972 ; GFX9-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr221973 ; GFX9-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr231974 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)1975 ; GFX9-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)1976 ; GFX9-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)1977 ; GFX9-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)1978 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)1979 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1980 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]1981 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s64>)1982 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1983 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1984 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1985 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1986 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)1987 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)1988 ; GFX9-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)1989 ; GFX9-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)1990 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr71991 ;1992 ; GFX10-LABEL: name: test_4xdouble_add_mul1993 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr231994 ; GFX10-NEXT: {{ $}}1995 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01996 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11997 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21998 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31999 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42000 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52001 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62002 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72003 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2004 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2005 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2006 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2007 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2008 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82009 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92010 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102011 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112012 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122013 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132014 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142015 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152016 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2017 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2018 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2019 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2020 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2021 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162022 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172023 ; GFX10-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182024 ; GFX10-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192025 ; GFX10-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202026 ; GFX10-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212027 ; GFX10-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222028 ; GFX10-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232029 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2030 ; GFX10-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2031 ; GFX10-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2032 ; GFX10-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2033 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2034 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2035 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]2036 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s64>)2037 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2038 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2039 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2040 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2041 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2042 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2043 ; GFX10-NEXT: $vgpr6 = COPY [[UV6]](s32)2044 ; GFX10-NEXT: $vgpr7 = COPY [[UV7]](s32)2045 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72046 ;2047 ; GFX10-DENORM-LABEL: name: test_4xdouble_add_mul2048 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232049 ; GFX10-DENORM-NEXT: {{ $}}2050 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02051 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12052 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22053 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32054 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42055 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52056 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62057 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72058 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2059 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2060 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2061 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2062 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2063 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82064 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92065 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102066 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112067 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122068 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132069 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142070 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152071 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2072 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2073 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2074 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2075 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2076 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162077 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172078 ; GFX10-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182079 ; GFX10-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192080 ; GFX10-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202081 ; GFX10-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212082 ; GFX10-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222083 ; GFX10-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232084 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2085 ; GFX10-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2086 ; GFX10-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2087 ; GFX10-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2088 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2089 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2090 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = reassoc G_FADD [[FMUL]], [[BUILD_VECTOR2]]2091 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<4 x s64>)2092 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2093 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2094 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2095 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2096 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2097 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2098 ; GFX10-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2099 ; GFX10-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2100 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72101 %4:_(s32) = COPY $vgpr02102 %5:_(s32) = COPY $vgpr12103 %6:_(s32) = COPY $vgpr22104 %7:_(s32) = COPY $vgpr32105 %8:_(s32) = COPY $vgpr42106 %9:_(s32) = COPY $vgpr52107 %10:_(s32) = COPY $vgpr62108 %11:_(s32) = COPY $vgpr72109 %28:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2110 %29:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2111 %30:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2112 %31:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2113 %0:_(<4 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64), %31(s64)2114 %12:_(s32) = COPY $vgpr82115 %13:_(s32) = COPY $vgpr92116 %14:_(s32) = COPY $vgpr102117 %15:_(s32) = COPY $vgpr112118 %16:_(s32) = COPY $vgpr122119 %17:_(s32) = COPY $vgpr132120 %18:_(s32) = COPY $vgpr142121 %19:_(s32) = COPY $vgpr152122 %32:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2123 %33:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2124 %34:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2125 %35:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2126 %1:_(<4 x s64>) = G_BUILD_VECTOR %32(s64), %33(s64), %34(s64), %35(s64)2127 %20:_(s32) = COPY $vgpr162128 %21:_(s32) = COPY $vgpr172129 %22:_(s32) = COPY $vgpr182130 %23:_(s32) = COPY $vgpr192131 %24:_(s32) = COPY $vgpr202132 %25:_(s32) = COPY $vgpr212133 %26:_(s32) = COPY $vgpr222134 %27:_(s32) = COPY $vgpr232135 %36:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2136 %37:_(s64) = G_MERGE_VALUES %22(s32), %23(s32)2137 %38:_(s64) = G_MERGE_VALUES %24(s32), %25(s32)2138 %39:_(s64) = G_MERGE_VALUES %26(s32), %27(s32)2139 %2:_(<4 x s64>) = G_BUILD_VECTOR %36(s64), %37(s64), %38(s64), %39(s64)2140 %40:_(<4 x s64>) = reassoc G_FMUL %0, %12141 %41:_(<4 x s64>) = reassoc G_FADD %40, %22142 %43:_(s32), %44:_(s32), %45:_(s32), %46:_(s32), %47:_(s32), %48:_(s32), %49:_(s32), %50:_(s32) = G_UNMERGE_VALUES %41(<4 x s64>)2143 $vgpr0 = COPY %43(s32)2144 $vgpr1 = COPY %44(s32)2145 $vgpr2 = COPY %45(s32)2146 $vgpr3 = COPY %46(s32)2147 $vgpr4 = COPY %47(s32)2148 $vgpr5 = COPY %48(s32)2149 $vgpr6 = COPY %49(s32)2150 $vgpr7 = COPY %50(s32)2151 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72152...2153 2154---2155name: test_4xdouble_add_mul_contract2156body: |2157 bb.1.entry:2158 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232159 2160 ; GFX9-LABEL: name: test_4xdouble_add_mul_contract2161 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232162 ; GFX9-NEXT: {{ $}}2163 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02164 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12165 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22166 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32167 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42168 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52169 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62170 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72171 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2172 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2173 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2174 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2175 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2176 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82177 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92178 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102179 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112180 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122181 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132182 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142183 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152184 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2185 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2186 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2187 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2188 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2189 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162190 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172191 ; GFX9-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182192 ; GFX9-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192193 ; GFX9-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202194 ; GFX9-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212195 ; GFX9-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222196 ; GFX9-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232197 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2198 ; GFX9-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2199 ; GFX9-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2200 ; GFX9-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2201 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2202 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(<4 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2203 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s64>)2204 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2205 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2206 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2207 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2208 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2209 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)2210 ; GFX9-NEXT: $vgpr6 = COPY [[UV6]](s32)2211 ; GFX9-NEXT: $vgpr7 = COPY [[UV7]](s32)2212 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72213 ;2214 ; GFX9-DENORM-LABEL: name: test_4xdouble_add_mul_contract2215 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232216 ; GFX9-DENORM-NEXT: {{ $}}2217 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02218 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12219 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22220 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32221 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42222 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52223 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62224 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72225 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2226 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2227 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2228 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2229 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2230 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82231 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92232 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102233 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112234 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122235 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132236 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142237 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152238 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2239 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2240 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2241 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2242 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2243 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162244 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172245 ; GFX9-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182246 ; GFX9-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192247 ; GFX9-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202248 ; GFX9-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212249 ; GFX9-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222250 ; GFX9-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232251 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2252 ; GFX9-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2253 ; GFX9-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2254 ; GFX9-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2255 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2256 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<4 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2257 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s64>)2258 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2259 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2260 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2261 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2262 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2263 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2264 ; GFX9-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2265 ; GFX9-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2266 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72267 ;2268 ; GFX10-LABEL: name: test_4xdouble_add_mul_contract2269 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232270 ; GFX10-NEXT: {{ $}}2271 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02272 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12273 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22274 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32275 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42276 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52277 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62278 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72279 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2280 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2281 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2282 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2283 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2284 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82285 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92286 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102287 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112288 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122289 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132290 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142291 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152292 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2293 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2294 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2295 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2296 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2297 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162298 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172299 ; GFX10-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182300 ; GFX10-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192301 ; GFX10-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202302 ; GFX10-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212303 ; GFX10-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222304 ; GFX10-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232305 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2306 ; GFX10-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2307 ; GFX10-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2308 ; GFX10-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2309 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2310 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(<4 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2311 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s64>)2312 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2313 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2314 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2315 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2316 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2317 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2318 ; GFX10-NEXT: $vgpr6 = COPY [[UV6]](s32)2319 ; GFX10-NEXT: $vgpr7 = COPY [[UV7]](s32)2320 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72321 ;2322 ; GFX10-DENORM-LABEL: name: test_4xdouble_add_mul_contract2323 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232324 ; GFX10-DENORM-NEXT: {{ $}}2325 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02326 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12327 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22328 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32329 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42330 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52331 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62332 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72333 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2334 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2335 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2336 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2337 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2338 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82339 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92340 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102341 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112342 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122343 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132344 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142345 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152346 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2347 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2348 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2349 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2350 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2351 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162352 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172353 ; GFX10-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182354 ; GFX10-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192355 ; GFX10-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202356 ; GFX10-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212357 ; GFX10-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222358 ; GFX10-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232359 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2360 ; GFX10-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2361 ; GFX10-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2362 ; GFX10-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2363 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2364 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<4 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2365 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<4 x s64>)2366 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2367 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2368 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2369 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2370 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2371 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2372 ; GFX10-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2373 ; GFX10-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2374 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72375 %4:_(s32) = COPY $vgpr02376 %5:_(s32) = COPY $vgpr12377 %6:_(s32) = COPY $vgpr22378 %7:_(s32) = COPY $vgpr32379 %8:_(s32) = COPY $vgpr42380 %9:_(s32) = COPY $vgpr52381 %10:_(s32) = COPY $vgpr62382 %11:_(s32) = COPY $vgpr72383 %28:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2384 %29:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2385 %30:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2386 %31:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2387 %0:_(<4 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64), %31(s64)2388 %12:_(s32) = COPY $vgpr82389 %13:_(s32) = COPY $vgpr92390 %14:_(s32) = COPY $vgpr102391 %15:_(s32) = COPY $vgpr112392 %16:_(s32) = COPY $vgpr122393 %17:_(s32) = COPY $vgpr132394 %18:_(s32) = COPY $vgpr142395 %19:_(s32) = COPY $vgpr152396 %32:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2397 %33:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2398 %34:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2399 %35:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2400 %1:_(<4 x s64>) = G_BUILD_VECTOR %32(s64), %33(s64), %34(s64), %35(s64)2401 %20:_(s32) = COPY $vgpr162402 %21:_(s32) = COPY $vgpr172403 %22:_(s32) = COPY $vgpr182404 %23:_(s32) = COPY $vgpr192405 %24:_(s32) = COPY $vgpr202406 %25:_(s32) = COPY $vgpr212407 %26:_(s32) = COPY $vgpr222408 %27:_(s32) = COPY $vgpr232409 %36:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2410 %37:_(s64) = G_MERGE_VALUES %22(s32), %23(s32)2411 %38:_(s64) = G_MERGE_VALUES %24(s32), %25(s32)2412 %39:_(s64) = G_MERGE_VALUES %26(s32), %27(s32)2413 %2:_(<4 x s64>) = G_BUILD_VECTOR %36(s64), %37(s64), %38(s64), %39(s64)2414 %40:_(<4 x s64>) = reassoc contract G_FMUL %0, %12415 %41:_(<4 x s64>) = reassoc contract G_FADD %40, %22416 %43:_(s32), %44:_(s32), %45:_(s32), %46:_(s32), %47:_(s32), %48:_(s32), %49:_(s32), %50:_(s32) = G_UNMERGE_VALUES %41(<4 x s64>)2417 $vgpr0 = COPY %43(s32)2418 $vgpr1 = COPY %44(s32)2419 $vgpr2 = COPY %45(s32)2420 $vgpr3 = COPY %46(s32)2421 $vgpr4 = COPY %47(s32)2422 $vgpr5 = COPY %48(s32)2423 $vgpr6 = COPY %49(s32)2424 $vgpr7 = COPY %50(s32)2425 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72426...2427 2428---2429name: test_3xdouble_add_mul_rhs2430body: |2431 bb.1.entry:2432 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172433 2434 ; GFX9-LABEL: name: test_3xdouble_add_mul_rhs2435 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172436 ; GFX9-NEXT: {{ $}}2437 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02438 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12439 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22440 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32441 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42442 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52443 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2444 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2445 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2446 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2447 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62448 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72449 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82450 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92451 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102452 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112453 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2454 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2455 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2456 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2457 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122458 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132459 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142460 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152461 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162462 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172463 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2464 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2465 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2466 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2467 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2468 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]2469 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s64>)2470 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2471 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2472 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2473 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2474 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2475 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)2476 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52477 ;2478 ; GFX9-DENORM-LABEL: name: test_3xdouble_add_mul_rhs2479 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172480 ; GFX9-DENORM-NEXT: {{ $}}2481 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02482 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12483 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22484 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32485 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42486 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52487 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2488 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2489 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2490 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2491 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62492 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72493 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82494 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92495 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102496 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112497 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2498 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2499 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2500 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2501 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122502 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132503 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142504 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152505 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162506 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172507 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2508 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2509 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2510 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2511 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2512 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]2513 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s64>)2514 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2515 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2516 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2517 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2518 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2519 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2520 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52521 ;2522 ; GFX10-LABEL: name: test_3xdouble_add_mul_rhs2523 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172524 ; GFX10-NEXT: {{ $}}2525 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02526 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12527 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22528 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32529 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42530 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52531 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2532 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2533 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2534 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2535 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62536 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72537 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82538 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92539 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102540 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112541 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2542 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2543 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2544 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2545 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122546 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132547 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142548 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152549 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162550 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172551 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2552 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2553 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2554 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2555 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2556 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]2557 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s64>)2558 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2559 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2560 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2561 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2562 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2563 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2564 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52565 ;2566 ; GFX10-DENORM-LABEL: name: test_3xdouble_add_mul_rhs2567 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172568 ; GFX10-DENORM-NEXT: {{ $}}2569 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02570 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12571 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22572 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32573 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42574 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52575 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2576 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2577 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2578 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2579 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62580 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72581 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82582 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92583 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102584 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112585 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2586 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2587 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2588 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2589 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122590 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132591 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142592 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152593 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162594 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172595 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2596 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2597 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2598 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2599 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = reassoc G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2600 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = reassoc G_FADD [[BUILD_VECTOR2]], [[FMUL]]2601 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s64>)2602 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2603 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2604 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2605 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2606 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2607 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2608 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52609 %4:_(s32) = COPY $vgpr02610 %5:_(s32) = COPY $vgpr12611 %6:_(s32) = COPY $vgpr22612 %7:_(s32) = COPY $vgpr32613 %8:_(s32) = COPY $vgpr42614 %9:_(s32) = COPY $vgpr52615 %22:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2616 %23:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2617 %24:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2618 %0:_(<3 x s64>) = G_BUILD_VECTOR %22(s64), %23(s64), %24(s64)2619 %10:_(s32) = COPY $vgpr62620 %11:_(s32) = COPY $vgpr72621 %12:_(s32) = COPY $vgpr82622 %13:_(s32) = COPY $vgpr92623 %14:_(s32) = COPY $vgpr102624 %15:_(s32) = COPY $vgpr112625 %25:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2626 %26:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2627 %27:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2628 %1:_(<3 x s64>) = G_BUILD_VECTOR %25(s64), %26(s64), %27(s64)2629 %16:_(s32) = COPY $vgpr122630 %17:_(s32) = COPY $vgpr132631 %18:_(s32) = COPY $vgpr142632 %19:_(s32) = COPY $vgpr152633 %20:_(s32) = COPY $vgpr162634 %21:_(s32) = COPY $vgpr172635 %28:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2636 %29:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2637 %30:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2638 %2:_(<3 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64)2639 %31:_(<3 x s64>) = reassoc G_FMUL %0, %12640 %32:_(<3 x s64>) = reassoc G_FADD %2, %312641 %34:_(s32), %35:_(s32), %36:_(s32), %37:_(s32), %38:_(s32), %39:_(s32) = G_UNMERGE_VALUES %32(<3 x s64>)2642 $vgpr0 = COPY %34(s32)2643 $vgpr1 = COPY %35(s32)2644 $vgpr2 = COPY %36(s32)2645 $vgpr3 = COPY %37(s32)2646 $vgpr4 = COPY %38(s32)2647 $vgpr5 = COPY %39(s32)2648 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52649...2650 2651---2652name: test_3xdouble_add_mul_rhs_contract2653body: |2654 bb.1.entry:2655 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172656 2657 ; GFX9-LABEL: name: test_3xdouble_add_mul_rhs_contract2658 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172659 ; GFX9-NEXT: {{ $}}2660 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02661 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12662 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22663 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32664 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42665 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52666 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2667 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2668 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2669 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2670 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62671 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72672 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82673 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92674 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102675 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112676 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2677 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2678 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2679 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2680 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122681 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132682 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142683 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152684 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162685 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172686 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2687 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2688 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2689 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2690 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(<3 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2691 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<3 x s64>)2692 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2693 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2694 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2695 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2696 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2697 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)2698 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52699 ;2700 ; GFX9-DENORM-LABEL: name: test_3xdouble_add_mul_rhs_contract2701 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172702 ; GFX9-DENORM-NEXT: {{ $}}2703 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02704 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12705 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22706 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32707 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42708 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52709 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2710 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2711 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2712 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2713 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62714 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72715 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82716 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92717 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102718 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112719 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2720 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2721 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2722 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2723 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122724 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132725 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142726 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152727 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162728 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172729 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2730 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2731 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2732 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2733 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<3 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2734 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<3 x s64>)2735 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2736 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2737 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2738 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2739 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2740 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2741 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52742 ;2743 ; GFX10-LABEL: name: test_3xdouble_add_mul_rhs_contract2744 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172745 ; GFX10-NEXT: {{ $}}2746 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02747 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12748 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22749 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32750 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42751 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52752 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2753 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2754 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2755 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2756 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62757 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72758 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82759 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92760 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102761 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112762 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2763 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2764 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2765 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2766 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122767 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132768 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142769 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152770 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162771 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172772 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2773 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2774 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2775 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2776 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(<3 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2777 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<3 x s64>)2778 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2779 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2780 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2781 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2782 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2783 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2784 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52785 ;2786 ; GFX10-DENORM-LABEL: name: test_3xdouble_add_mul_rhs_contract2787 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172788 ; GFX10-DENORM-NEXT: {{ $}}2789 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02790 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12791 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22792 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32793 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42794 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52795 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2796 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2797 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2798 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2799 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62800 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72801 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82802 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92803 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102804 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112805 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2806 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2807 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2808 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2809 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122810 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132811 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142812 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152813 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162814 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172815 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2816 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2817 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2818 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2819 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(<3 x s64>) = G_FMA [[BUILD_VECTOR]], [[BUILD_VECTOR1]], [[BUILD_VECTOR2]]2820 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32), [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](<3 x s64>)2821 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2822 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2823 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2824 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2825 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2826 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2827 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52828 %4:_(s32) = COPY $vgpr02829 %5:_(s32) = COPY $vgpr12830 %6:_(s32) = COPY $vgpr22831 %7:_(s32) = COPY $vgpr32832 %8:_(s32) = COPY $vgpr42833 %9:_(s32) = COPY $vgpr52834 %22:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2835 %23:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2836 %24:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2837 %0:_(<3 x s64>) = G_BUILD_VECTOR %22(s64), %23(s64), %24(s64)2838 %10:_(s32) = COPY $vgpr62839 %11:_(s32) = COPY $vgpr72840 %12:_(s32) = COPY $vgpr82841 %13:_(s32) = COPY $vgpr92842 %14:_(s32) = COPY $vgpr102843 %15:_(s32) = COPY $vgpr112844 %25:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2845 %26:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2846 %27:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2847 %1:_(<3 x s64>) = G_BUILD_VECTOR %25(s64), %26(s64), %27(s64)2848 %16:_(s32) = COPY $vgpr122849 %17:_(s32) = COPY $vgpr132850 %18:_(s32) = COPY $vgpr142851 %19:_(s32) = COPY $vgpr152852 %20:_(s32) = COPY $vgpr162853 %21:_(s32) = COPY $vgpr172854 %28:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2855 %29:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2856 %30:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2857 %2:_(<3 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64)2858 %31:_(<3 x s64>) = reassoc contract G_FMUL %0, %12859 %32:_(<3 x s64>) = reassoc contract G_FADD %2, %312860 %34:_(s32), %35:_(s32), %36:_(s32), %37:_(s32), %38:_(s32), %39:_(s32) = G_UNMERGE_VALUES %32(<3 x s64>)2861 $vgpr0 = COPY %34(s32)2862 $vgpr1 = COPY %35(s32)2863 $vgpr2 = COPY %36(s32)2864 $vgpr3 = COPY %37(s32)2865 $vgpr4 = COPY %38(s32)2866 $vgpr5 = COPY %39(s32)2867 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52868...2869