brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.2 KiB · de1bb47 Raw
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