447 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -global-isel -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-prelegalizer-combiner %s -o - | FileCheck -check-prefix=GFX10 %s3 4# Test that we fold correct element from G_UNMERGE_VALUES into fma5 6---7name: test_f32_add_mul8body: |9 bb.1:10 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr311 12 ; GFX10-LABEL: name: test_f32_add_mul13 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr314 ; GFX10-NEXT: {{ $}}15 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr016 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr117 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr2_vgpr318 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)19 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)20 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], %el121 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)22 %0:_(s32) = COPY $vgpr023 %1:_(s32) = COPY $vgpr124 %ptr:_(p1) = COPY $vgpr2_vgpr325 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)26 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)27 %6:_(s32) = contract G_FMUL %0, %128 %7:_(s32) = contract G_FADD %6, %el129 $vgpr0 = COPY %7(s32)30...31 32---33name: test_f32_add_mul_rhs34machineFunctionInfo:35 mode:36 fp32-input-denormals: false37 fp32-output-denormals: false38body: |39 bb.1:40 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr341 42 ; GFX10-LABEL: name: test_f32_add_mul_rhs43 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr344 ; GFX10-NEXT: {{ $}}45 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr046 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr147 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr2_vgpr348 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)49 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)50 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], %el151 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)52 %0:_(s32) = COPY $vgpr053 %1:_(s32) = COPY $vgpr154 %ptr:_(p1) = COPY $vgpr2_vgpr355 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)56 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)57 %6:_(s32) = contract G_FMUL %0, %158 %7:_(s32) = contract G_FADD %el1, %659 $vgpr0 = COPY %7(s32)60...61 62---63name: test_f16_f32_add_ext_mul64machineFunctionInfo:65 mode:66 fp32-input-denormals: false67 fp32-output-denormals: false68body: |69 bb.1:70 liveins: $sgpr0, $sgpr1, $vgpr0_vgpr171 72 ; GFX10-LABEL: name: test_f16_f32_add_ext_mul73 ; GFX10: liveins: $sgpr0, $sgpr1, $vgpr0_vgpr174 ; GFX10-NEXT: {{ $}}75 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr076 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)77 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr178 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)79 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr0_vgpr180 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)81 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)82 ; GFX10-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC]](s16)83 ; GFX10-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC1]](s16)84 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FPEXT]], [[FPEXT1]], %el185 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)86 %0:_(s32) = COPY $sgpr087 %1:_(s16) = G_TRUNC %0(s32)88 %2:_(s32) = COPY $sgpr189 %3:_(s16) = G_TRUNC %2(s32)90 %ptr:_(p1) = COPY $vgpr0_vgpr191 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)92 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)93 %8:_(s16) = nnan ninf nsz arcp contract afn reassoc G_FMUL %1, %394 %9:_(s32) = G_FPEXT %8(s16)95 %10:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FADD %9, %el196 $vgpr0 = COPY %10(s32)97...98 99---100name: test_f16_f32_add_ext_mul_rhs101machineFunctionInfo:102 mode:103 fp32-input-denormals: false104 fp32-output-denormals: false105body: |106 bb.1:107 liveins: $sgpr0, $sgpr1, $vgpr0_vgpr1108 109 ; GFX10-LABEL: name: test_f16_f32_add_ext_mul_rhs110 ; GFX10: liveins: $sgpr0, $sgpr1, $vgpr0_vgpr1111 ; GFX10-NEXT: {{ $}}112 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0113 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)114 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $sgpr1115 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)116 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr0_vgpr1117 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)118 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)119 ; GFX10-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC]](s16)120 ; GFX10-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC1]](s16)121 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FPEXT]], [[FPEXT1]], %el1122 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)123 %0:_(s32) = COPY $sgpr0124 %1:_(s16) = G_TRUNC %0(s32)125 %2:_(s32) = COPY $sgpr1126 %3:_(s16) = G_TRUNC %2(s32)127 %ptr:_(p1) = COPY $vgpr0_vgpr1128 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)129 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)130 %8:_(s16) = nnan ninf nsz arcp contract afn reassoc G_FMUL %1, %3131 %9:_(s32) = G_FPEXT %8(s16)132 %10:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FADD %el1, %9133 $vgpr0 = COPY %10(s32)134...135 136---137name: test_f32_add_fma_mul138body: |139 bb.1:140 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4_vgpr5141 142 ; GFX10-LABEL: name: test_f32_add_fma_mul143 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4_vgpr5144 ; GFX10-NEXT: {{ $}}145 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0146 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1147 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2148 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3149 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr4_vgpr5150 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)151 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)152 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY2]], [[COPY3]], %el1153 ; GFX10-NEXT: [[FMA1:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[FMA]]154 ; GFX10-NEXT: $vgpr0 = COPY [[FMA1]](s32)155 %0:_(s32) = COPY $vgpr0156 %1:_(s32) = COPY $vgpr1157 %2:_(s32) = COPY $vgpr2158 %3:_(s32) = COPY $vgpr3159 %ptr:_(p1) = COPY $vgpr4_vgpr5160 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)161 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)162 %8:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FMUL %2, %3163 %9:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FMA %0, %1, %8164 %10:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FADD %9, %el1165 $vgpr0 = COPY %10(s32)166...167 168---169name: test_f32_add_fma_mul_rhs170body: |171 bb.1:172 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4_vgpr5173 174 ; GFX10-LABEL: name: test_f32_add_fma_mul_rhs175 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4_vgpr5176 ; GFX10-NEXT: {{ $}}177 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0178 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1179 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2180 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3181 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr4_vgpr5182 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)183 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)184 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY2]], [[COPY3]], %el1185 ; GFX10-NEXT: [[FMA1:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[FMA]]186 ; GFX10-NEXT: $vgpr0 = COPY [[FMA1]](s32)187 %0:_(s32) = COPY $vgpr0188 %1:_(s32) = COPY $vgpr1189 %2:_(s32) = COPY $vgpr2190 %3:_(s32) = COPY $vgpr3191 %ptr:_(p1) = COPY $vgpr4_vgpr5192 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)193 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)194 %8:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FMUL %2, %3195 %9:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FMA %0, %1, %8196 %10:_(s32) = nnan ninf nsz arcp contract afn reassoc G_FADD %el1, %9197 $vgpr0 = COPY %10(s32)198...199 200---201name: test_f16_f32_add_fma_ext_mul202machineFunctionInfo:203 mode:204 fp32-input-denormals: false205 fp32-output-denormals: false206body: |207 bb.1:208 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5209 210 ; GFX10-LABEL: name: test_f16_f32_add_fma_ext_mul211 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5212 ; GFX10-NEXT: {{ $}}213 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0214 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1215 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr2_vgpr3216 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)217 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)218 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr4219 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)220 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr5221 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)222 ; GFX10-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC]](s16)223 ; GFX10-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC1]](s16)224 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FPEXT]], [[FPEXT1]], %el1225 ; GFX10-NEXT: [[FMA1:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[FMA]]226 ; GFX10-NEXT: $vgpr0 = COPY [[FMA1]](s32)227 %0:_(s32) = COPY $vgpr0228 %1:_(s32) = COPY $vgpr1229 %ptr:_(p1) = COPY $vgpr2_vgpr3230 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)231 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)232 %6:_(s32) = COPY $vgpr4233 %7:_(s16) = G_TRUNC %6(s32)234 %8:_(s32) = COPY $vgpr5235 %9:_(s16) = G_TRUNC %8(s32)236 %10:_(s16) = contract G_FMUL %7, %9237 %11:_(s32) = G_FPEXT %10(s16)238 %12:_(s32) = G_FMA %0, %1, %11239 %13:_(s32) = contract G_FADD %12, %el1240 $vgpr0 = COPY %13(s32)241...242 243---244name: test_f16_f32_add_ext_fma_mul245machineFunctionInfo:246 mode:247 fp32-input-denormals: false248 fp32-output-denormals: false249body: |250 bb.1:251 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5252 253 ; GFX10-LABEL: name: test_f16_f32_add_ext_fma_mul254 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5255 ; GFX10-NEXT: {{ $}}256 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0257 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)258 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1259 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)260 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr2_vgpr3261 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)262 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)263 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr4264 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)265 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr5266 ; GFX10-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)267 ; GFX10-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC]](s16)268 ; GFX10-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC1]](s16)269 ; GFX10-NEXT: [[FPEXT2:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC2]](s16)270 ; GFX10-NEXT: [[FPEXT3:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC3]](s16)271 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FPEXT2]], [[FPEXT3]], %el1272 ; GFX10-NEXT: [[FMA1:%[0-9]+]]:_(s32) = G_FMA [[FPEXT]], [[FPEXT1]], [[FMA]]273 ; GFX10-NEXT: $vgpr0 = COPY [[FMA1]](s32)274 %0:_(s32) = COPY $vgpr0275 %1:_(s16) = G_TRUNC %0(s32)276 %2:_(s32) = COPY $vgpr1277 %3:_(s16) = G_TRUNC %2(s32)278 %ptr:_(p1) = COPY $vgpr2_vgpr3279 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)280 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)281 %8:_(s32) = COPY $vgpr4282 %9:_(s16) = G_TRUNC %8(s32)283 %10:_(s32) = COPY $vgpr5284 %11:_(s16) = G_TRUNC %10(s32)285 %12:_(s16) = contract G_FMUL %9, %11286 %13:_(s16) = contract G_FMUL %1, %3287 %14:_(s16) = contract G_FADD %13, %12288 %15:_(s32) = G_FPEXT %14(s16)289 %16:_(s32) = contract G_FADD %15, %el1290 $vgpr0 = COPY %16(s32)291...292 293---294name: test_f16_f32_add_fma_ext_mul_rhs295machineFunctionInfo:296 mode:297 fp32-input-denormals: false298 fp32-output-denormals: false299body: |300 bb.1:301 liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5302 303 ; GFX10-LABEL: name: test_f16_f32_add_fma_ext_mul_rhs304 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5305 ; GFX10-NEXT: {{ $}}306 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr0_vgpr1307 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)308 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)309 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr2310 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3311 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr4312 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)313 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr5314 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)315 ; GFX10-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC]](s16)316 ; GFX10-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC1]](s16)317 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FPEXT]], [[FPEXT1]], %el1318 ; GFX10-NEXT: [[FMA1:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[FMA]]319 ; GFX10-NEXT: $vgpr0 = COPY [[FMA1]](s32)320 %ptr:_(p1) = COPY $vgpr0_vgpr1321 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)322 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)323 %4:_(s32) = COPY $vgpr2324 %5:_(s32) = COPY $vgpr3325 %6:_(s32) = COPY $vgpr4326 %7:_(s16) = G_TRUNC %6(s32)327 %8:_(s32) = COPY $vgpr5328 %9:_(s16) = G_TRUNC %8(s32)329 %10:_(s16) = contract G_FMUL %7, %9330 %11:_(s32) = G_FPEXT %10(s16)331 %12:_(s32) = G_FMA %4, %5, %11332 %13:_(s32) = contract G_FADD %el1, %12333 $vgpr0 = COPY %13(s32)334...335 336---337name: test_f16_f32_add_ext_fma_mul_rhs338machineFunctionInfo:339 mode:340 fp32-input-denormals: false341 fp32-output-denormals: false342body: |343 bb.1:344 liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5345 346 ; GFX10-LABEL: name: test_f16_f32_add_ext_fma_mul_rhs347 ; GFX10: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5348 ; GFX10-NEXT: {{ $}}349 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr0_vgpr1350 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)351 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)352 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr2353 ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)354 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3355 ; GFX10-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)356 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr4357 ; GFX10-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)358 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr5359 ; GFX10-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)360 ; GFX10-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC]](s16)361 ; GFX10-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC1]](s16)362 ; GFX10-NEXT: [[FPEXT2:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC2]](s16)363 ; GFX10-NEXT: [[FPEXT3:%[0-9]+]]:_(s32) = G_FPEXT [[TRUNC3]](s16)364 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FPEXT2]], [[FPEXT3]], %el1365 ; GFX10-NEXT: [[FMA1:%[0-9]+]]:_(s32) = G_FMA [[FPEXT]], [[FPEXT1]], [[FMA]]366 ; GFX10-NEXT: $vgpr0 = COPY [[FMA1]](s32)367 %ptr:_(p1) = COPY $vgpr0_vgpr1368 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)369 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)370 %4:_(s32) = COPY $vgpr2371 %5:_(s16) = G_TRUNC %4(s32)372 %6:_(s32) = COPY $vgpr3373 %7:_(s16) = G_TRUNC %6(s32)374 %8:_(s32) = COPY $vgpr4375 %9:_(s16) = G_TRUNC %8(s32)376 %10:_(s32) = COPY $vgpr5377 %11:_(s16) = G_TRUNC %10(s32)378 %12:_(s16) = contract G_FMUL %9, %11379 %13:_(s16) = contract G_FMUL %5, %7380 %14:_(s16) = contract G_FADD %13, %12381 %15:_(s32) = G_FPEXT %14(s16)382 %16:_(s32) = contract G_FADD %el1, %15383 $vgpr0 = COPY %16(s32)384...385 386---387name: test_f32_sub_mul388machineFunctionInfo:389 mode:390 fp32-input-denormals: false391 fp32-output-denormals: false392body: |393 bb.1:394 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3395 396 ; GFX10-LABEL: name: test_f32_sub_mul397 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3398 ; GFX10-NEXT: {{ $}}399 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0400 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1401 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr0_vgpr1402 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)403 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)404 ; GFX10-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG %el1405 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[COPY]], [[COPY1]], [[FNEG]]406 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)407 %0:_(s32) = COPY $vgpr0408 %1:_(s32) = COPY $vgpr1409 %ptr:_(p1) = COPY $vgpr0_vgpr1410 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)411 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)412 %6:_(s32) = contract G_FMUL %0, %1413 %7:_(s32) = contract G_FSUB %6, %el1414 $vgpr0 = COPY %7(s32)415...416 417---418name: test_f32_sub_mul_rhs419machineFunctionInfo:420 mode:421 fp32-input-denormals: false422 fp32-output-denormals: false423body: |424 bb.1:425 liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3426 427 ; GFX10-LABEL: name: test_f32_sub_mul_rhs428 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3429 ; GFX10-NEXT: {{ $}}430 ; GFX10-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0431 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1432 ; GFX10-NEXT: %ptr:_(p1) = COPY $vgpr2_vgpr3433 ; GFX10-NEXT: %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)434 ; GFX10-NEXT: %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)435 ; GFX10-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY]]436 ; GFX10-NEXT: [[FMA:%[0-9]+]]:_(s32) = G_FMA [[FNEG]], [[COPY1]], %el1437 ; GFX10-NEXT: $vgpr0 = COPY [[FMA]](s32)438 %0:_(s32) = COPY $vgpr0439 %1:_(s32) = COPY $vgpr1440 %ptr:_(p1) = COPY $vgpr2_vgpr3441 %vec:_(<2 x s32>) = G_LOAD %ptr(p1) :: (load (<2 x s32>), addrspace 1)442 %el0:_(s32), %el1:_(s32) = G_UNMERGE_VALUES %vec(<2 x s32>)443 %6:_(s32) = contract G_FMUL %0, %1444 %7:_(s32) = contract G_FSUB %el1, %6445 $vgpr0 = COPY %7(s32)446...447