3174 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-postlegalizer-combiner %s -o - | FileCheck -check-prefix=GFX9 %s3# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx900 -run-pass=amdgpu-postlegalizer-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-postlegalizer-combiner %s -o - | FileCheck -check-prefix=GFX10 %s5# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-postlegalizer-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) = G_FMUL [[COPY]], [[COPY1]]20 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]31 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]42 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]53 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL %0, %160 %5:_(s32) = 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) = contract G_FMUL %0, %1114 %5:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]132 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]143 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]154 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL [[COPY]], [[COPY1]]165 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = 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) = G_FMUL %0, %1172 %5:_(s32) = 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) = contract G_FMUL %0, %1226 %5:_(s32) = contract G_FADD %2, %4227 $vgpr0 = COPY %5(s32)228 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0229...230 231---232name: test_add_mul_multiple_defs_z233body: |234 bb.1.entry:235 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3236 237 ; GFX9-LABEL: name: test_add_mul_multiple_defs_z238 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3239 ; GFX9-NEXT: {{ $}}240 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0241 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1242 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2243 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3244 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)245 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]246 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)247 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)248 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[FMUL]], [[UV1]]249 ; GFX9-NEXT: $vgpr0 = COPY [[FADD]](s32)250 ;251 ; GFX9-DENORM-LABEL: name: test_add_mul_multiple_defs_z252 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3253 ; GFX9-DENORM-NEXT: {{ $}}254 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0255 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1256 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2257 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3258 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)259 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]260 ; GFX9-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)261 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)262 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[FMUL]], [[UV1]]263 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)264 ;265 ; GFX10-LABEL: name: test_add_mul_multiple_defs_z266 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3267 ; GFX10-NEXT: {{ $}}268 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0269 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1270 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2271 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3272 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)273 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]274 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)275 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)276 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[FMUL]], [[UV1]]277 ; GFX10-NEXT: $vgpr0 = COPY [[FADD]](s32)278 ;279 ; GFX10-DENORM-LABEL: name: test_add_mul_multiple_defs_z280 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3281 ; GFX10-DENORM-NEXT: {{ $}}282 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0283 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1284 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2285 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3286 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)287 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]288 ; GFX10-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)289 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)290 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[FMUL]], [[UV1]]291 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)292 %0:_(s32) = COPY $vgpr0293 %1:_(s32) = COPY $vgpr1294 %4:_(s32) = COPY $vgpr2295 %5:_(s32) = COPY $vgpr3296 %2:_(p1) = G_MERGE_VALUES %4(s32), %5(s32)297 %6:_(s32) = G_FMUL %0, %1298 %7:_(<2 x s32>) = G_LOAD %2(p1) :: (load (<2 x s32>), addrspace 1)299 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %7(<2 x s32>)300 %8:_(s32) = COPY %13(s32)301 %10:_(s32) = G_FADD %6, %8302 $vgpr0 = COPY %10(s32)303...304 305---306name: test_add_mul_multiple_defs_z_contract307body: |308 bb.1.entry:309 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3310 311 ; GFX9-LABEL: name: test_add_mul_multiple_defs_z_contract312 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3313 ; GFX9-NEXT: {{ $}}314 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0315 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1316 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2317 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3318 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)319 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)320 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)321 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]322 ; GFX9-NEXT: $vgpr0 = COPY [[FMA]](s32)323 ;324 ; GFX9-DENORM-LABEL: name: test_add_mul_multiple_defs_z_contract325 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3326 ; GFX9-DENORM-NEXT: {{ $}}327 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0328 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1329 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2330 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3331 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)332 ; GFX9-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)333 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)334 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]335 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)336 ;337 ; GFX10-LABEL: name: test_add_mul_multiple_defs_z_contract338 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3339 ; GFX10-NEXT: {{ $}}340 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0341 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1342 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2343 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3344 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)345 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)346 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)347 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]348 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)349 ;350 ; GFX10-DENORM-LABEL: name: test_add_mul_multiple_defs_z_contract351 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3352 ; GFX10-DENORM-NEXT: {{ $}}353 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0354 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1355 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2356 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3357 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)358 ; GFX10-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)359 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)360 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]361 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)362 %0:_(s32) = COPY $vgpr0363 %1:_(s32) = COPY $vgpr1364 %4:_(s32) = COPY $vgpr2365 %5:_(s32) = COPY $vgpr3366 %2:_(p1) = G_MERGE_VALUES %4(s32), %5(s32)367 %6:_(s32) = contract G_FMUL %0, %1368 %7:_(<2 x s32>) = G_LOAD %2(p1) :: (load (<2 x s32>), addrspace 1)369 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %7(<2 x s32>)370 %8:_(s32) = COPY %13(s32)371 %10:_(s32) = contract G_FADD %6, %8372 $vgpr0 = COPY %10(s32)373...374 375---376name: test_add_mul_rhs_multiple_defs_z377body: |378 bb.1.entry:379 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3380 381 ; GFX9-LABEL: name: test_add_mul_rhs_multiple_defs_z382 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3383 ; GFX9-NEXT: {{ $}}384 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0385 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1386 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2387 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3388 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)389 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]390 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)391 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)392 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[UV1]], [[FMUL]]393 ; GFX9-NEXT: $vgpr0 = COPY [[FADD]](s32)394 ;395 ; GFX9-DENORM-LABEL: name: test_add_mul_rhs_multiple_defs_z396 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3397 ; GFX9-DENORM-NEXT: {{ $}}398 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0399 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1400 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2401 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3402 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)403 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]404 ; GFX9-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)405 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)406 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[UV1]], [[FMUL]]407 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)408 ;409 ; GFX10-LABEL: name: test_add_mul_rhs_multiple_defs_z410 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3411 ; GFX10-NEXT: {{ $}}412 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0413 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1414 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2415 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3416 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)417 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]418 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)419 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)420 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[UV1]], [[FMUL]]421 ; GFX10-NEXT: $vgpr0 = COPY [[FADD]](s32)422 ;423 ; GFX10-DENORM-LABEL: name: test_add_mul_rhs_multiple_defs_z424 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3425 ; GFX10-DENORM-NEXT: {{ $}}426 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0427 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1428 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2429 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3430 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)431 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[COPY1]]432 ; GFX10-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)433 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)434 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[UV1]], [[FMUL]]435 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FADD]](s32)436 %0:_(s32) = COPY $vgpr0437 %1:_(s32) = COPY $vgpr1438 %4:_(s32) = COPY $vgpr2439 %5:_(s32) = COPY $vgpr3440 %2:_(p1) = G_MERGE_VALUES %4(s32), %5(s32)441 %6:_(s32) = G_FMUL %0, %1442 %7:_(<2 x s32>) = G_LOAD %2(p1) :: (load (<2 x s32>), addrspace 1)443 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %7(<2 x s32>)444 %8:_(s32) = COPY %13(s32)445 %10:_(s32) = G_FADD %8, %6446 $vgpr0 = COPY %10(s32)447...448 449---450name: test_add_mul_rhs_multiple_defs_z_contract451body: |452 bb.1.entry:453 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3454 455 ; GFX9-LABEL: name: test_add_mul_rhs_multiple_defs_z_contract456 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3457 ; GFX9-NEXT: {{ $}}458 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0459 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1460 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2461 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3462 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)463 ; GFX9-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)464 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)465 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]466 ; GFX9-NEXT: $vgpr0 = COPY [[FMA]](s32)467 ;468 ; GFX9-DENORM-LABEL: name: test_add_mul_rhs_multiple_defs_z_contract469 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3470 ; GFX9-DENORM-NEXT: {{ $}}471 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0472 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1473 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2474 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3475 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)476 ; GFX9-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)477 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)478 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]479 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)480 ;481 ; GFX10-LABEL: name: test_add_mul_rhs_multiple_defs_z_contract482 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3483 ; GFX10-NEXT: {{ $}}484 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0485 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1486 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2487 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3488 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)489 ; GFX10-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)490 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)491 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]492 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)493 ;494 ; GFX10-DENORM-LABEL: name: test_add_mul_rhs_multiple_defs_z_contract495 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3496 ; GFX10-DENORM-NEXT: {{ $}}497 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0498 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1499 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2500 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3501 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(p1) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)502 ; GFX10-DENORM-NEXT: [[LOAD:%[0-9]+]]:_(<2 x s32>) = G_LOAD [[MV]](p1) :: (load (<2 x s32>), addrspace 1)503 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[LOAD]](<2 x s32>)504 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[UV1]]505 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[FMA]](s32)506 %0:_(s32) = COPY $vgpr0507 %1:_(s32) = COPY $vgpr1508 %4:_(s32) = COPY $vgpr2509 %5:_(s32) = COPY $vgpr3510 %2:_(p1) = G_MERGE_VALUES %4(s32), %5(s32)511 %6:_(s32) = contract G_FMUL %0, %1512 %7:_(<2 x s32>) = G_LOAD %2(p1) :: (load (<2 x s32>), addrspace 1)513 %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %7(<2 x s32>)514 %8:_(s32) = COPY %13(s32)515 %10:_(s32) = contract G_FADD %8, %6516 $vgpr0 = COPY %10(s32)517...518 519---520name: test_half_add_mul521body: |522 bb.1.entry:523 liveins: $vgpr0, $vgpr1, $vgpr2524 525 ; GFX9-LABEL: name: test_half_add_mul526 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2527 ; GFX9-NEXT: {{ $}}528 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0529 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)530 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1531 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)532 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2533 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)534 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]535 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[FMUL]], [[TRUNC2]]536 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)537 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)538 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0539 ;540 ; GFX9-DENORM-LABEL: name: test_half_add_mul541 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2542 ; GFX9-DENORM-NEXT: {{ $}}543 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0544 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)545 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1546 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)547 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2548 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)549 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]550 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[FMUL]], [[TRUNC2]]551 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)552 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)553 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0554 ;555 ; GFX10-LABEL: name: test_half_add_mul556 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2557 ; GFX10-NEXT: {{ $}}558 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0559 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)560 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1561 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)562 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2563 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)564 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]565 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[FMUL]], [[TRUNC2]]566 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)567 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)568 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0569 ;570 ; GFX10-DENORM-LABEL: name: test_half_add_mul571 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2572 ; GFX10-DENORM-NEXT: {{ $}}573 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0574 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)575 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1576 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)577 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2578 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)579 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]580 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[FMUL]], [[TRUNC2]]581 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)582 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)583 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0584 %4:_(s32) = COPY $vgpr0585 %0:_(s16) = G_TRUNC %4(s32)586 %5:_(s32) = COPY $vgpr1587 %1:_(s16) = G_TRUNC %5(s32)588 %6:_(s32) = COPY $vgpr2589 %2:_(s16) = G_TRUNC %6(s32)590 %7:_(s16) = G_FMUL %0, %1591 %8:_(s16) = G_FADD %7, %2592 %10:_(s32) = G_ANYEXT %8(s16)593 $vgpr0 = COPY %10(s32)594 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0595...596 597---598name: test_half_add_mul_contract599body: |600 bb.1.entry:601 liveins: $vgpr0, $vgpr1, $vgpr2602 603 ; GFX9-LABEL: name: test_half_add_mul_contract604 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2605 ; GFX9-NEXT: {{ $}}606 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0607 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)608 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1609 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)610 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2611 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)612 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]613 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)614 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)615 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0616 ;617 ; GFX9-DENORM-LABEL: name: test_half_add_mul_contract618 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2619 ; GFX9-DENORM-NEXT: {{ $}}620 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0621 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)622 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1623 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)624 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2625 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)626 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]627 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)628 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)629 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0630 ;631 ; GFX10-LABEL: name: test_half_add_mul_contract632 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2633 ; GFX10-NEXT: {{ $}}634 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0635 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)636 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1637 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)638 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2639 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)640 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]641 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)642 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)643 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0644 ;645 ; GFX10-DENORM-LABEL: name: test_half_add_mul_contract646 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2647 ; GFX10-DENORM-NEXT: {{ $}}648 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0649 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)650 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1651 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)652 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2653 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)654 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]655 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)656 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)657 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0658 %4:_(s32) = COPY $vgpr0659 %0:_(s16) = G_TRUNC %4(s32)660 %5:_(s32) = COPY $vgpr1661 %1:_(s16) = G_TRUNC %5(s32)662 %6:_(s32) = COPY $vgpr2663 %2:_(s16) = G_TRUNC %6(s32)664 %7:_(s16) = contract G_FMUL %0, %1665 %8:_(s16) = contract G_FADD %7, %2666 %10:_(s32) = G_ANYEXT %8(s16)667 $vgpr0 = COPY %10(s32)668 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0669...670 671---672name: test_half_add_mul_rhs673body: |674 bb.1.entry:675 liveins: $vgpr0, $vgpr1, $vgpr2676 677 ; GFX9-LABEL: name: test_half_add_mul_rhs678 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2679 ; GFX9-NEXT: {{ $}}680 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0681 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)682 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1683 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)684 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2685 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)686 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]687 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[TRUNC2]], [[FMUL]]688 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)689 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)690 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0691 ;692 ; GFX9-DENORM-LABEL: name: test_half_add_mul_rhs693 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2694 ; GFX9-DENORM-NEXT: {{ $}}695 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0696 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)697 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1698 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)699 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2700 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)701 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]702 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[TRUNC2]], [[FMUL]]703 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)704 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)705 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0706 ;707 ; GFX10-LABEL: name: test_half_add_mul_rhs708 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2709 ; GFX10-NEXT: {{ $}}710 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0711 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)712 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1713 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)714 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2715 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)716 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]717 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[TRUNC2]], [[FMUL]]718 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)719 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)720 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0721 ;722 ; GFX10-DENORM-LABEL: name: test_half_add_mul_rhs723 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2724 ; GFX10-DENORM-NEXT: {{ $}}725 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0726 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)727 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1728 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)729 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2730 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)731 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s16) = G_FMUL [[TRUNC]], [[TRUNC1]]732 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s16) = G_FADD [[TRUNC2]], [[FMUL]]733 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FADD]](s16)734 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)735 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0736 %4:_(s32) = COPY $vgpr0737 %0:_(s16) = G_TRUNC %4(s32)738 %5:_(s32) = COPY $vgpr1739 %1:_(s16) = G_TRUNC %5(s32)740 %6:_(s32) = COPY $vgpr2741 %2:_(s16) = G_TRUNC %6(s32)742 %7:_(s16) = G_FMUL %0, %1743 %8:_(s16) = G_FADD %2, %7744 %10:_(s32) = G_ANYEXT %8(s16)745 $vgpr0 = COPY %10(s32)746 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0747...748 749---750name: test_half_add_mul_rhs_contract751body: |752 bb.1.entry:753 liveins: $vgpr0, $vgpr1, $vgpr2754 755 ; GFX9-LABEL: name: test_half_add_mul_rhs_contract756 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2757 ; GFX9-NEXT: {{ $}}758 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0759 ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)760 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1761 ; GFX9-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)762 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2763 ; GFX9-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)764 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]765 ; GFX9-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)766 ; GFX9-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)767 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0768 ;769 ; GFX9-DENORM-LABEL: name: test_half_add_mul_rhs_contract770 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2771 ; GFX9-DENORM-NEXT: {{ $}}772 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0773 ; GFX9-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)774 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1775 ; GFX9-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)776 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2777 ; GFX9-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)778 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]779 ; GFX9-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)780 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)781 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0782 ;783 ; GFX10-LABEL: name: test_half_add_mul_rhs_contract784 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2785 ; GFX10-NEXT: {{ $}}786 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0787 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)788 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1789 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)790 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2791 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)792 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]793 ; GFX10-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)794 ; GFX10-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)795 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0796 ;797 ; GFX10-DENORM-LABEL: name: test_half_add_mul_rhs_contract798 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2799 ; GFX10-DENORM-NEXT: {{ $}}800 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0801 ; GFX10-DENORM-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)802 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1803 ; GFX10-DENORM-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)804 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2805 ; GFX10-DENORM-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)806 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s16) = G_FMA [[TRUNC]], [[TRUNC1]], [[TRUNC2]]807 ; GFX10-DENORM-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[FMA]](s16)808 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)809 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0810 %4:_(s32) = COPY $vgpr0811 %0:_(s16) = G_TRUNC %4(s32)812 %5:_(s32) = COPY $vgpr1813 %1:_(s16) = G_TRUNC %5(s32)814 %6:_(s32) = COPY $vgpr2815 %2:_(s16) = G_TRUNC %6(s32)816 %7:_(s16) = contract G_FMUL %0, %1817 %8:_(s16) = contract G_FADD %2, %7818 %10:_(s32) = G_ANYEXT %8(s16)819 $vgpr0 = COPY %10(s32)820 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0821...822 823---824name: test_double_add_mul825body: |826 bb.1.entry:827 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5828 829 ; GFX9-LABEL: name: test_double_add_mul830 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5831 ; GFX9-NEXT: {{ $}}832 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0833 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1834 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)835 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2836 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3837 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)838 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4839 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5840 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)841 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]842 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[FMUL]], [[MV2]]843 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)844 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)845 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)846 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1847 ;848 ; GFX9-DENORM-LABEL: name: test_double_add_mul849 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5850 ; GFX9-DENORM-NEXT: {{ $}}851 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0852 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1853 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)854 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2855 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3856 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)857 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4858 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5859 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)860 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]861 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[FMUL]], [[MV2]]862 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)863 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)864 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)865 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1866 ;867 ; GFX10-LABEL: name: test_double_add_mul868 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5869 ; GFX10-NEXT: {{ $}}870 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0871 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1872 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)873 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2874 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3875 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)876 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4877 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5878 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)879 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]880 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[FMUL]], [[MV2]]881 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)882 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)883 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)884 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1885 ;886 ; GFX10-DENORM-LABEL: name: test_double_add_mul887 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5888 ; GFX10-DENORM-NEXT: {{ $}}889 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0890 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1891 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)892 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2893 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3894 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)895 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4896 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5897 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)898 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]899 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[FMUL]], [[MV2]]900 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)901 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)902 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)903 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1904 %4:_(s32) = COPY $vgpr0905 %5:_(s32) = COPY $vgpr1906 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)907 %6:_(s32) = COPY $vgpr2908 %7:_(s32) = COPY $vgpr3909 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)910 %8:_(s32) = COPY $vgpr4911 %9:_(s32) = COPY $vgpr5912 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)913 %10:_(s64) = G_FMUL %0, %1914 %11:_(s64) = G_FADD %10, %2915 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)916 $vgpr0 = COPY %13(s32)917 $vgpr1 = COPY %14(s32)918 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1919...920 921---922name: test_double_add_mul_contract923body: |924 bb.1.entry:925 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5926 927 ; GFX9-LABEL: name: test_double_add_mul_contract928 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5929 ; GFX9-NEXT: {{ $}}930 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0931 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1932 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)933 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2934 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3935 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)936 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4937 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5938 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)939 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]940 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)941 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)942 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)943 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1944 ;945 ; GFX9-DENORM-LABEL: name: test_double_add_mul_contract946 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5947 ; GFX9-DENORM-NEXT: {{ $}}948 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0949 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1950 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)951 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2952 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3953 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)954 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4955 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5956 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)957 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]958 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)959 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)960 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)961 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1962 ;963 ; GFX10-LABEL: name: test_double_add_mul_contract964 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5965 ; GFX10-NEXT: {{ $}}966 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0967 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1968 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)969 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2970 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3971 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)972 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4973 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5974 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)975 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]976 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)977 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)978 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)979 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1980 ;981 ; GFX10-DENORM-LABEL: name: test_double_add_mul_contract982 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5983 ; GFX10-DENORM-NEXT: {{ $}}984 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0985 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1986 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)987 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2988 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3989 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)990 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4991 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5992 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)993 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]994 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)995 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)996 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)997 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1998 %4:_(s32) = COPY $vgpr0999 %5:_(s32) = COPY $vgpr11000 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)1001 %6:_(s32) = COPY $vgpr21002 %7:_(s32) = COPY $vgpr31003 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)1004 %8:_(s32) = COPY $vgpr41005 %9:_(s32) = COPY $vgpr51006 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)1007 %10:_(s64) = contract G_FMUL %0, %11008 %11:_(s64) = contract G_FADD %10, %21009 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)1010 $vgpr0 = COPY %13(s32)1011 $vgpr1 = COPY %14(s32)1012 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11013...1014 1015 1016---1017name: test_double_add_mul_rhs1018body: |1019 bb.1.entry:1020 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51021 1022 ; GFX9-LABEL: name: test_double_add_mul_rhs1023 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51024 ; GFX9-NEXT: {{ $}}1025 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01026 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11027 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1028 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21029 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31030 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1031 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41032 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51033 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1034 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]1035 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[MV2]], [[FMUL]]1036 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)1037 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1038 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1039 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11040 ;1041 ; GFX9-DENORM-LABEL: name: test_double_add_mul_rhs1042 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51043 ; GFX9-DENORM-NEXT: {{ $}}1044 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01045 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11046 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1047 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21048 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31049 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1050 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41051 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51052 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1053 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]1054 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[MV2]], [[FMUL]]1055 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)1056 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1057 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1058 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11059 ;1060 ; GFX10-LABEL: name: test_double_add_mul_rhs1061 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51062 ; GFX10-NEXT: {{ $}}1063 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01064 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11065 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1066 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21067 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31068 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1069 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41070 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51071 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1072 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]1073 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[MV2]], [[FMUL]]1074 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)1075 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1076 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1077 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11078 ;1079 ; GFX10-DENORM-LABEL: name: test_double_add_mul_rhs1080 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51081 ; GFX10-DENORM-NEXT: {{ $}}1082 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01083 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11084 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1085 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21086 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31087 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1088 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41089 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51090 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1091 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(s64) = G_FMUL [[MV]], [[MV1]]1092 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(s64) = G_FADD [[MV2]], [[FMUL]]1093 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](s64)1094 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1095 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1096 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11097 %4:_(s32) = COPY $vgpr01098 %5:_(s32) = COPY $vgpr11099 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)1100 %6:_(s32) = COPY $vgpr21101 %7:_(s32) = COPY $vgpr31102 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)1103 %8:_(s32) = COPY $vgpr41104 %9:_(s32) = COPY $vgpr51105 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)1106 %10:_(s64) = G_FMUL %0, %11107 %11:_(s64) = G_FADD %2, %101108 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)1109 $vgpr0 = COPY %13(s32)1110 $vgpr1 = COPY %14(s32)1111 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11112...1113 1114---1115name: test_double_add_mul_rhs_contract1116body: |1117 bb.1.entry:1118 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51119 1120 ; GFX9-LABEL: name: test_double_add_mul_rhs_contract1121 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51122 ; GFX9-NEXT: {{ $}}1123 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01124 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11125 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1126 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21127 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31128 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1129 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41130 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51131 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1132 ; GFX9-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]1133 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)1134 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1135 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1136 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11137 ;1138 ; GFX9-DENORM-LABEL: name: test_double_add_mul_rhs_contract1139 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51140 ; GFX9-DENORM-NEXT: {{ $}}1141 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01142 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11143 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1144 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21145 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31146 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1147 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41148 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51149 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1150 ; GFX9-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]1151 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)1152 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1153 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1154 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11155 ;1156 ; GFX10-LABEL: name: test_double_add_mul_rhs_contract1157 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51158 ; GFX10-NEXT: {{ $}}1159 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01160 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11161 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1162 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21163 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31164 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1165 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41166 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51167 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1168 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]1169 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)1170 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1171 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1172 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11173 ;1174 ; GFX10-DENORM-LABEL: name: test_double_add_mul_rhs_contract1175 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51176 ; GFX10-DENORM-NEXT: {{ $}}1177 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01178 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11179 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1180 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21181 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31182 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)1183 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41184 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51185 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)1186 ; GFX10-DENORM-NEXT: [[FMA:%[0-9]+]]:_(s64) = G_FMA [[MV]], [[MV1]], [[MV2]]1187 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FMA]](s64)1188 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1189 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1190 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11191 %4:_(s32) = COPY $vgpr01192 %5:_(s32) = COPY $vgpr11193 %0:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)1194 %6:_(s32) = COPY $vgpr21195 %7:_(s32) = COPY $vgpr31196 %1:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)1197 %8:_(s32) = COPY $vgpr41198 %9:_(s32) = COPY $vgpr51199 %2:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)1200 %10:_(s64) = contract G_FMUL %0, %11201 %11:_(s64) = contract G_FADD %2, %101202 %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %11(s64)1203 $vgpr0 = COPY %13(s32)1204 $vgpr1 = COPY %14(s32)1205 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11206...1207 1208---1209name: test_4xfloat_add_mul1210body: |1211 bb.1.entry:1212 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101213 1214 ; GFX9-LABEL: name: test_4xfloat_add_mul1215 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101216 ; GFX9-NEXT: {{ $}}1217 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01218 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11219 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21220 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31221 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1222 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41223 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51224 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61225 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71226 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1227 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81228 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91229 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101230 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111231 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1232 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1233 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]1234 ; 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>)1235 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1236 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1237 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1238 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)1239 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31240 ;1241 ; GFX9-DENORM-LABEL: name: test_4xfloat_add_mul1242 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101243 ; GFX9-DENORM-NEXT: {{ $}}1244 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01245 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11246 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21247 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31248 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1249 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41250 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51251 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61252 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71253 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1254 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81255 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91256 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101257 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111258 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1259 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1260 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]1261 ; 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>)1262 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1263 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1264 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1265 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1266 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31267 ;1268 ; GFX10-LABEL: name: test_4xfloat_add_mul1269 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101270 ; GFX10-NEXT: {{ $}}1271 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01272 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11273 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21274 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31275 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1276 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41277 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51278 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61279 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71280 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1281 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81282 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91283 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101284 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111285 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1286 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1287 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]1288 ; 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>)1289 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1290 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1291 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1292 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)1293 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31294 ;1295 ; GFX10-DENORM-LABEL: name: test_4xfloat_add_mul1296 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101297 ; GFX10-DENORM-NEXT: {{ $}}1298 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01299 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11300 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21301 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31302 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1303 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41304 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51305 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61306 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71307 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1308 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81309 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91310 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101311 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111312 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1313 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1314 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]1315 ; 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>)1316 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1317 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1318 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1319 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1320 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31321 %4:_(s32) = COPY $vgpr01322 %5:_(s32) = COPY $vgpr11323 %6:_(s32) = COPY $vgpr21324 %7:_(s32) = COPY $vgpr31325 %0:_(<4 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32), %7(s32)1326 %8:_(s32) = COPY $vgpr41327 %9:_(s32) = COPY $vgpr51328 %10:_(s32) = COPY $vgpr61329 %11:_(s32) = COPY $vgpr71330 %1:_(<4 x s32>) = G_BUILD_VECTOR %8(s32), %9(s32), %10(s32), %11(s32)1331 %12:_(s32) = COPY $vgpr81332 %13:_(s32) = COPY $vgpr91333 %14:_(s32) = COPY $vgpr101334 %15:_(s32) = COPY $vgpr111335 %2:_(<4 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32), %14(s32), %15(s32)1336 %16:_(<4 x s32>) = G_FMUL %0, %11337 %17:_(<4 x s32>) = G_FADD %16, %21338 %19:_(s32), %20:_(s32), %21:_(s32), %22:_(s32) = G_UNMERGE_VALUES %17(<4 x s32>)1339 $vgpr0 = COPY %19(s32)1340 $vgpr1 = COPY %20(s32)1341 $vgpr2 = COPY %21(s32)1342 $vgpr3 = COPY %22(s32)1343 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31344...1345 1346---1347name: test_4xfloat_add_mul_contract1348body: |1349 bb.1.entry:1350 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101351 1352 ; GFX9-LABEL: name: test_4xfloat_add_mul_contract1353 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101354 ; GFX9-NEXT: {{ $}}1355 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01356 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11357 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21358 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31359 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1360 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41361 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51362 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61363 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71364 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1365 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81366 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91367 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101368 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111369 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1370 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1371 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]1372 ; 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>)1373 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1374 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1375 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1376 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)1377 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31378 ;1379 ; GFX9-DENORM-LABEL: name: test_4xfloat_add_mul_contract1380 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101381 ; GFX9-DENORM-NEXT: {{ $}}1382 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01383 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11384 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21385 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31386 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1387 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41388 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51389 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61390 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71391 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1392 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81393 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91394 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101395 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111396 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1397 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1398 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]1399 ; 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>)1400 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1401 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1402 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1403 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1404 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31405 ;1406 ; GFX10-LABEL: name: test_4xfloat_add_mul_contract1407 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101408 ; GFX10-NEXT: {{ $}}1409 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01410 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11411 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21412 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31413 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1414 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41415 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51416 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61417 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71418 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1419 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81420 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91421 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101422 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111423 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1424 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1425 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]1426 ; 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>)1427 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1428 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1429 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1430 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)1431 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31432 ;1433 ; GFX10-DENORM-LABEL: name: test_4xfloat_add_mul_contract1434 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr101435 ; GFX10-DENORM-NEXT: {{ $}}1436 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01437 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11438 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21439 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31440 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)1441 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41442 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51443 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61444 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71445 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32)1446 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81447 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr91448 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr101449 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr111450 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY8]](s32), [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)1451 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1452 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s32>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]1453 ; 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>)1454 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1455 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1456 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1457 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)1458 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31459 %4:_(s32) = COPY $vgpr01460 %5:_(s32) = COPY $vgpr11461 %6:_(s32) = COPY $vgpr21462 %7:_(s32) = COPY $vgpr31463 %0:_(<4 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32), %7(s32)1464 %8:_(s32) = COPY $vgpr41465 %9:_(s32) = COPY $vgpr51466 %10:_(s32) = COPY $vgpr61467 %11:_(s32) = COPY $vgpr71468 %1:_(<4 x s32>) = G_BUILD_VECTOR %8(s32), %9(s32), %10(s32), %11(s32)1469 %12:_(s32) = COPY $vgpr81470 %13:_(s32) = COPY $vgpr91471 %14:_(s32) = COPY $vgpr101472 %15:_(s32) = COPY $vgpr111473 %2:_(<4 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32), %14(s32), %15(s32)1474 %16:_(<4 x s32>) = contract G_FMUL %0, %11475 %17:_(<4 x s32>) = contract G_FADD %16, %21476 %19:_(s32), %20:_(s32), %21:_(s32), %22:_(s32) = G_UNMERGE_VALUES %17(<4 x s32>)1477 $vgpr0 = COPY %19(s32)1478 $vgpr1 = COPY %20(s32)1479 $vgpr2 = COPY %21(s32)1480 $vgpr3 = COPY %22(s32)1481 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31482...1483 1484---1485name: test_3xfloat_add_mul_rhs1486body: |1487 bb.1.entry:1488 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81489 1490 ; GFX9-LABEL: name: test_3xfloat_add_mul_rhs1491 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81492 ; GFX9-NEXT: {{ $}}1493 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01494 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11495 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21496 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1497 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31498 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41499 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51500 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1501 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61502 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71503 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81504 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1505 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1506 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]1507 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1508 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1509 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1510 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1511 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21512 ;1513 ; GFX9-DENORM-LABEL: name: test_3xfloat_add_mul_rhs1514 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81515 ; GFX9-DENORM-NEXT: {{ $}}1516 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01517 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11518 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21519 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1520 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31521 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41522 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51523 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1524 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61525 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71526 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81527 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1528 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1529 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]1530 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1531 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1532 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1533 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1534 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21535 ;1536 ; GFX10-LABEL: name: test_3xfloat_add_mul_rhs1537 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81538 ; GFX10-NEXT: {{ $}}1539 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01540 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11541 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21542 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1543 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31544 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41545 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51546 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1547 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61548 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71549 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81550 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1551 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1552 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]1553 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1554 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1555 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1556 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1557 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21558 ;1559 ; GFX10-DENORM-LABEL: name: test_3xfloat_add_mul_rhs1560 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81561 ; GFX10-DENORM-NEXT: {{ $}}1562 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01563 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11564 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21565 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1566 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31567 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41568 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51569 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1570 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61571 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71572 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81573 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1574 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1575 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]1576 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1577 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1578 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1579 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1580 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21581 %4:_(s32) = COPY $vgpr01582 %5:_(s32) = COPY $vgpr11583 %6:_(s32) = COPY $vgpr21584 %0:_(<3 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32)1585 %7:_(s32) = COPY $vgpr31586 %8:_(s32) = COPY $vgpr41587 %9:_(s32) = COPY $vgpr51588 %1:_(<3 x s32>) = G_BUILD_VECTOR %7(s32), %8(s32), %9(s32)1589 %10:_(s32) = COPY $vgpr61590 %11:_(s32) = COPY $vgpr71591 %12:_(s32) = COPY $vgpr81592 %2:_(<3 x s32>) = G_BUILD_VECTOR %10(s32), %11(s32), %12(s32)1593 %13:_(<3 x s32>) = G_FMUL %0, %11594 %14:_(<3 x s32>) = G_FADD %2, %131595 %16:_(s32), %17:_(s32), %18:_(s32) = G_UNMERGE_VALUES %14(<3 x s32>)1596 $vgpr0 = COPY %16(s32)1597 $vgpr1 = COPY %17(s32)1598 $vgpr2 = COPY %18(s32)1599 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21600...1601 1602---1603name: test_3xfloat_add_mul_rhs_contract1604body: |1605 bb.1.entry:1606 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81607 1608 ; GFX9-LABEL: name: test_3xfloat_add_mul_rhs_contract1609 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81610 ; GFX9-NEXT: {{ $}}1611 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01612 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11613 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21614 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1615 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31616 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41617 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51618 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1619 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61620 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71621 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81622 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1623 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1624 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]1625 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1626 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)1627 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)1628 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)1629 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21630 ;1631 ; GFX9-DENORM-LABEL: name: test_3xfloat_add_mul_rhs_contract1632 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81633 ; GFX9-DENORM-NEXT: {{ $}}1634 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01635 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11636 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21637 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1638 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31639 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41640 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51641 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1642 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61643 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71644 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81645 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1646 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1647 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]1648 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1649 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1650 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1651 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1652 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21653 ;1654 ; GFX10-LABEL: name: test_3xfloat_add_mul_rhs_contract1655 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81656 ; GFX10-NEXT: {{ $}}1657 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01658 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11659 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21660 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1661 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31662 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41663 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51664 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1665 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61666 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71667 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81668 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1669 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1670 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]1671 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1672 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)1673 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)1674 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)1675 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21676 ;1677 ; GFX10-DENORM-LABEL: name: test_3xfloat_add_mul_rhs_contract1678 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr81679 ; GFX10-DENORM-NEXT: {{ $}}1680 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01681 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11682 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21683 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)1684 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31685 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr41686 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr51687 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)1688 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr61689 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr71690 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr81691 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)1692 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s32>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]1693 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s32>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]1694 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[FADD]](<3 x s32>)1695 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)1696 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)1697 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)1698 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21699 %4:_(s32) = COPY $vgpr01700 %5:_(s32) = COPY $vgpr11701 %6:_(s32) = COPY $vgpr21702 %0:_(<3 x s32>) = G_BUILD_VECTOR %4(s32), %5(s32), %6(s32)1703 %7:_(s32) = COPY $vgpr31704 %8:_(s32) = COPY $vgpr41705 %9:_(s32) = COPY $vgpr51706 %1:_(<3 x s32>) = G_BUILD_VECTOR %7(s32), %8(s32), %9(s32)1707 %10:_(s32) = COPY $vgpr61708 %11:_(s32) = COPY $vgpr71709 %12:_(s32) = COPY $vgpr81710 %2:_(<3 x s32>) = G_BUILD_VECTOR %10(s32), %11(s32), %12(s32)1711 %13:_(<3 x s32>) = contract G_FMUL %0, %11712 %14:_(<3 x s32>) = contract G_FADD %2, %131713 %16:_(s32), %17:_(s32), %18:_(s32) = G_UNMERGE_VALUES %14(<3 x s32>)1714 $vgpr0 = COPY %16(s32)1715 $vgpr1 = COPY %17(s32)1716 $vgpr2 = COPY %18(s32)1717 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr21718...1719 1720---1721name: test_4xhalf_add_mul1722body: |1723 bb.1.entry:1724 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51725 1726 ; GFX9-LABEL: name: test_4xhalf_add_mul1727 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51728 ; GFX9-NEXT: {{ $}}1729 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01730 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11731 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1732 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21733 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31734 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1735 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41736 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51737 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1738 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1739 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1740 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1741 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1742 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1743 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11744 ;1745 ; GFX9-DENORM-LABEL: name: test_4xhalf_add_mul1746 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51747 ; GFX9-DENORM-NEXT: {{ $}}1748 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01749 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11750 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1751 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21752 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31753 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1754 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41755 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51756 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1757 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1758 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1759 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1760 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1761 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1762 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11763 ;1764 ; GFX10-LABEL: name: test_4xhalf_add_mul1765 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51766 ; GFX10-NEXT: {{ $}}1767 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01768 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11769 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1770 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21771 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31772 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1773 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41774 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51775 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1776 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1777 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1778 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1779 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1780 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1781 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11782 ;1783 ; GFX10-DENORM-LABEL: name: test_4xhalf_add_mul1784 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51785 ; GFX10-DENORM-NEXT: {{ $}}1786 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01787 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11788 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1789 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21790 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31791 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1792 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41793 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51794 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1795 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1796 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1797 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1798 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1799 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1800 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11801 %4:_(<2 x s16>) = COPY $vgpr01802 %5:_(<2 x s16>) = COPY $vgpr11803 %0:_(<4 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>)1804 %6:_(<2 x s16>) = COPY $vgpr21805 %7:_(<2 x s16>) = COPY $vgpr31806 %1:_(<4 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>)1807 %8:_(<2 x s16>) = COPY $vgpr41808 %9:_(<2 x s16>) = COPY $vgpr51809 %2:_(<4 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>)1810 %10:_(<4 x s16>) = G_FMUL %0, %11811 %11:_(<4 x s16>) = G_FADD %10, %21812 %13:_(<2 x s16>), %14:_(<2 x s16>) = G_UNMERGE_VALUES %11(<4 x s16>)1813 $vgpr0 = COPY %13(<2 x s16>)1814 $vgpr1 = COPY %14(<2 x s16>)1815 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11816...1817 1818---1819name: test_4xhalf_add_mul_contract1820body: |1821 bb.1.entry:1822 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51823 1824 ; GFX9-LABEL: name: test_4xhalf_add_mul_contract1825 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51826 ; GFX9-NEXT: {{ $}}1827 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01828 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11829 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1830 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21831 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31832 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1833 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41834 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51835 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1836 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = contract G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1837 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = contract G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1838 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1839 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1840 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1841 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11842 ;1843 ; GFX9-DENORM-LABEL: name: test_4xhalf_add_mul_contract1844 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51845 ; GFX9-DENORM-NEXT: {{ $}}1846 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01847 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11848 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1849 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21850 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31851 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1852 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41853 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51854 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1855 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = contract G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1856 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = contract G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1857 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1858 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1859 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1860 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11861 ;1862 ; GFX10-LABEL: name: test_4xhalf_add_mul_contract1863 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51864 ; GFX10-NEXT: {{ $}}1865 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01866 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11867 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1868 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21869 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31870 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1871 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41872 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51873 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1874 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = contract G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1875 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = contract G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1876 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1877 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1878 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1879 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11880 ;1881 ; GFX10-DENORM-LABEL: name: test_4xhalf_add_mul_contract1882 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51883 ; GFX10-DENORM-NEXT: {{ $}}1884 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01885 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11886 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>)1887 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21888 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31889 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>)1890 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41891 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51892 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>)1893 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s16>) = contract G_FMUL [[CONCAT_VECTORS]], [[CONCAT_VECTORS1]]1894 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s16>) = contract G_FADD [[FMUL]], [[CONCAT_VECTORS2]]1895 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[FADD]](<4 x s16>)1896 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](<2 x s16>)1897 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](<2 x s16>)1898 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11899 %4:_(<2 x s16>) = COPY $vgpr01900 %5:_(<2 x s16>) = COPY $vgpr11901 %0:_(<4 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>)1902 %6:_(<2 x s16>) = COPY $vgpr21903 %7:_(<2 x s16>) = COPY $vgpr31904 %1:_(<4 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>)1905 %8:_(<2 x s16>) = COPY $vgpr41906 %9:_(<2 x s16>) = COPY $vgpr51907 %2:_(<4 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>)1908 %10:_(<4 x s16>) = contract G_FMUL %0, %11909 %11:_(<4 x s16>) = contract G_FADD %10, %21910 %13:_(<2 x s16>), %14:_(<2 x s16>) = G_UNMERGE_VALUES %11(<4 x s16>)1911 $vgpr0 = COPY %13(<2 x s16>)1912 $vgpr1 = COPY %14(<2 x s16>)1913 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11914...1915 1916 1917---1918name: test_3xhalf_add_mul_rhs1919body: |1920 bb.1.entry:1921 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51922 1923 ; GFX9-LABEL: name: test_3xhalf_add_mul_rhs1924 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51925 ; GFX9-NEXT: {{ $}}1926 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01927 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11928 ; GFX9-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1929 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1930 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1931 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21932 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31933 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1934 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1935 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41936 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51937 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1938 ; GFX9-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1939 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = G_FMUL [[UV]], [[UV2]]1940 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = G_FADD [[UV4]], [[FMUL]]1941 ; GFX9-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1942 ; GFX9-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1943 ; 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>)1944 ; GFX9-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1945 ; GFX9-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1946 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11947 ;1948 ; GFX9-DENORM-LABEL: name: test_3xhalf_add_mul_rhs1949 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51950 ; GFX9-DENORM-NEXT: {{ $}}1951 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01952 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11953 ; GFX9-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1954 ; 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>)1955 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1956 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21957 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31958 ; 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>)1959 ; GFX9-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1960 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41961 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51962 ; 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>)1963 ; GFX9-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1964 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = G_FMUL [[UV]], [[UV2]]1965 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = G_FADD [[UV4]], [[FMUL]]1966 ; GFX9-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1967 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1968 ; 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>)1969 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1970 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1971 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11972 ;1973 ; GFX10-LABEL: name: test_3xhalf_add_mul_rhs1974 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr51975 ; GFX10-NEXT: {{ $}}1976 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr01977 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr11978 ; GFX10-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF1979 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)1980 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)1981 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr21982 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr31983 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)1984 ; GFX10-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)1985 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr41986 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr51987 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)1988 ; GFX10-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)1989 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = G_FMUL [[UV]], [[UV2]]1990 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = G_FADD [[UV4]], [[FMUL]]1991 ; GFX10-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF1992 ; GFX10-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)1993 ; 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>)1994 ; GFX10-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)1995 ; GFX10-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)1996 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr11997 ;1998 ; GFX10-DENORM-LABEL: name: test_3xhalf_add_mul_rhs1999 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr52000 ; GFX10-DENORM-NEXT: {{ $}}2001 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr02002 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr12003 ; GFX10-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF2004 ; 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>)2005 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)2006 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr22007 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr32008 ; 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>)2009 ; GFX10-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)2010 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr42011 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr52012 ; 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>)2013 ; GFX10-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)2014 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = G_FMUL [[UV]], [[UV2]]2015 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = G_FADD [[UV4]], [[FMUL]]2016 ; GFX10-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF2017 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)2018 ; 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>)2019 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)2020 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)2021 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12022 %4:_(<2 x s16>) = COPY $vgpr02023 %5:_(<2 x s16>) = COPY $vgpr12024 %10:_(<2 x s16>) = G_IMPLICIT_DEF2025 %11:_(<6 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>), %10(<2 x s16>)2026 %0:_(<3 x s16>), %12:_(<3 x s16>) = G_UNMERGE_VALUES %11(<6 x s16>)2027 %6:_(<2 x s16>) = COPY $vgpr22028 %7:_(<2 x s16>) = COPY $vgpr32029 %13:_(<6 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>), %10(<2 x s16>)2030 %1:_(<3 x s16>), %14:_(<3 x s16>) = G_UNMERGE_VALUES %13(<6 x s16>)2031 %8:_(<2 x s16>) = COPY $vgpr42032 %9:_(<2 x s16>) = COPY $vgpr52033 %15:_(<6 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>), %10(<2 x s16>)2034 %2:_(<3 x s16>), %16:_(<3 x s16>) = G_UNMERGE_VALUES %15(<6 x s16>)2035 %17:_(<3 x s16>) = G_FMUL %0, %12036 %18:_(<3 x s16>) = G_FADD %2, %172037 %22:_(<3 x s16>) = G_IMPLICIT_DEF2038 %23:_(<6 x s16>) = G_CONCAT_VECTORS %18(<3 x s16>), %22(<3 x s16>)2039 %20:_(<2 x s16>), %21:_(<2 x s16>), %24:_(<2 x s16>) = G_UNMERGE_VALUES %23(<6 x s16>)2040 $vgpr0 = COPY %20(<2 x s16>)2041 $vgpr1 = COPY %21(<2 x s16>)2042 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12043...2044 2045---2046name: test_3xhalf_add_mul_rhs_contract2047body: |2048 bb.1.entry:2049 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr52050 2051 ; GFX9-LABEL: name: test_3xhalf_add_mul_rhs_contract2052 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr52053 ; GFX9-NEXT: {{ $}}2054 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr02055 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr12056 ; GFX9-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF2057 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)2058 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)2059 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr22060 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr32061 ; GFX9-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)2062 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)2063 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr42064 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr52065 ; GFX9-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)2066 ; GFX9-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)2067 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = contract G_FMUL [[UV]], [[UV2]]2068 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = contract G_FADD [[UV4]], [[FMUL]]2069 ; GFX9-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF2070 ; GFX9-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)2071 ; 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>)2072 ; GFX9-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)2073 ; GFX9-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)2074 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12075 ;2076 ; GFX9-DENORM-LABEL: name: test_3xhalf_add_mul_rhs_contract2077 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr52078 ; GFX9-DENORM-NEXT: {{ $}}2079 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr02080 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr12081 ; GFX9-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF2082 ; 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>)2083 ; GFX9-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)2084 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr22085 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr32086 ; 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>)2087 ; GFX9-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)2088 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr42089 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr52090 ; 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>)2091 ; GFX9-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)2092 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = contract G_FMUL [[UV]], [[UV2]]2093 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = contract G_FADD [[UV4]], [[FMUL]]2094 ; GFX9-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF2095 ; GFX9-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)2096 ; 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>)2097 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)2098 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)2099 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12100 ;2101 ; GFX10-LABEL: name: test_3xhalf_add_mul_rhs_contract2102 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr52103 ; GFX10-NEXT: {{ $}}2104 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr02105 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr12106 ; GFX10-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF2107 ; GFX10-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY]](<2 x s16>), [[COPY1]](<2 x s16>), [[DEF]](<2 x s16>)2108 ; GFX10-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)2109 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr22110 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr32111 ; GFX10-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY2]](<2 x s16>), [[COPY3]](<2 x s16>), [[DEF]](<2 x s16>)2112 ; GFX10-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)2113 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr42114 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr52115 ; GFX10-NEXT: [[CONCAT_VECTORS2:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[COPY4]](<2 x s16>), [[COPY5]](<2 x s16>), [[DEF]](<2 x s16>)2116 ; GFX10-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)2117 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = contract G_FMUL [[UV]], [[UV2]]2118 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = contract G_FADD [[UV4]], [[FMUL]]2119 ; GFX10-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF2120 ; GFX10-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)2121 ; 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>)2122 ; GFX10-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)2123 ; GFX10-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)2124 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12125 ;2126 ; GFX10-DENORM-LABEL: name: test_3xhalf_add_mul_rhs_contract2127 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr52128 ; GFX10-DENORM-NEXT: {{ $}}2129 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr02130 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr12131 ; GFX10-DENORM-NEXT: [[DEF:%[0-9]+]]:_(<2 x s16>) = G_IMPLICIT_DEF2132 ; 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>)2133 ; GFX10-DENORM-NEXT: [[UV:%[0-9]+]]:_(<3 x s16>), [[UV1:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<6 x s16>)2134 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr22135 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr32136 ; 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>)2137 ; GFX10-DENORM-NEXT: [[UV2:%[0-9]+]]:_(<3 x s16>), [[UV3:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS1]](<6 x s16>)2138 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr42139 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr52140 ; 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>)2141 ; GFX10-DENORM-NEXT: [[UV4:%[0-9]+]]:_(<3 x s16>), [[UV5:%[0-9]+]]:_(<3 x s16>) = G_UNMERGE_VALUES [[CONCAT_VECTORS2]](<6 x s16>)2142 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s16>) = contract G_FMUL [[UV]], [[UV2]]2143 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s16>) = contract G_FADD [[UV4]], [[FMUL]]2144 ; GFX10-DENORM-NEXT: [[DEF1:%[0-9]+]]:_(<3 x s16>) = G_IMPLICIT_DEF2145 ; GFX10-DENORM-NEXT: [[CONCAT_VECTORS3:%[0-9]+]]:_(<6 x s16>) = G_CONCAT_VECTORS [[FADD]](<3 x s16>), [[DEF1]](<3 x s16>)2146 ; 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>)2147 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV6]](<2 x s16>)2148 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV7]](<2 x s16>)2149 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12150 %4:_(<2 x s16>) = COPY $vgpr02151 %5:_(<2 x s16>) = COPY $vgpr12152 %10:_(<2 x s16>) = G_IMPLICIT_DEF2153 %11:_(<6 x s16>) = G_CONCAT_VECTORS %4(<2 x s16>), %5(<2 x s16>), %10(<2 x s16>)2154 %0:_(<3 x s16>), %12:_(<3 x s16>) = G_UNMERGE_VALUES %11(<6 x s16>)2155 %6:_(<2 x s16>) = COPY $vgpr22156 %7:_(<2 x s16>) = COPY $vgpr32157 %13:_(<6 x s16>) = G_CONCAT_VECTORS %6(<2 x s16>), %7(<2 x s16>), %10(<2 x s16>)2158 %1:_(<3 x s16>), %14:_(<3 x s16>) = G_UNMERGE_VALUES %13(<6 x s16>)2159 %8:_(<2 x s16>) = COPY $vgpr42160 %9:_(<2 x s16>) = COPY $vgpr52161 %15:_(<6 x s16>) = G_CONCAT_VECTORS %8(<2 x s16>), %9(<2 x s16>), %10(<2 x s16>)2162 %2:_(<3 x s16>), %16:_(<3 x s16>) = G_UNMERGE_VALUES %15(<6 x s16>)2163 %17:_(<3 x s16>) = contract G_FMUL %0, %12164 %18:_(<3 x s16>) = contract G_FADD %2, %172165 %22:_(<3 x s16>) = G_IMPLICIT_DEF2166 %23:_(<6 x s16>) = G_CONCAT_VECTORS %18(<3 x s16>), %22(<3 x s16>)2167 %20:_(<2 x s16>), %21:_(<2 x s16>), %24:_(<2 x s16>) = G_UNMERGE_VALUES %23(<6 x s16>)2168 $vgpr0 = COPY %20(<2 x s16>)2169 $vgpr1 = COPY %21(<2 x s16>)2170 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr12171...2172 2173---2174name: test_4xdouble_add_mul2175body: |2176 bb.1.entry:2177 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232178 2179 ; GFX9-LABEL: name: test_4xdouble_add_mul2180 ; 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, $vgpr232181 ; GFX9-NEXT: {{ $}}2182 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02183 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12184 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22185 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32186 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42187 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52188 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62189 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72190 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2191 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2192 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2193 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2194 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2195 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82196 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92197 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102198 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112199 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122200 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132201 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142202 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152203 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2204 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2205 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2206 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2207 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2208 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162209 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172210 ; GFX9-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182211 ; GFX9-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192212 ; GFX9-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202213 ; GFX9-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212214 ; GFX9-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222215 ; GFX9-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232216 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2217 ; GFX9-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2218 ; GFX9-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2219 ; GFX9-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2220 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2221 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2222 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]2223 ; 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>)2224 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2225 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2226 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2227 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2228 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2229 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)2230 ; GFX9-NEXT: $vgpr6 = COPY [[UV6]](s32)2231 ; GFX9-NEXT: $vgpr7 = COPY [[UV7]](s32)2232 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72233 ;2234 ; GFX9-DENORM-LABEL: name: test_4xdouble_add_mul2235 ; 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, $vgpr232236 ; GFX9-DENORM-NEXT: {{ $}}2237 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02238 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12239 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22240 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32241 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42242 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52243 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62244 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72245 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2246 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2247 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2248 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2249 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2250 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82251 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92252 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102253 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112254 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122255 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132256 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142257 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152258 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2259 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2260 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2261 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2262 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2263 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162264 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172265 ; GFX9-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182266 ; GFX9-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192267 ; GFX9-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202268 ; GFX9-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212269 ; GFX9-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222270 ; GFX9-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232271 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2272 ; GFX9-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2273 ; GFX9-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2274 ; GFX9-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2275 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2276 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2277 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]2278 ; 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>)2279 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2280 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2281 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2282 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2283 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2284 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2285 ; GFX9-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2286 ; GFX9-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2287 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72288 ;2289 ; GFX10-LABEL: name: test_4xdouble_add_mul2290 ; 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, $vgpr232291 ; GFX10-NEXT: {{ $}}2292 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02293 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12294 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22295 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32296 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42297 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52298 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62299 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72300 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2301 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2302 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2303 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2304 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2305 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82306 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92307 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102308 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112309 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122310 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132311 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142312 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152313 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2314 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2315 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2316 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2317 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2318 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162319 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172320 ; GFX10-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182321 ; GFX10-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192322 ; GFX10-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202323 ; GFX10-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212324 ; GFX10-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222325 ; GFX10-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232326 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2327 ; GFX10-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2328 ; GFX10-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2329 ; GFX10-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2330 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2331 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2332 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]2333 ; 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>)2334 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2335 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2336 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2337 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2338 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2339 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2340 ; GFX10-NEXT: $vgpr6 = COPY [[UV6]](s32)2341 ; GFX10-NEXT: $vgpr7 = COPY [[UV7]](s32)2342 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72343 ;2344 ; GFX10-DENORM-LABEL: name: test_4xdouble_add_mul2345 ; 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, $vgpr232346 ; GFX10-DENORM-NEXT: {{ $}}2347 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02348 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12349 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22350 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32351 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42352 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52353 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62354 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72355 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2356 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2357 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2358 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2359 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2360 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82361 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92362 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102363 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112364 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122365 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132366 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142367 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152368 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2369 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2370 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2371 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2372 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2373 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162374 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172375 ; GFX10-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182376 ; GFX10-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192377 ; GFX10-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202378 ; GFX10-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212379 ; GFX10-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222380 ; GFX10-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232381 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2382 ; GFX10-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2383 ; GFX10-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2384 ; GFX10-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2385 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2386 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2387 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = G_FADD [[FMUL]], [[BUILD_VECTOR2]]2388 ; 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>)2389 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2390 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2391 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2392 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2393 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2394 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2395 ; GFX10-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2396 ; GFX10-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2397 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72398 %4:_(s32) = COPY $vgpr02399 %5:_(s32) = COPY $vgpr12400 %6:_(s32) = COPY $vgpr22401 %7:_(s32) = COPY $vgpr32402 %8:_(s32) = COPY $vgpr42403 %9:_(s32) = COPY $vgpr52404 %10:_(s32) = COPY $vgpr62405 %11:_(s32) = COPY $vgpr72406 %28:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2407 %29:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2408 %30:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2409 %31:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2410 %0:_(<4 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64), %31(s64)2411 %12:_(s32) = COPY $vgpr82412 %13:_(s32) = COPY $vgpr92413 %14:_(s32) = COPY $vgpr102414 %15:_(s32) = COPY $vgpr112415 %16:_(s32) = COPY $vgpr122416 %17:_(s32) = COPY $vgpr132417 %18:_(s32) = COPY $vgpr142418 %19:_(s32) = COPY $vgpr152419 %32:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2420 %33:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2421 %34:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2422 %35:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2423 %1:_(<4 x s64>) = G_BUILD_VECTOR %32(s64), %33(s64), %34(s64), %35(s64)2424 %20:_(s32) = COPY $vgpr162425 %21:_(s32) = COPY $vgpr172426 %22:_(s32) = COPY $vgpr182427 %23:_(s32) = COPY $vgpr192428 %24:_(s32) = COPY $vgpr202429 %25:_(s32) = COPY $vgpr212430 %26:_(s32) = COPY $vgpr222431 %27:_(s32) = COPY $vgpr232432 %36:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2433 %37:_(s64) = G_MERGE_VALUES %22(s32), %23(s32)2434 %38:_(s64) = G_MERGE_VALUES %24(s32), %25(s32)2435 %39:_(s64) = G_MERGE_VALUES %26(s32), %27(s32)2436 %2:_(<4 x s64>) = G_BUILD_VECTOR %36(s64), %37(s64), %38(s64), %39(s64)2437 %40:_(<4 x s64>) = G_FMUL %0, %12438 %41:_(<4 x s64>) = G_FADD %40, %22439 %43:_(s32), %44:_(s32), %45:_(s32), %46:_(s32), %47:_(s32), %48:_(s32), %49:_(s32), %50:_(s32) = G_UNMERGE_VALUES %41(<4 x s64>)2440 $vgpr0 = COPY %43(s32)2441 $vgpr1 = COPY %44(s32)2442 $vgpr2 = COPY %45(s32)2443 $vgpr3 = COPY %46(s32)2444 $vgpr4 = COPY %47(s32)2445 $vgpr5 = COPY %48(s32)2446 $vgpr6 = COPY %49(s32)2447 $vgpr7 = COPY %50(s32)2448 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72449...2450 2451---2452name: test_4xdouble_add_mul_contract2453body: |2454 bb.1.entry:2455 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr17, $vgpr18, $vgpr19, $vgpr20, $vgpr21, $vgpr22, $vgpr232456 2457 ; GFX9-LABEL: name: test_4xdouble_add_mul_contract2458 ; 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, $vgpr232459 ; GFX9-NEXT: {{ $}}2460 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02461 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12462 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22463 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32464 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42465 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52466 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62467 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72468 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2469 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2470 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2471 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2472 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2473 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82474 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92475 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102476 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112477 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122478 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132479 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142480 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152481 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2482 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2483 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2484 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2485 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2486 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162487 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172488 ; GFX9-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182489 ; GFX9-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192490 ; GFX9-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202491 ; GFX9-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212492 ; GFX9-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222493 ; GFX9-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232494 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2495 ; GFX9-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2496 ; GFX9-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2497 ; GFX9-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2498 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2499 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2500 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]2501 ; 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>)2502 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2503 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2504 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2505 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2506 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2507 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)2508 ; GFX9-NEXT: $vgpr6 = COPY [[UV6]](s32)2509 ; GFX9-NEXT: $vgpr7 = COPY [[UV7]](s32)2510 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72511 ;2512 ; GFX9-DENORM-LABEL: name: test_4xdouble_add_mul_contract2513 ; 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, $vgpr232514 ; GFX9-DENORM-NEXT: {{ $}}2515 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02516 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12517 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22518 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32519 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42520 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52521 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62522 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72523 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2524 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2525 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2526 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2527 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2528 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82529 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92530 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102531 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112532 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122533 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132534 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142535 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152536 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2537 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2538 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2539 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2540 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2541 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162542 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172543 ; GFX9-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182544 ; GFX9-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192545 ; GFX9-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202546 ; GFX9-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212547 ; GFX9-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222548 ; GFX9-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232549 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2550 ; GFX9-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2551 ; GFX9-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2552 ; GFX9-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2553 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2554 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2555 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]2556 ; 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>)2557 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2558 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2559 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2560 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2561 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2562 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2563 ; GFX9-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2564 ; GFX9-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2565 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72566 ;2567 ; GFX10-LABEL: name: test_4xdouble_add_mul_contract2568 ; 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, $vgpr232569 ; GFX10-NEXT: {{ $}}2570 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02571 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12572 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22573 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32574 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42575 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52576 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62577 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72578 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2579 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2580 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2581 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2582 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2583 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82584 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92585 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102586 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112587 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122588 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132589 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142590 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152591 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2592 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2593 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2594 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2595 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2596 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162597 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172598 ; GFX10-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182599 ; GFX10-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192600 ; GFX10-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202601 ; GFX10-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212602 ; GFX10-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222603 ; GFX10-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232604 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2605 ; GFX10-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2606 ; GFX10-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2607 ; GFX10-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2608 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2609 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2610 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]2611 ; 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>)2612 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2613 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2614 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2615 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2616 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2617 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2618 ; GFX10-NEXT: $vgpr6 = COPY [[UV6]](s32)2619 ; GFX10-NEXT: $vgpr7 = COPY [[UV7]](s32)2620 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72621 ;2622 ; GFX10-DENORM-LABEL: name: test_4xdouble_add_mul_contract2623 ; 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, $vgpr232624 ; GFX10-DENORM-NEXT: {{ $}}2625 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02626 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12627 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22628 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32629 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42630 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52631 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62632 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72633 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2634 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2635 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2636 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2637 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64), [[MV3]](s64)2638 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82639 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92640 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102641 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112642 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122643 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132644 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142645 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152646 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2647 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2648 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2649 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2650 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV4]](s64), [[MV5]](s64), [[MV6]](s64), [[MV7]](s64)2651 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162652 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172653 ; GFX10-DENORM-NEXT: [[COPY18:%[0-9]+]]:_(s32) = COPY $vgpr182654 ; GFX10-DENORM-NEXT: [[COPY19:%[0-9]+]]:_(s32) = COPY $vgpr192655 ; GFX10-DENORM-NEXT: [[COPY20:%[0-9]+]]:_(s32) = COPY $vgpr202656 ; GFX10-DENORM-NEXT: [[COPY21:%[0-9]+]]:_(s32) = COPY $vgpr212657 ; GFX10-DENORM-NEXT: [[COPY22:%[0-9]+]]:_(s32) = COPY $vgpr222658 ; GFX10-DENORM-NEXT: [[COPY23:%[0-9]+]]:_(s32) = COPY $vgpr232659 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2660 ; GFX10-DENORM-NEXT: [[MV9:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY18]](s32), [[COPY19]](s32)2661 ; GFX10-DENORM-NEXT: [[MV10:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY20]](s32), [[COPY21]](s32)2662 ; GFX10-DENORM-NEXT: [[MV11:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY22]](s32), [[COPY23]](s32)2663 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s64>) = G_BUILD_VECTOR [[MV8]](s64), [[MV9]](s64), [[MV10]](s64), [[MV11]](s64)2664 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<4 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2665 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<4 x s64>) = contract G_FADD [[FMUL]], [[BUILD_VECTOR2]]2666 ; 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>)2667 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2668 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2669 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2670 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2671 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2672 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2673 ; GFX10-DENORM-NEXT: $vgpr6 = COPY [[UV6]](s32)2674 ; GFX10-DENORM-NEXT: $vgpr7 = COPY [[UV7]](s32)2675 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72676 %4:_(s32) = COPY $vgpr02677 %5:_(s32) = COPY $vgpr12678 %6:_(s32) = COPY $vgpr22679 %7:_(s32) = COPY $vgpr32680 %8:_(s32) = COPY $vgpr42681 %9:_(s32) = COPY $vgpr52682 %10:_(s32) = COPY $vgpr62683 %11:_(s32) = COPY $vgpr72684 %28:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2685 %29:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2686 %30:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2687 %31:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2688 %0:_(<4 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64), %31(s64)2689 %12:_(s32) = COPY $vgpr82690 %13:_(s32) = COPY $vgpr92691 %14:_(s32) = COPY $vgpr102692 %15:_(s32) = COPY $vgpr112693 %16:_(s32) = COPY $vgpr122694 %17:_(s32) = COPY $vgpr132695 %18:_(s32) = COPY $vgpr142696 %19:_(s32) = COPY $vgpr152697 %32:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2698 %33:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2699 %34:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2700 %35:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2701 %1:_(<4 x s64>) = G_BUILD_VECTOR %32(s64), %33(s64), %34(s64), %35(s64)2702 %20:_(s32) = COPY $vgpr162703 %21:_(s32) = COPY $vgpr172704 %22:_(s32) = COPY $vgpr182705 %23:_(s32) = COPY $vgpr192706 %24:_(s32) = COPY $vgpr202707 %25:_(s32) = COPY $vgpr212708 %26:_(s32) = COPY $vgpr222709 %27:_(s32) = COPY $vgpr232710 %36:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2711 %37:_(s64) = G_MERGE_VALUES %22(s32), %23(s32)2712 %38:_(s64) = G_MERGE_VALUES %24(s32), %25(s32)2713 %39:_(s64) = G_MERGE_VALUES %26(s32), %27(s32)2714 %2:_(<4 x s64>) = G_BUILD_VECTOR %36(s64), %37(s64), %38(s64), %39(s64)2715 %40:_(<4 x s64>) = contract G_FMUL %0, %12716 %41:_(<4 x s64>) = contract G_FADD %40, %22717 %43:_(s32), %44:_(s32), %45:_(s32), %46:_(s32), %47:_(s32), %48:_(s32), %49:_(s32), %50:_(s32) = G_UNMERGE_VALUES %41(<4 x s64>)2718 $vgpr0 = COPY %43(s32)2719 $vgpr1 = COPY %44(s32)2720 $vgpr2 = COPY %45(s32)2721 $vgpr3 = COPY %46(s32)2722 $vgpr4 = COPY %47(s32)2723 $vgpr5 = COPY %48(s32)2724 $vgpr6 = COPY %49(s32)2725 $vgpr7 = COPY %50(s32)2726 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr5, implicit $vgpr6, implicit $vgpr72727...2728 2729---2730name: test_3xdouble_add_mul_rhs2731body: |2732 bb.1.entry:2733 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172734 2735 ; GFX9-LABEL: name: test_3xdouble_add_mul_rhs2736 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172737 ; GFX9-NEXT: {{ $}}2738 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02739 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12740 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22741 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32742 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42743 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52744 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2745 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2746 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2747 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2748 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62749 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72750 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82751 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92752 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102753 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112754 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2755 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2756 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2757 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2758 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122759 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132760 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142761 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152762 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162763 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172764 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2765 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2766 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2767 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2768 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2769 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]2770 ; 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>)2771 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2772 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2773 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2774 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2775 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2776 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)2777 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52778 ;2779 ; GFX9-DENORM-LABEL: name: test_3xdouble_add_mul_rhs2780 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172781 ; GFX9-DENORM-NEXT: {{ $}}2782 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02783 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12784 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22785 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32786 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42787 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52788 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2789 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2790 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2791 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2792 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62793 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72794 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82795 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92796 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102797 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112798 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2799 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2800 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2801 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2802 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122803 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132804 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142805 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152806 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162807 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172808 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2809 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2810 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2811 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2812 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2813 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]2814 ; 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>)2815 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2816 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2817 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2818 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2819 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2820 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2821 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52822 ;2823 ; GFX10-LABEL: name: test_3xdouble_add_mul_rhs2824 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172825 ; GFX10-NEXT: {{ $}}2826 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02827 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12828 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22829 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32830 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42831 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52832 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2833 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2834 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2835 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2836 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62837 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72838 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82839 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92840 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102841 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112842 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2843 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2844 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2845 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2846 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122847 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132848 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142849 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152850 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162851 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172852 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2853 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2854 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2855 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2856 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2857 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]2858 ; 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>)2859 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)2860 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)2861 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)2862 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)2863 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)2864 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)2865 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52866 ;2867 ; GFX10-DENORM-LABEL: name: test_3xdouble_add_mul_rhs2868 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172869 ; GFX10-DENORM-NEXT: {{ $}}2870 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02871 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12872 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22873 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32874 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42875 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52876 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2877 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2878 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2879 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2880 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62881 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72882 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82883 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92884 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102885 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112886 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2887 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2888 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2889 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2890 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122891 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132892 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142893 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152894 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162895 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172896 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2897 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2898 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2899 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2900 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2901 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = G_FADD [[BUILD_VECTOR2]], [[FMUL]]2902 ; 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>)2903 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)2904 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)2905 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)2906 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)2907 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)2908 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)2909 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52910 %4:_(s32) = COPY $vgpr02911 %5:_(s32) = COPY $vgpr12912 %6:_(s32) = COPY $vgpr22913 %7:_(s32) = COPY $vgpr32914 %8:_(s32) = COPY $vgpr42915 %9:_(s32) = COPY $vgpr52916 %22:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)2917 %23:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)2918 %24:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)2919 %0:_(<3 x s64>) = G_BUILD_VECTOR %22(s64), %23(s64), %24(s64)2920 %10:_(s32) = COPY $vgpr62921 %11:_(s32) = COPY $vgpr72922 %12:_(s32) = COPY $vgpr82923 %13:_(s32) = COPY $vgpr92924 %14:_(s32) = COPY $vgpr102925 %15:_(s32) = COPY $vgpr112926 %25:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)2927 %26:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)2928 %27:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)2929 %1:_(<3 x s64>) = G_BUILD_VECTOR %25(s64), %26(s64), %27(s64)2930 %16:_(s32) = COPY $vgpr122931 %17:_(s32) = COPY $vgpr132932 %18:_(s32) = COPY $vgpr142933 %19:_(s32) = COPY $vgpr152934 %20:_(s32) = COPY $vgpr162935 %21:_(s32) = COPY $vgpr172936 %28:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)2937 %29:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)2938 %30:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)2939 %2:_(<3 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64)2940 %31:_(<3 x s64>) = G_FMUL %0, %12941 %32:_(<3 x s64>) = G_FADD %2, %312942 %34:_(s32), %35:_(s32), %36:_(s32), %37:_(s32), %38:_(s32), %39:_(s32) = G_UNMERGE_VALUES %32(<3 x s64>)2943 $vgpr0 = COPY %34(s32)2944 $vgpr1 = COPY %35(s32)2945 $vgpr2 = COPY %36(s32)2946 $vgpr3 = COPY %37(s32)2947 $vgpr4 = COPY %38(s32)2948 $vgpr5 = COPY %39(s32)2949 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr52950...2951 2952---2953name: test_3xdouble_add_mul_rhs_contract2954body: |2955 bb.1.entry:2956 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172957 2958 ; GFX9-LABEL: name: test_3xdouble_add_mul_rhs_contract2959 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr172960 ; GFX9-NEXT: {{ $}}2961 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr02962 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr12963 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr22964 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr32965 ; GFX9-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr42966 ; GFX9-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr52967 ; GFX9-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)2968 ; GFX9-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)2969 ; GFX9-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)2970 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)2971 ; GFX9-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr62972 ; GFX9-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr72973 ; GFX9-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr82974 ; GFX9-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr92975 ; GFX9-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr102976 ; GFX9-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr112977 ; GFX9-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)2978 ; GFX9-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)2979 ; GFX9-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)2980 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)2981 ; GFX9-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr122982 ; GFX9-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr132983 ; GFX9-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr142984 ; GFX9-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr152985 ; GFX9-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr162986 ; GFX9-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr172987 ; GFX9-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)2988 ; GFX9-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)2989 ; GFX9-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)2990 ; GFX9-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)2991 ; GFX9-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]2992 ; GFX9-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]2993 ; 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>)2994 ; GFX9-NEXT: $vgpr0 = COPY [[UV]](s32)2995 ; GFX9-NEXT: $vgpr1 = COPY [[UV1]](s32)2996 ; GFX9-NEXT: $vgpr2 = COPY [[UV2]](s32)2997 ; GFX9-NEXT: $vgpr3 = COPY [[UV3]](s32)2998 ; GFX9-NEXT: $vgpr4 = COPY [[UV4]](s32)2999 ; GFX9-NEXT: $vgpr5 = COPY [[UV5]](s32)3000 ; GFX9-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr53001 ;3002 ; GFX9-DENORM-LABEL: name: test_3xdouble_add_mul_rhs_contract3003 ; GFX9-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr173004 ; GFX9-DENORM-NEXT: {{ $}}3005 ; GFX9-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr03006 ; GFX9-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr13007 ; GFX9-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr23008 ; GFX9-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr33009 ; GFX9-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr43010 ; GFX9-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr53011 ; GFX9-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)3012 ; GFX9-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)3013 ; GFX9-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)3014 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)3015 ; GFX9-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr63016 ; GFX9-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr73017 ; GFX9-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr83018 ; GFX9-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr93019 ; GFX9-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr103020 ; GFX9-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr113021 ; GFX9-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)3022 ; GFX9-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)3023 ; GFX9-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)3024 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)3025 ; GFX9-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr123026 ; GFX9-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr133027 ; GFX9-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr143028 ; GFX9-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr153029 ; GFX9-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr163030 ; GFX9-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr173031 ; GFX9-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)3032 ; GFX9-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)3033 ; GFX9-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)3034 ; GFX9-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)3035 ; GFX9-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]3036 ; GFX9-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]3037 ; 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>)3038 ; GFX9-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)3039 ; GFX9-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)3040 ; GFX9-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)3041 ; GFX9-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)3042 ; GFX9-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)3043 ; GFX9-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)3044 ; GFX9-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr53045 ;3046 ; GFX10-LABEL: name: test_3xdouble_add_mul_rhs_contract3047 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr173048 ; GFX10-NEXT: {{ $}}3049 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr03050 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr13051 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr23052 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr33053 ; GFX10-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr43054 ; GFX10-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr53055 ; GFX10-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)3056 ; GFX10-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)3057 ; GFX10-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)3058 ; GFX10-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)3059 ; GFX10-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr63060 ; GFX10-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr73061 ; GFX10-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr83062 ; GFX10-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr93063 ; GFX10-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr103064 ; GFX10-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr113065 ; GFX10-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)3066 ; GFX10-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)3067 ; GFX10-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)3068 ; GFX10-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)3069 ; GFX10-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr123070 ; GFX10-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr133071 ; GFX10-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr143072 ; GFX10-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr153073 ; GFX10-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr163074 ; GFX10-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr173075 ; GFX10-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)3076 ; GFX10-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)3077 ; GFX10-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)3078 ; GFX10-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)3079 ; GFX10-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]3080 ; GFX10-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]3081 ; 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>)3082 ; GFX10-NEXT: $vgpr0 = COPY [[UV]](s32)3083 ; GFX10-NEXT: $vgpr1 = COPY [[UV1]](s32)3084 ; GFX10-NEXT: $vgpr2 = COPY [[UV2]](s32)3085 ; GFX10-NEXT: $vgpr3 = COPY [[UV3]](s32)3086 ; GFX10-NEXT: $vgpr4 = COPY [[UV4]](s32)3087 ; GFX10-NEXT: $vgpr5 = COPY [[UV5]](s32)3088 ; GFX10-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr53089 ;3090 ; GFX10-DENORM-LABEL: name: test_3xdouble_add_mul_rhs_contract3091 ; GFX10-DENORM: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15, $vgpr16, $vgpr173092 ; GFX10-DENORM-NEXT: {{ $}}3093 ; GFX10-DENORM-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr03094 ; GFX10-DENORM-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr13095 ; GFX10-DENORM-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr23096 ; GFX10-DENORM-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr33097 ; GFX10-DENORM-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr43098 ; GFX10-DENORM-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr53099 ; GFX10-DENORM-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)3100 ; GFX10-DENORM-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)3101 ; GFX10-DENORM-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)3102 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV]](s64), [[MV1]](s64), [[MV2]](s64)3103 ; GFX10-DENORM-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr63104 ; GFX10-DENORM-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr73105 ; GFX10-DENORM-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr83106 ; GFX10-DENORM-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr93107 ; GFX10-DENORM-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr103108 ; GFX10-DENORM-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr113109 ; GFX10-DENORM-NEXT: [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)3110 ; GFX10-DENORM-NEXT: [[MV4:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY8]](s32), [[COPY9]](s32)3111 ; GFX10-DENORM-NEXT: [[MV5:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY10]](s32), [[COPY11]](s32)3112 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV3]](s64), [[MV4]](s64), [[MV5]](s64)3113 ; GFX10-DENORM-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr123114 ; GFX10-DENORM-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr133115 ; GFX10-DENORM-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr143116 ; GFX10-DENORM-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr153117 ; GFX10-DENORM-NEXT: [[COPY16:%[0-9]+]]:_(s32) = COPY $vgpr163118 ; GFX10-DENORM-NEXT: [[COPY17:%[0-9]+]]:_(s32) = COPY $vgpr173119 ; GFX10-DENORM-NEXT: [[MV6:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY12]](s32), [[COPY13]](s32)3120 ; GFX10-DENORM-NEXT: [[MV7:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY14]](s32), [[COPY15]](s32)3121 ; GFX10-DENORM-NEXT: [[MV8:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY16]](s32), [[COPY17]](s32)3122 ; GFX10-DENORM-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s64>) = G_BUILD_VECTOR [[MV6]](s64), [[MV7]](s64), [[MV8]](s64)3123 ; GFX10-DENORM-NEXT: [[FMUL:%[0-9]+]]:_(<3 x s64>) = contract G_FMUL [[BUILD_VECTOR]], [[BUILD_VECTOR1]]3124 ; GFX10-DENORM-NEXT: [[FADD:%[0-9]+]]:_(<3 x s64>) = contract G_FADD [[BUILD_VECTOR2]], [[FMUL]]3125 ; 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>)3126 ; GFX10-DENORM-NEXT: $vgpr0 = COPY [[UV]](s32)3127 ; GFX10-DENORM-NEXT: $vgpr1 = COPY [[UV1]](s32)3128 ; GFX10-DENORM-NEXT: $vgpr2 = COPY [[UV2]](s32)3129 ; GFX10-DENORM-NEXT: $vgpr3 = COPY [[UV3]](s32)3130 ; GFX10-DENORM-NEXT: $vgpr4 = COPY [[UV4]](s32)3131 ; GFX10-DENORM-NEXT: $vgpr5 = COPY [[UV5]](s32)3132 ; GFX10-DENORM-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr53133 %4:_(s32) = COPY $vgpr03134 %5:_(s32) = COPY $vgpr13135 %6:_(s32) = COPY $vgpr23136 %7:_(s32) = COPY $vgpr33137 %8:_(s32) = COPY $vgpr43138 %9:_(s32) = COPY $vgpr53139 %22:_(s64) = G_MERGE_VALUES %4(s32), %5(s32)3140 %23:_(s64) = G_MERGE_VALUES %6(s32), %7(s32)3141 %24:_(s64) = G_MERGE_VALUES %8(s32), %9(s32)3142 %0:_(<3 x s64>) = G_BUILD_VECTOR %22(s64), %23(s64), %24(s64)3143 %10:_(s32) = COPY $vgpr63144 %11:_(s32) = COPY $vgpr73145 %12:_(s32) = COPY $vgpr83146 %13:_(s32) = COPY $vgpr93147 %14:_(s32) = COPY $vgpr103148 %15:_(s32) = COPY $vgpr113149 %25:_(s64) = G_MERGE_VALUES %10(s32), %11(s32)3150 %26:_(s64) = G_MERGE_VALUES %12(s32), %13(s32)3151 %27:_(s64) = G_MERGE_VALUES %14(s32), %15(s32)3152 %1:_(<3 x s64>) = G_BUILD_VECTOR %25(s64), %26(s64), %27(s64)3153 %16:_(s32) = COPY $vgpr123154 %17:_(s32) = COPY $vgpr133155 %18:_(s32) = COPY $vgpr143156 %19:_(s32) = COPY $vgpr153157 %20:_(s32) = COPY $vgpr163158 %21:_(s32) = COPY $vgpr173159 %28:_(s64) = G_MERGE_VALUES %16(s32), %17(s32)3160 %29:_(s64) = G_MERGE_VALUES %18(s32), %19(s32)3161 %30:_(s64) = G_MERGE_VALUES %20(s32), %21(s32)3162 %2:_(<3 x s64>) = G_BUILD_VECTOR %28(s64), %29(s64), %30(s64)3163 %31:_(<3 x s64>) = contract G_FMUL %0, %13164 %32:_(<3 x s64>) = contract G_FADD %2, %313165 %34:_(s32), %35:_(s32), %36:_(s32), %37:_(s32), %38:_(s32), %39:_(s32) = G_UNMERGE_VALUES %32(<3 x s64>)3166 $vgpr0 = COPY %34(s32)3167 $vgpr1 = COPY %35(s32)3168 $vgpr2 = COPY %36(s32)3169 $vgpr3 = COPY %37(s32)3170 $vgpr4 = COPY %38(s32)3171 $vgpr5 = COPY %39(s32)3172 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr53173...3174