; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc -mtriple=mips < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32
; RUN: llc -mtriple=mips -mcpu mips32r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32R2
; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64
; RUN: llc -mtriple=mips64 -mcpu mips64r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64R2

define float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 {
; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f32:
; SOFT-FLOAT-32:       # %bb.0:
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -8
; SOFT-FLOAT-32-NEXT:    jal __mulsf3
; SOFT-FLOAT-32-NEXT:    move $16, $6
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    jal __addsf3
; SOFT-FLOAT-32-NEXT:    move $5, $16
; SOFT-FLOAT-32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    jr $ra
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f32:
; SOFT-FLOAT-32R2:       # %bb.0:
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -8
; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-32R2-NEXT:    move $16, $6
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $16
; SOFT-FLOAT-32R2-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    jr $ra
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32:
; SOFT-FLOAT-64:       # %bb.0:
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64-NEXT:    jal __mulsf3
; SOFT-FLOAT-64-NEXT:    move $16, $6
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    jal __addsf3
; SOFT-FLOAT-64-NEXT:    move $5, $16
; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    jr $ra
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
;
; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f32:
; SOFT-FLOAT-64R2:       # %bb.0:
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-64R2-NEXT:    move $16, $6
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $16
; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    jr $ra
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
  %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c)
  ret float %result
}

define double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 {
; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f64:
; SOFT-FLOAT-32:       # %bb.0:
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32-NEXT:    jal __muldf3
; SOFT-FLOAT-32-NEXT:    nop
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    lw $6, 40($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 44($sp)
; SOFT-FLOAT-32-NEXT:    jal __adddf3
; SOFT-FLOAT-32-NEXT:    move $5, $3
; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    jr $ra
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f64:
; SOFT-FLOAT-32R2:       # %bb.0:
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
; SOFT-FLOAT-32R2-NEXT:    nop
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    lw $6, 40($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 44($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $3
; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    jr $ra
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64:
; SOFT-FLOAT-64:       # %bb.0:
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64-NEXT:    jal __muldf3
; SOFT-FLOAT-64-NEXT:    move $16, $6
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    jal __adddf3
; SOFT-FLOAT-64-NEXT:    move $5, $16
; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    jr $ra
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
;
; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f64:
; SOFT-FLOAT-64R2:       # %bb.0:
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
; SOFT-FLOAT-64R2-NEXT:    move $16, $6
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $16
; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    jr $ra
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
  %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c)
  ret double %result
}

define float @fmuladd_contract_f32(float %a, float %b, float %c) #0 {
; SOFT-FLOAT-32-LABEL: fmuladd_contract_f32:
; SOFT-FLOAT-32:       # %bb.0:
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -8
; SOFT-FLOAT-32-NEXT:    jal __mulsf3
; SOFT-FLOAT-32-NEXT:    move $16, $6
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    jal __addsf3
; SOFT-FLOAT-32-NEXT:    move $5, $16
; SOFT-FLOAT-32-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    jr $ra
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f32:
; SOFT-FLOAT-32R2:       # %bb.0:
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -8
; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-32R2-NEXT:    move $16, $6
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $16
; SOFT-FLOAT-32R2-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    jr $ra
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32:
; SOFT-FLOAT-64:       # %bb.0:
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64-NEXT:    jal __mulsf3
; SOFT-FLOAT-64-NEXT:    move $16, $6
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    jal __addsf3
; SOFT-FLOAT-64-NEXT:    move $5, $16
; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    jr $ra
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
;
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f32:
; SOFT-FLOAT-64R2:       # %bb.0:
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-64R2-NEXT:    move $16, $6
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $16
; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    jr $ra
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
  %product = fmul contract float %a, %b
  %result = fadd contract float %product, %c
  ret float %result
}

define double @fmuladd_contract_f64(double %a, double %b, double %c) #0 {
; SOFT-FLOAT-32-LABEL: fmuladd_contract_f64:
; SOFT-FLOAT-32:       # %bb.0:
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32-NEXT:    jal __muldf3
; SOFT-FLOAT-32-NEXT:    nop
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    lw $6, 40($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 44($sp)
; SOFT-FLOAT-32-NEXT:    jal __adddf3
; SOFT-FLOAT-32-NEXT:    move $5, $3
; SOFT-FLOAT-32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    jr $ra
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f64:
; SOFT-FLOAT-32R2:       # %bb.0:
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -24
; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 24
; SOFT-FLOAT-32R2-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
; SOFT-FLOAT-32R2-NEXT:    nop
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    lw $6, 40($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 44($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $3
; SOFT-FLOAT-32R2-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    jr $ra
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 24
;
; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64:
; SOFT-FLOAT-64:       # %bb.0:
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64-NEXT:    jal __muldf3
; SOFT-FLOAT-64-NEXT:    move $16, $6
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    jal __adddf3
; SOFT-FLOAT-64-NEXT:    move $5, $16
; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    jr $ra
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 16
;
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f64:
; SOFT-FLOAT-64R2:       # %bb.0:
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -16
; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 16
; SOFT-FLOAT-64R2-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -16
; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
; SOFT-FLOAT-64R2-NEXT:    move $16, $6
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $16
; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    jr $ra
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 16
  %product = fmul contract double %a, %b
  %result = fadd contract double %product, %c
  ret double %result
}

define <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {
; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f32:
; SOFT-FLOAT-32:       # %bb.0:
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -48
; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 48
; SOFT-FLOAT-32-NEXT:    sw $ra, 44($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $21, 40($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $20, 36($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $19, 32($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $18, 28($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $17, 24($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $16, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32-NEXT:    .cfi_offset 21, -8
; SOFT-FLOAT-32-NEXT:    .cfi_offset 20, -12
; SOFT-FLOAT-32-NEXT:    .cfi_offset 19, -16
; SOFT-FLOAT-32-NEXT:    .cfi_offset 18, -20
; SOFT-FLOAT-32-NEXT:    .cfi_offset 17, -24
; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -28
; SOFT-FLOAT-32-NEXT:    move $17, $7
; SOFT-FLOAT-32-NEXT:    move $16, $4
; SOFT-FLOAT-32-NEXT:    lw $4, 64($sp)
; SOFT-FLOAT-32-NEXT:    lw $5, 80($sp)
; SOFT-FLOAT-32-NEXT:    jal __mulsf3
; SOFT-FLOAT-32-NEXT:    move $18, $6
; SOFT-FLOAT-32-NEXT:    lw $5, 96($sp)
; SOFT-FLOAT-32-NEXT:    jal __addsf3
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    lw $4, 68($sp)
; SOFT-FLOAT-32-NEXT:    lw $5, 84($sp)
; SOFT-FLOAT-32-NEXT:    jal __mulsf3
; SOFT-FLOAT-32-NEXT:    move $19, $2
; SOFT-FLOAT-32-NEXT:    lw $5, 100($sp)
; SOFT-FLOAT-32-NEXT:    jal __addsf3
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    move $20, $2
; SOFT-FLOAT-32-NEXT:    lw $5, 76($sp)
; SOFT-FLOAT-32-NEXT:    jal __mulsf3
; SOFT-FLOAT-32-NEXT:    move $4, $17
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    lw $17, 88($sp)
; SOFT-FLOAT-32-NEXT:    lw $21, 72($sp)
; SOFT-FLOAT-32-NEXT:    lw $5, 92($sp)
; SOFT-FLOAT-32-NEXT:    sw $20, 12($16)
; SOFT-FLOAT-32-NEXT:    jal __addsf3
; SOFT-FLOAT-32-NEXT:    sw $19, 8($16)
; SOFT-FLOAT-32-NEXT:    sw $2, 4($16)
; SOFT-FLOAT-32-NEXT:    move $4, $18
; SOFT-FLOAT-32-NEXT:    jal __mulsf3
; SOFT-FLOAT-32-NEXT:    move $5, $21
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    jal __addsf3
; SOFT-FLOAT-32-NEXT:    move $5, $17
; SOFT-FLOAT-32-NEXT:    sw $2, 0($16)
; SOFT-FLOAT-32-NEXT:    lw $16, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $17, 24($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $18, 28($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $19, 32($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $20, 36($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $21, 40($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $ra, 44($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    jr $ra
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 48
;
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f32:
; SOFT-FLOAT-32R2:       # %bb.0:
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -48
; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 48
; SOFT-FLOAT-32R2-NEXT:    sw $ra, 44($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $21, 40($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $20, 36($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $19, 32($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $18, 28($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $17, 24($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $16, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 21, -8
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 20, -12
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 19, -16
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 18, -20
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 17, -24
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -28
; SOFT-FLOAT-32R2-NEXT:    move $17, $7
; SOFT-FLOAT-32R2-NEXT:    move $16, $4
; SOFT-FLOAT-32R2-NEXT:    lw $4, 64($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $5, 80($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-32R2-NEXT:    move $18, $6
; SOFT-FLOAT-32R2-NEXT:    lw $5, 96($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    lw $4, 68($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $5, 84($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-32R2-NEXT:    move $19, $2
; SOFT-FLOAT-32R2-NEXT:    lw $5, 100($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    move $20, $2
; SOFT-FLOAT-32R2-NEXT:    lw $5, 76($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-32R2-NEXT:    move $4, $17
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    lw $17, 88($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $21, 72($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $5, 92($sp)
; SOFT-FLOAT-32R2-NEXT:    sw $20, 12($16)
; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
; SOFT-FLOAT-32R2-NEXT:    sw $19, 8($16)
; SOFT-FLOAT-32R2-NEXT:    sw $2, 4($16)
; SOFT-FLOAT-32R2-NEXT:    move $4, $18
; SOFT-FLOAT-32R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $21
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    jal __addsf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $17
; SOFT-FLOAT-32R2-NEXT:    sw $2, 0($16)
; SOFT-FLOAT-32R2-NEXT:    lw $16, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $17, 24($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $18, 28($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $19, 32($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $20, 36($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $21, 40($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $ra, 44($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    jr $ra
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 48
;
; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32:
; SOFT-FLOAT-64:       # %bb.0:
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -80
; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 80
; SOFT-FLOAT-64-NEXT:    sd $ra, 72($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $23, 64($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $22, 56($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $21, 48($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $20, 40($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $19, 32($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $18, 24($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $17, 16($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $16, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64-NEXT:    .cfi_offset 23, -16
; SOFT-FLOAT-64-NEXT:    .cfi_offset 22, -24
; SOFT-FLOAT-64-NEXT:    .cfi_offset 21, -32
; SOFT-FLOAT-64-NEXT:    .cfi_offset 20, -40
; SOFT-FLOAT-64-NEXT:    .cfi_offset 19, -48
; SOFT-FLOAT-64-NEXT:    .cfi_offset 18, -56
; SOFT-FLOAT-64-NEXT:    .cfi_offset 17, -64
; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -72
; SOFT-FLOAT-64-NEXT:    move $16, $9
; SOFT-FLOAT-64-NEXT:    move $19, $8
; SOFT-FLOAT-64-NEXT:    move $17, $7
; SOFT-FLOAT-64-NEXT:    move $20, $6
; SOFT-FLOAT-64-NEXT:    move $18, $5
; SOFT-FLOAT-64-NEXT:    move $21, $4
; SOFT-FLOAT-64-NEXT:    sll $4, $21, 0
; SOFT-FLOAT-64-NEXT:    jal __mulsf3
; SOFT-FLOAT-64-NEXT:    sll $5, $20, 0
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    jal __addsf3
; SOFT-FLOAT-64-NEXT:    sll $5, $19, 0
; SOFT-FLOAT-64-NEXT:    move $22, $2
; SOFT-FLOAT-64-NEXT:    sll $4, $18, 0
; SOFT-FLOAT-64-NEXT:    jal __mulsf3
; SOFT-FLOAT-64-NEXT:    sll $5, $17, 0
; SOFT-FLOAT-64-NEXT:    move $23, $2
; SOFT-FLOAT-64-NEXT:    dsrl $1, $21, 32
; SOFT-FLOAT-64-NEXT:    sll $4, $1, 0
; SOFT-FLOAT-64-NEXT:    dsrl $1, $20, 32
; SOFT-FLOAT-64-NEXT:    jal __mulsf3
; SOFT-FLOAT-64-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    dsll $1, $22, 32
; SOFT-FLOAT-64-NEXT:    dsrl $2, $19, 32
; SOFT-FLOAT-64-NEXT:    sll $5, $2, 0
; SOFT-FLOAT-64-NEXT:    jal __addsf3
; SOFT-FLOAT-64-NEXT:    dsrl $19, $1, 32
; SOFT-FLOAT-64-NEXT:    # kill: def $v0 killed $v0 def $v0_64
; SOFT-FLOAT-64-NEXT:    dsll $1, $2, 32
; SOFT-FLOAT-64-NEXT:    sll $5, $16, 0
; SOFT-FLOAT-64-NEXT:    or $19, $19, $1
; SOFT-FLOAT-64-NEXT:    jal __addsf3
; SOFT-FLOAT-64-NEXT:    move $4, $23
; SOFT-FLOAT-64-NEXT:    move $20, $2
; SOFT-FLOAT-64-NEXT:    dsrl $1, $18, 32
; SOFT-FLOAT-64-NEXT:    sll $4, $1, 0
; SOFT-FLOAT-64-NEXT:    dsrl $1, $17, 32
; SOFT-FLOAT-64-NEXT:    jal __mulsf3
; SOFT-FLOAT-64-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    dsll $1, $20, 32
; SOFT-FLOAT-64-NEXT:    dsrl $17, $1, 32
; SOFT-FLOAT-64-NEXT:    dsrl $1, $16, 32
; SOFT-FLOAT-64-NEXT:    jal __addsf3
; SOFT-FLOAT-64-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64-NEXT:    # kill: def $v0 killed $v0 def $v0_64
; SOFT-FLOAT-64-NEXT:    dsll $1, $2, 32
; SOFT-FLOAT-64-NEXT:    or $3, $17, $1
; SOFT-FLOAT-64-NEXT:    move $2, $19
; SOFT-FLOAT-64-NEXT:    ld $16, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $17, 16($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $18, 24($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $19, 32($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $20, 40($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $21, 48($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $22, 56($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $23, 64($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $ra, 72($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    jr $ra
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 80
;
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f32:
; SOFT-FLOAT-64R2:       # %bb.0:
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -80
; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 80
; SOFT-FLOAT-64R2-NEXT:    sd $ra, 72($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $23, 64($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $22, 56($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $21, 48($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $20, 40($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $19, 32($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $18, 24($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $17, 16($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $16, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 23, -16
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 22, -24
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 21, -32
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 20, -40
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 19, -48
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 18, -56
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 17, -64
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -72
; SOFT-FLOAT-64R2-NEXT:    move $16, $9
; SOFT-FLOAT-64R2-NEXT:    move $19, $8
; SOFT-FLOAT-64R2-NEXT:    move $17, $7
; SOFT-FLOAT-64R2-NEXT:    move $20, $6
; SOFT-FLOAT-64R2-NEXT:    move $18, $5
; SOFT-FLOAT-64R2-NEXT:    move $21, $4
; SOFT-FLOAT-64R2-NEXT:    sll $4, $21, 0
; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-64R2-NEXT:    sll $5, $20, 0
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
; SOFT-FLOAT-64R2-NEXT:    sll $5, $19, 0
; SOFT-FLOAT-64R2-NEXT:    move $22, $2
; SOFT-FLOAT-64R2-NEXT:    sll $4, $18, 0
; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-64R2-NEXT:    sll $5, $17, 0
; SOFT-FLOAT-64R2-NEXT:    move $23, $2
; SOFT-FLOAT-64R2-NEXT:    dsrl $1, $21, 32
; SOFT-FLOAT-64R2-NEXT:    sll $4, $1, 0
; SOFT-FLOAT-64R2-NEXT:    dsrl $1, $20, 32
; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-64R2-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    dsrl $1, $19, 32
; SOFT-FLOAT-64R2-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
; SOFT-FLOAT-64R2-NEXT:    dext $19, $22, 0, 32
; SOFT-FLOAT-64R2-NEXT:    # kill: def $v0 killed $v0 def $v0_64
; SOFT-FLOAT-64R2-NEXT:    dsll $1, $2, 32
; SOFT-FLOAT-64R2-NEXT:    sll $5, $16, 0
; SOFT-FLOAT-64R2-NEXT:    or $19, $19, $1
; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
; SOFT-FLOAT-64R2-NEXT:    move $4, $23
; SOFT-FLOAT-64R2-NEXT:    move $20, $2
; SOFT-FLOAT-64R2-NEXT:    dsrl $1, $18, 32
; SOFT-FLOAT-64R2-NEXT:    sll $4, $1, 0
; SOFT-FLOAT-64R2-NEXT:    dsrl $1, $17, 32
; SOFT-FLOAT-64R2-NEXT:    jal __mulsf3
; SOFT-FLOAT-64R2-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    dext $17, $20, 0, 32
; SOFT-FLOAT-64R2-NEXT:    dsrl $1, $16, 32
; SOFT-FLOAT-64R2-NEXT:    jal __addsf3
; SOFT-FLOAT-64R2-NEXT:    sll $5, $1, 0
; SOFT-FLOAT-64R2-NEXT:    # kill: def $v0 killed $v0 def $v0_64
; SOFT-FLOAT-64R2-NEXT:    dsll $1, $2, 32
; SOFT-FLOAT-64R2-NEXT:    or $3, $17, $1
; SOFT-FLOAT-64R2-NEXT:    move $2, $19
; SOFT-FLOAT-64R2-NEXT:    ld $16, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $17, 16($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $18, 24($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $19, 32($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $20, 40($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $21, 48($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $22, 56($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $23, 64($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $ra, 72($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    jr $ra
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 80
  %product = fmul contract <4 x float> %a, %b
  %result = fadd contract <4 x float> %product, %c
  ret <4 x float> %result
}

define <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 {
; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f64:
; SOFT-FLOAT-32:       # %bb.0:
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, -64
; SOFT-FLOAT-32-NEXT:    .cfi_def_cfa_offset 64
; SOFT-FLOAT-32-NEXT:    sw $ra, 60($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $fp, 56($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $23, 52($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $22, 48($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $21, 44($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $20, 40($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $19, 36($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $18, 32($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $17, 28($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $16, 24($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32-NEXT:    .cfi_offset 30, -8
; SOFT-FLOAT-32-NEXT:    .cfi_offset 23, -12
; SOFT-FLOAT-32-NEXT:    .cfi_offset 22, -16
; SOFT-FLOAT-32-NEXT:    .cfi_offset 21, -20
; SOFT-FLOAT-32-NEXT:    .cfi_offset 20, -24
; SOFT-FLOAT-32-NEXT:    .cfi_offset 19, -28
; SOFT-FLOAT-32-NEXT:    .cfi_offset 18, -32
; SOFT-FLOAT-32-NEXT:    .cfi_offset 17, -36
; SOFT-FLOAT-32-NEXT:    .cfi_offset 16, -40
; SOFT-FLOAT-32-NEXT:    sw $7, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    sw $6, 16($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32-NEXT:    move $16, $4
; SOFT-FLOAT-32-NEXT:    lw $4, 88($sp)
; SOFT-FLOAT-32-NEXT:    lw $5, 92($sp)
; SOFT-FLOAT-32-NEXT:    lw $6, 120($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 124($sp)
; SOFT-FLOAT-32-NEXT:    jal __muldf3
; SOFT-FLOAT-32-NEXT:    nop
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    lw $6, 152($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 156($sp)
; SOFT-FLOAT-32-NEXT:    jal __adddf3
; SOFT-FLOAT-32-NEXT:    move $5, $3
; SOFT-FLOAT-32-NEXT:    move $19, $2
; SOFT-FLOAT-32-NEXT:    lw $4, 96($sp)
; SOFT-FLOAT-32-NEXT:    lw $5, 100($sp)
; SOFT-FLOAT-32-NEXT:    lw $6, 128($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 132($sp)
; SOFT-FLOAT-32-NEXT:    jal __muldf3
; SOFT-FLOAT-32-NEXT:    move $20, $3
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    lw $6, 160($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 164($sp)
; SOFT-FLOAT-32-NEXT:    jal __adddf3
; SOFT-FLOAT-32-NEXT:    move $5, $3
; SOFT-FLOAT-32-NEXT:    move $21, $2
; SOFT-FLOAT-32-NEXT:    lw $4, 80($sp)
; SOFT-FLOAT-32-NEXT:    lw $5, 84($sp)
; SOFT-FLOAT-32-NEXT:    lw $6, 112($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 116($sp)
; SOFT-FLOAT-32-NEXT:    jal __muldf3
; SOFT-FLOAT-32-NEXT:    move $22, $3
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    move $5, $3
; SOFT-FLOAT-32-NEXT:    lw $23, 140($sp)
; SOFT-FLOAT-32-NEXT:    lw $fp, 136($sp)
; SOFT-FLOAT-32-NEXT:    lw $17, 108($sp)
; SOFT-FLOAT-32-NEXT:    lw $18, 104($sp)
; SOFT-FLOAT-32-NEXT:    lw $7, 148($sp)
; SOFT-FLOAT-32-NEXT:    lw $6, 144($sp)
; SOFT-FLOAT-32-NEXT:    sw $22, 28($16)
; SOFT-FLOAT-32-NEXT:    sw $21, 24($16)
; SOFT-FLOAT-32-NEXT:    sw $20, 20($16)
; SOFT-FLOAT-32-NEXT:    jal __adddf3
; SOFT-FLOAT-32-NEXT:    sw $19, 16($16)
; SOFT-FLOAT-32-NEXT:    sw $3, 12($16)
; SOFT-FLOAT-32-NEXT:    sw $2, 8($16)
; SOFT-FLOAT-32-NEXT:    lw $4, 16($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $5, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    move $6, $18
; SOFT-FLOAT-32-NEXT:    jal __muldf3
; SOFT-FLOAT-32-NEXT:    move $7, $17
; SOFT-FLOAT-32-NEXT:    move $4, $2
; SOFT-FLOAT-32-NEXT:    move $5, $3
; SOFT-FLOAT-32-NEXT:    move $6, $fp
; SOFT-FLOAT-32-NEXT:    jal __adddf3
; SOFT-FLOAT-32-NEXT:    move $7, $23
; SOFT-FLOAT-32-NEXT:    sw $3, 4($16)
; SOFT-FLOAT-32-NEXT:    sw $2, 0($16)
; SOFT-FLOAT-32-NEXT:    lw $16, 24($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $17, 28($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $18, 32($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $19, 36($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $20, 40($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $21, 44($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $22, 48($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $23, 52($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $fp, 56($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    lw $ra, 60($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32-NEXT:    jr $ra
; SOFT-FLOAT-32-NEXT:    addiu $sp, $sp, 64
;
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f64:
; SOFT-FLOAT-32R2:       # %bb.0:
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, -64
; SOFT-FLOAT-32R2-NEXT:    .cfi_def_cfa_offset 64
; SOFT-FLOAT-32R2-NEXT:    sw $ra, 60($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $fp, 56($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $23, 52($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $22, 48($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $21, 44($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $20, 40($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $19, 36($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $18, 32($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $17, 28($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $16, 24($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 31, -4
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 30, -8
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 23, -12
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 22, -16
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 21, -20
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 20, -24
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 19, -28
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 18, -32
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 17, -36
; SOFT-FLOAT-32R2-NEXT:    .cfi_offset 16, -40
; SOFT-FLOAT-32R2-NEXT:    sw $7, 20($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    sw $6, 16($sp) # 4-byte Folded Spill
; SOFT-FLOAT-32R2-NEXT:    move $16, $4
; SOFT-FLOAT-32R2-NEXT:    lw $4, 88($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $5, 92($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $6, 120($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 124($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
; SOFT-FLOAT-32R2-NEXT:    nop
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    lw $6, 152($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 156($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $3
; SOFT-FLOAT-32R2-NEXT:    move $19, $2
; SOFT-FLOAT-32R2-NEXT:    lw $4, 96($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $5, 100($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $6, 128($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 132($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
; SOFT-FLOAT-32R2-NEXT:    move $20, $3
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    lw $6, 160($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 164($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
; SOFT-FLOAT-32R2-NEXT:    move $5, $3
; SOFT-FLOAT-32R2-NEXT:    move $21, $2
; SOFT-FLOAT-32R2-NEXT:    lw $4, 80($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $5, 84($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $6, 112($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 116($sp)
; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
; SOFT-FLOAT-32R2-NEXT:    move $22, $3
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    move $5, $3
; SOFT-FLOAT-32R2-NEXT:    lw $23, 140($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $fp, 136($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $17, 108($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $18, 104($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $7, 148($sp)
; SOFT-FLOAT-32R2-NEXT:    lw $6, 144($sp)
; SOFT-FLOAT-32R2-NEXT:    sw $22, 28($16)
; SOFT-FLOAT-32R2-NEXT:    sw $21, 24($16)
; SOFT-FLOAT-32R2-NEXT:    sw $20, 20($16)
; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
; SOFT-FLOAT-32R2-NEXT:    sw $19, 16($16)
; SOFT-FLOAT-32R2-NEXT:    sw $3, 12($16)
; SOFT-FLOAT-32R2-NEXT:    sw $2, 8($16)
; SOFT-FLOAT-32R2-NEXT:    lw $4, 16($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $5, 20($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    move $6, $18
; SOFT-FLOAT-32R2-NEXT:    jal __muldf3
; SOFT-FLOAT-32R2-NEXT:    move $7, $17
; SOFT-FLOAT-32R2-NEXT:    move $4, $2
; SOFT-FLOAT-32R2-NEXT:    move $5, $3
; SOFT-FLOAT-32R2-NEXT:    move $6, $fp
; SOFT-FLOAT-32R2-NEXT:    jal __adddf3
; SOFT-FLOAT-32R2-NEXT:    move $7, $23
; SOFT-FLOAT-32R2-NEXT:    sw $3, 4($16)
; SOFT-FLOAT-32R2-NEXT:    sw $2, 0($16)
; SOFT-FLOAT-32R2-NEXT:    lw $16, 24($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $17, 28($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $18, 32($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $19, 36($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $20, 40($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $21, 44($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $22, 48($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $23, 52($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $fp, 56($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    lw $ra, 60($sp) # 4-byte Folded Reload
; SOFT-FLOAT-32R2-NEXT:    jr $ra
; SOFT-FLOAT-32R2-NEXT:    addiu $sp, $sp, 64
;
; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64:
; SOFT-FLOAT-64:       # %bb.0:
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, -64
; SOFT-FLOAT-64-NEXT:    .cfi_def_cfa_offset 64
; SOFT-FLOAT-64-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $22, 48($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $21, 40($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $20, 32($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $19, 24($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $18, 16($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $17, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64-NEXT:    .cfi_offset 22, -16
; SOFT-FLOAT-64-NEXT:    .cfi_offset 21, -24
; SOFT-FLOAT-64-NEXT:    .cfi_offset 20, -32
; SOFT-FLOAT-64-NEXT:    .cfi_offset 19, -40
; SOFT-FLOAT-64-NEXT:    .cfi_offset 18, -48
; SOFT-FLOAT-64-NEXT:    .cfi_offset 17, -56
; SOFT-FLOAT-64-NEXT:    .cfi_offset 16, -64
; SOFT-FLOAT-64-NEXT:    move $17, $10
; SOFT-FLOAT-64-NEXT:    move $18, $9
; SOFT-FLOAT-64-NEXT:    move $19, $8
; SOFT-FLOAT-64-NEXT:    move $20, $6
; SOFT-FLOAT-64-NEXT:    move $21, $5
; SOFT-FLOAT-64-NEXT:    move $16, $4
; SOFT-FLOAT-64-NEXT:    move $4, $7
; SOFT-FLOAT-64-NEXT:    jal __muldf3
; SOFT-FLOAT-64-NEXT:    move $5, $11
; SOFT-FLOAT-64-NEXT:    ld $5, 88($sp)
; SOFT-FLOAT-64-NEXT:    jal __adddf3
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    move $22, $2
; SOFT-FLOAT-64-NEXT:    ld $5, 64($sp)
; SOFT-FLOAT-64-NEXT:    jal __muldf3
; SOFT-FLOAT-64-NEXT:    move $4, $19
; SOFT-FLOAT-64-NEXT:    ld $5, 96($sp)
; SOFT-FLOAT-64-NEXT:    jal __adddf3
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    move $19, $2
; SOFT-FLOAT-64-NEXT:    move $4, $20
; SOFT-FLOAT-64-NEXT:    jal __muldf3
; SOFT-FLOAT-64-NEXT:    move $5, $17
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    ld $17, 72($sp)
; SOFT-FLOAT-64-NEXT:    ld $5, 80($sp)
; SOFT-FLOAT-64-NEXT:    sd $19, 24($16)
; SOFT-FLOAT-64-NEXT:    jal __adddf3
; SOFT-FLOAT-64-NEXT:    sd $22, 16($16)
; SOFT-FLOAT-64-NEXT:    sd $2, 8($16)
; SOFT-FLOAT-64-NEXT:    move $4, $21
; SOFT-FLOAT-64-NEXT:    jal __muldf3
; SOFT-FLOAT-64-NEXT:    move $5, $18
; SOFT-FLOAT-64-NEXT:    move $4, $2
; SOFT-FLOAT-64-NEXT:    jal __adddf3
; SOFT-FLOAT-64-NEXT:    move $5, $17
; SOFT-FLOAT-64-NEXT:    sd $2, 0($16)
; SOFT-FLOAT-64-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $17, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $18, 16($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $19, 24($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $20, 32($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $21, 40($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $22, 48($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64-NEXT:    jr $ra
; SOFT-FLOAT-64-NEXT:    daddiu $sp, $sp, 64
;
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f64:
; SOFT-FLOAT-64R2:       # %bb.0:
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, -64
; SOFT-FLOAT-64R2-NEXT:    .cfi_def_cfa_offset 64
; SOFT-FLOAT-64R2-NEXT:    sd $ra, 56($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $22, 48($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $21, 40($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $20, 32($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $19, 24($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $18, 16($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $17, 8($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    sd $16, 0($sp) # 8-byte Folded Spill
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 31, -8
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 22, -16
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 21, -24
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 20, -32
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 19, -40
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 18, -48
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 17, -56
; SOFT-FLOAT-64R2-NEXT:    .cfi_offset 16, -64
; SOFT-FLOAT-64R2-NEXT:    move $17, $10
; SOFT-FLOAT-64R2-NEXT:    move $18, $9
; SOFT-FLOAT-64R2-NEXT:    move $19, $8
; SOFT-FLOAT-64R2-NEXT:    move $20, $6
; SOFT-FLOAT-64R2-NEXT:    move $21, $5
; SOFT-FLOAT-64R2-NEXT:    move $16, $4
; SOFT-FLOAT-64R2-NEXT:    move $4, $7
; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $11
; SOFT-FLOAT-64R2-NEXT:    ld $5, 88($sp)
; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    move $22, $2
; SOFT-FLOAT-64R2-NEXT:    ld $5, 64($sp)
; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
; SOFT-FLOAT-64R2-NEXT:    move $4, $19
; SOFT-FLOAT-64R2-NEXT:    ld $5, 96($sp)
; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    move $19, $2
; SOFT-FLOAT-64R2-NEXT:    move $4, $20
; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $17
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    ld $17, 72($sp)
; SOFT-FLOAT-64R2-NEXT:    ld $5, 80($sp)
; SOFT-FLOAT-64R2-NEXT:    sd $19, 24($16)
; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
; SOFT-FLOAT-64R2-NEXT:    sd $22, 16($16)
; SOFT-FLOAT-64R2-NEXT:    sd $2, 8($16)
; SOFT-FLOAT-64R2-NEXT:    move $4, $21
; SOFT-FLOAT-64R2-NEXT:    jal __muldf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $18
; SOFT-FLOAT-64R2-NEXT:    move $4, $2
; SOFT-FLOAT-64R2-NEXT:    jal __adddf3
; SOFT-FLOAT-64R2-NEXT:    move $5, $17
; SOFT-FLOAT-64R2-NEXT:    sd $2, 0($16)
; SOFT-FLOAT-64R2-NEXT:    ld $16, 0($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $17, 8($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $18, 16($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $19, 24($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $20, 32($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $21, 40($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $22, 48($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    ld $ra, 56($sp) # 8-byte Folded Reload
; SOFT-FLOAT-64R2-NEXT:    jr $ra
; SOFT-FLOAT-64R2-NEXT:    daddiu $sp, $sp, 64
  %product = fmul contract <4 x double> %a, %b
  %result = fadd contract <4 x double> %product, %c
  ret <4 x double> %result
}

attributes #0 = { "use-soft-float"="true" }

declare float @llvm.fmuladd.f32(float %a, float %b, float %c)
declare double @llvm.fmuladd.f64(double %a, double %b, double %c)
