945 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=mips < %s | FileCheck %s -check-prefix=SOFT-FLOAT-323; RUN: llc -mtriple=mips -mcpu mips32r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32R24; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-645; RUN: llc -mtriple=mips64 -mcpu mips64r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64R26 7define float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 {8; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f32:9; SOFT-FLOAT-32: # %bb.0:10; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -2411; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 2412; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill13; SOFT-FLOAT-32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill14; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -415; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -816; SOFT-FLOAT-32-NEXT: jal __mulsf317; SOFT-FLOAT-32-NEXT: move $16, $618; SOFT-FLOAT-32-NEXT: move $4, $219; SOFT-FLOAT-32-NEXT: jal __addsf320; SOFT-FLOAT-32-NEXT: move $5, $1621; SOFT-FLOAT-32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload22; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload23; SOFT-FLOAT-32-NEXT: jr $ra24; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 2425;26; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f32:27; SOFT-FLOAT-32R2: # %bb.0:28; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -2429; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 2430; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill31; SOFT-FLOAT-32R2-NEXT: sw $16, 16($sp) # 4-byte Folded Spill32; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -433; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -834; SOFT-FLOAT-32R2-NEXT: jal __mulsf335; SOFT-FLOAT-32R2-NEXT: move $16, $636; SOFT-FLOAT-32R2-NEXT: move $4, $237; SOFT-FLOAT-32R2-NEXT: jal __addsf338; SOFT-FLOAT-32R2-NEXT: move $5, $1639; SOFT-FLOAT-32R2-NEXT: lw $16, 16($sp) # 4-byte Folded Reload40; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload41; SOFT-FLOAT-32R2-NEXT: jr $ra42; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 2443;44; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32:45; SOFT-FLOAT-64: # %bb.0:46; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -1647; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 1648; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill49; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill50; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -851; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -1652; SOFT-FLOAT-64-NEXT: jal __mulsf353; SOFT-FLOAT-64-NEXT: move $16, $654; SOFT-FLOAT-64-NEXT: move $4, $255; SOFT-FLOAT-64-NEXT: jal __addsf356; SOFT-FLOAT-64-NEXT: move $5, $1657; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload58; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload59; SOFT-FLOAT-64-NEXT: jr $ra60; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 1661;62; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f32:63; SOFT-FLOAT-64R2: # %bb.0:64; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -1665; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 1666; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill67; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill68; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -869; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -1670; SOFT-FLOAT-64R2-NEXT: jal __mulsf371; SOFT-FLOAT-64R2-NEXT: move $16, $672; SOFT-FLOAT-64R2-NEXT: move $4, $273; SOFT-FLOAT-64R2-NEXT: jal __addsf374; SOFT-FLOAT-64R2-NEXT: move $5, $1675; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload76; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload77; SOFT-FLOAT-64R2-NEXT: jr $ra78; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 1679 %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c)80 ret float %result81}82 83define double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 {84; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f64:85; SOFT-FLOAT-32: # %bb.0:86; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -2487; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 2488; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill89; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -490; SOFT-FLOAT-32-NEXT: jal __muldf391; SOFT-FLOAT-32-NEXT: nop92; SOFT-FLOAT-32-NEXT: move $4, $293; SOFT-FLOAT-32-NEXT: lw $6, 40($sp)94; SOFT-FLOAT-32-NEXT: lw $7, 44($sp)95; SOFT-FLOAT-32-NEXT: jal __adddf396; SOFT-FLOAT-32-NEXT: move $5, $397; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload98; SOFT-FLOAT-32-NEXT: jr $ra99; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24100;101; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f64:102; SOFT-FLOAT-32R2: # %bb.0:103; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24104; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24105; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill106; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4107; SOFT-FLOAT-32R2-NEXT: jal __muldf3108; SOFT-FLOAT-32R2-NEXT: nop109; SOFT-FLOAT-32R2-NEXT: move $4, $2110; SOFT-FLOAT-32R2-NEXT: lw $6, 40($sp)111; SOFT-FLOAT-32R2-NEXT: lw $7, 44($sp)112; SOFT-FLOAT-32R2-NEXT: jal __adddf3113; SOFT-FLOAT-32R2-NEXT: move $5, $3114; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload115; SOFT-FLOAT-32R2-NEXT: jr $ra116; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24117;118; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64:119; SOFT-FLOAT-64: # %bb.0:120; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16121; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16122; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill123; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill124; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8125; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16126; SOFT-FLOAT-64-NEXT: jal __muldf3127; SOFT-FLOAT-64-NEXT: move $16, $6128; SOFT-FLOAT-64-NEXT: move $4, $2129; SOFT-FLOAT-64-NEXT: jal __adddf3130; SOFT-FLOAT-64-NEXT: move $5, $16131; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload132; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload133; SOFT-FLOAT-64-NEXT: jr $ra134; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16135;136; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f64:137; SOFT-FLOAT-64R2: # %bb.0:138; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16139; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16140; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill141; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill142; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8143; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16144; SOFT-FLOAT-64R2-NEXT: jal __muldf3145; SOFT-FLOAT-64R2-NEXT: move $16, $6146; SOFT-FLOAT-64R2-NEXT: move $4, $2147; SOFT-FLOAT-64R2-NEXT: jal __adddf3148; SOFT-FLOAT-64R2-NEXT: move $5, $16149; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload150; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload151; SOFT-FLOAT-64R2-NEXT: jr $ra152; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16153 %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c)154 ret double %result155}156 157define float @fmuladd_contract_f32(float %a, float %b, float %c) #0 {158; SOFT-FLOAT-32-LABEL: fmuladd_contract_f32:159; SOFT-FLOAT-32: # %bb.0:160; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -24161; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24162; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill163; SOFT-FLOAT-32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill164; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4165; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -8166; SOFT-FLOAT-32-NEXT: jal __mulsf3167; SOFT-FLOAT-32-NEXT: move $16, $6168; SOFT-FLOAT-32-NEXT: move $4, $2169; SOFT-FLOAT-32-NEXT: jal __addsf3170; SOFT-FLOAT-32-NEXT: move $5, $16171; SOFT-FLOAT-32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload172; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload173; SOFT-FLOAT-32-NEXT: jr $ra174; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24175;176; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f32:177; SOFT-FLOAT-32R2: # %bb.0:178; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24179; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24180; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill181; SOFT-FLOAT-32R2-NEXT: sw $16, 16($sp) # 4-byte Folded Spill182; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4183; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -8184; SOFT-FLOAT-32R2-NEXT: jal __mulsf3185; SOFT-FLOAT-32R2-NEXT: move $16, $6186; SOFT-FLOAT-32R2-NEXT: move $4, $2187; SOFT-FLOAT-32R2-NEXT: jal __addsf3188; SOFT-FLOAT-32R2-NEXT: move $5, $16189; SOFT-FLOAT-32R2-NEXT: lw $16, 16($sp) # 4-byte Folded Reload190; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload191; SOFT-FLOAT-32R2-NEXT: jr $ra192; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24193;194; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32:195; SOFT-FLOAT-64: # %bb.0:196; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16197; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16198; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill199; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill200; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8201; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16202; SOFT-FLOAT-64-NEXT: jal __mulsf3203; SOFT-FLOAT-64-NEXT: move $16, $6204; SOFT-FLOAT-64-NEXT: move $4, $2205; SOFT-FLOAT-64-NEXT: jal __addsf3206; SOFT-FLOAT-64-NEXT: move $5, $16207; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload208; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload209; SOFT-FLOAT-64-NEXT: jr $ra210; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16211;212; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f32:213; SOFT-FLOAT-64R2: # %bb.0:214; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16215; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16216; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill217; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill218; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8219; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16220; SOFT-FLOAT-64R2-NEXT: jal __mulsf3221; SOFT-FLOAT-64R2-NEXT: move $16, $6222; SOFT-FLOAT-64R2-NEXT: move $4, $2223; SOFT-FLOAT-64R2-NEXT: jal __addsf3224; SOFT-FLOAT-64R2-NEXT: move $5, $16225; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload226; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload227; SOFT-FLOAT-64R2-NEXT: jr $ra228; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16229 %product = fmul contract float %a, %b230 %result = fadd contract float %product, %c231 ret float %result232}233 234define double @fmuladd_contract_f64(double %a, double %b, double %c) #0 {235; SOFT-FLOAT-32-LABEL: fmuladd_contract_f64:236; SOFT-FLOAT-32: # %bb.0:237; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -24238; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24239; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill240; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4241; SOFT-FLOAT-32-NEXT: jal __muldf3242; SOFT-FLOAT-32-NEXT: nop243; SOFT-FLOAT-32-NEXT: move $4, $2244; SOFT-FLOAT-32-NEXT: lw $6, 40($sp)245; SOFT-FLOAT-32-NEXT: lw $7, 44($sp)246; SOFT-FLOAT-32-NEXT: jal __adddf3247; SOFT-FLOAT-32-NEXT: move $5, $3248; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload249; SOFT-FLOAT-32-NEXT: jr $ra250; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24251;252; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f64:253; SOFT-FLOAT-32R2: # %bb.0:254; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24255; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24256; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill257; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4258; SOFT-FLOAT-32R2-NEXT: jal __muldf3259; SOFT-FLOAT-32R2-NEXT: nop260; SOFT-FLOAT-32R2-NEXT: move $4, $2261; SOFT-FLOAT-32R2-NEXT: lw $6, 40($sp)262; SOFT-FLOAT-32R2-NEXT: lw $7, 44($sp)263; SOFT-FLOAT-32R2-NEXT: jal __adddf3264; SOFT-FLOAT-32R2-NEXT: move $5, $3265; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload266; SOFT-FLOAT-32R2-NEXT: jr $ra267; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24268;269; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64:270; SOFT-FLOAT-64: # %bb.0:271; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16272; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16273; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill274; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill275; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8276; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16277; SOFT-FLOAT-64-NEXT: jal __muldf3278; SOFT-FLOAT-64-NEXT: move $16, $6279; SOFT-FLOAT-64-NEXT: move $4, $2280; SOFT-FLOAT-64-NEXT: jal __adddf3281; SOFT-FLOAT-64-NEXT: move $5, $16282; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload283; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload284; SOFT-FLOAT-64-NEXT: jr $ra285; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16286;287; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f64:288; SOFT-FLOAT-64R2: # %bb.0:289; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16290; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16291; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill292; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill293; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8294; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16295; SOFT-FLOAT-64R2-NEXT: jal __muldf3296; SOFT-FLOAT-64R2-NEXT: move $16, $6297; SOFT-FLOAT-64R2-NEXT: move $4, $2298; SOFT-FLOAT-64R2-NEXT: jal __adddf3299; SOFT-FLOAT-64R2-NEXT: move $5, $16300; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload301; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload302; SOFT-FLOAT-64R2-NEXT: jr $ra303; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16304 %product = fmul contract double %a, %b305 %result = fadd contract double %product, %c306 ret double %result307}308 309define <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 {310; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f32:311; SOFT-FLOAT-32: # %bb.0:312; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -48313; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 48314; SOFT-FLOAT-32-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill315; SOFT-FLOAT-32-NEXT: sw $21, 40($sp) # 4-byte Folded Spill316; SOFT-FLOAT-32-NEXT: sw $20, 36($sp) # 4-byte Folded Spill317; SOFT-FLOAT-32-NEXT: sw $19, 32($sp) # 4-byte Folded Spill318; SOFT-FLOAT-32-NEXT: sw $18, 28($sp) # 4-byte Folded Spill319; SOFT-FLOAT-32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill320; SOFT-FLOAT-32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill321; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4322; SOFT-FLOAT-32-NEXT: .cfi_offset 21, -8323; SOFT-FLOAT-32-NEXT: .cfi_offset 20, -12324; SOFT-FLOAT-32-NEXT: .cfi_offset 19, -16325; SOFT-FLOAT-32-NEXT: .cfi_offset 18, -20326; SOFT-FLOAT-32-NEXT: .cfi_offset 17, -24327; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -28328; SOFT-FLOAT-32-NEXT: move $17, $7329; SOFT-FLOAT-32-NEXT: move $16, $4330; SOFT-FLOAT-32-NEXT: lw $4, 64($sp)331; SOFT-FLOAT-32-NEXT: lw $5, 80($sp)332; SOFT-FLOAT-32-NEXT: jal __mulsf3333; SOFT-FLOAT-32-NEXT: move $18, $6334; SOFT-FLOAT-32-NEXT: lw $5, 96($sp)335; SOFT-FLOAT-32-NEXT: jal __addsf3336; SOFT-FLOAT-32-NEXT: move $4, $2337; SOFT-FLOAT-32-NEXT: lw $4, 68($sp)338; SOFT-FLOAT-32-NEXT: lw $5, 84($sp)339; SOFT-FLOAT-32-NEXT: jal __mulsf3340; SOFT-FLOAT-32-NEXT: move $19, $2341; SOFT-FLOAT-32-NEXT: lw $5, 100($sp)342; SOFT-FLOAT-32-NEXT: jal __addsf3343; SOFT-FLOAT-32-NEXT: move $4, $2344; SOFT-FLOAT-32-NEXT: move $20, $2345; SOFT-FLOAT-32-NEXT: lw $5, 76($sp)346; SOFT-FLOAT-32-NEXT: jal __mulsf3347; SOFT-FLOAT-32-NEXT: move $4, $17348; SOFT-FLOAT-32-NEXT: move $4, $2349; SOFT-FLOAT-32-NEXT: lw $17, 88($sp)350; SOFT-FLOAT-32-NEXT: lw $21, 72($sp)351; SOFT-FLOAT-32-NEXT: lw $5, 92($sp)352; SOFT-FLOAT-32-NEXT: sw $20, 12($16)353; SOFT-FLOAT-32-NEXT: jal __addsf3354; SOFT-FLOAT-32-NEXT: sw $19, 8($16)355; SOFT-FLOAT-32-NEXT: sw $2, 4($16)356; SOFT-FLOAT-32-NEXT: move $4, $18357; SOFT-FLOAT-32-NEXT: jal __mulsf3358; SOFT-FLOAT-32-NEXT: move $5, $21359; SOFT-FLOAT-32-NEXT: move $4, $2360; SOFT-FLOAT-32-NEXT: jal __addsf3361; SOFT-FLOAT-32-NEXT: move $5, $17362; SOFT-FLOAT-32-NEXT: sw $2, 0($16)363; SOFT-FLOAT-32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload364; SOFT-FLOAT-32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload365; SOFT-FLOAT-32-NEXT: lw $18, 28($sp) # 4-byte Folded Reload366; SOFT-FLOAT-32-NEXT: lw $19, 32($sp) # 4-byte Folded Reload367; SOFT-FLOAT-32-NEXT: lw $20, 36($sp) # 4-byte Folded Reload368; SOFT-FLOAT-32-NEXT: lw $21, 40($sp) # 4-byte Folded Reload369; SOFT-FLOAT-32-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload370; SOFT-FLOAT-32-NEXT: jr $ra371; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 48372;373; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f32:374; SOFT-FLOAT-32R2: # %bb.0:375; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -48376; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 48377; SOFT-FLOAT-32R2-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill378; SOFT-FLOAT-32R2-NEXT: sw $21, 40($sp) # 4-byte Folded Spill379; SOFT-FLOAT-32R2-NEXT: sw $20, 36($sp) # 4-byte Folded Spill380; SOFT-FLOAT-32R2-NEXT: sw $19, 32($sp) # 4-byte Folded Spill381; SOFT-FLOAT-32R2-NEXT: sw $18, 28($sp) # 4-byte Folded Spill382; SOFT-FLOAT-32R2-NEXT: sw $17, 24($sp) # 4-byte Folded Spill383; SOFT-FLOAT-32R2-NEXT: sw $16, 20($sp) # 4-byte Folded Spill384; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4385; SOFT-FLOAT-32R2-NEXT: .cfi_offset 21, -8386; SOFT-FLOAT-32R2-NEXT: .cfi_offset 20, -12387; SOFT-FLOAT-32R2-NEXT: .cfi_offset 19, -16388; SOFT-FLOAT-32R2-NEXT: .cfi_offset 18, -20389; SOFT-FLOAT-32R2-NEXT: .cfi_offset 17, -24390; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -28391; SOFT-FLOAT-32R2-NEXT: move $17, $7392; SOFT-FLOAT-32R2-NEXT: move $16, $4393; SOFT-FLOAT-32R2-NEXT: lw $4, 64($sp)394; SOFT-FLOAT-32R2-NEXT: lw $5, 80($sp)395; SOFT-FLOAT-32R2-NEXT: jal __mulsf3396; SOFT-FLOAT-32R2-NEXT: move $18, $6397; SOFT-FLOAT-32R2-NEXT: lw $5, 96($sp)398; SOFT-FLOAT-32R2-NEXT: jal __addsf3399; SOFT-FLOAT-32R2-NEXT: move $4, $2400; SOFT-FLOAT-32R2-NEXT: lw $4, 68($sp)401; SOFT-FLOAT-32R2-NEXT: lw $5, 84($sp)402; SOFT-FLOAT-32R2-NEXT: jal __mulsf3403; SOFT-FLOAT-32R2-NEXT: move $19, $2404; SOFT-FLOAT-32R2-NEXT: lw $5, 100($sp)405; SOFT-FLOAT-32R2-NEXT: jal __addsf3406; SOFT-FLOAT-32R2-NEXT: move $4, $2407; SOFT-FLOAT-32R2-NEXT: move $20, $2408; SOFT-FLOAT-32R2-NEXT: lw $5, 76($sp)409; SOFT-FLOAT-32R2-NEXT: jal __mulsf3410; SOFT-FLOAT-32R2-NEXT: move $4, $17411; SOFT-FLOAT-32R2-NEXT: move $4, $2412; SOFT-FLOAT-32R2-NEXT: lw $17, 88($sp)413; SOFT-FLOAT-32R2-NEXT: lw $21, 72($sp)414; SOFT-FLOAT-32R2-NEXT: lw $5, 92($sp)415; SOFT-FLOAT-32R2-NEXT: sw $20, 12($16)416; SOFT-FLOAT-32R2-NEXT: jal __addsf3417; SOFT-FLOAT-32R2-NEXT: sw $19, 8($16)418; SOFT-FLOAT-32R2-NEXT: sw $2, 4($16)419; SOFT-FLOAT-32R2-NEXT: move $4, $18420; SOFT-FLOAT-32R2-NEXT: jal __mulsf3421; SOFT-FLOAT-32R2-NEXT: move $5, $21422; SOFT-FLOAT-32R2-NEXT: move $4, $2423; SOFT-FLOAT-32R2-NEXT: jal __addsf3424; SOFT-FLOAT-32R2-NEXT: move $5, $17425; SOFT-FLOAT-32R2-NEXT: sw $2, 0($16)426; SOFT-FLOAT-32R2-NEXT: lw $16, 20($sp) # 4-byte Folded Reload427; SOFT-FLOAT-32R2-NEXT: lw $17, 24($sp) # 4-byte Folded Reload428; SOFT-FLOAT-32R2-NEXT: lw $18, 28($sp) # 4-byte Folded Reload429; SOFT-FLOAT-32R2-NEXT: lw $19, 32($sp) # 4-byte Folded Reload430; SOFT-FLOAT-32R2-NEXT: lw $20, 36($sp) # 4-byte Folded Reload431; SOFT-FLOAT-32R2-NEXT: lw $21, 40($sp) # 4-byte Folded Reload432; SOFT-FLOAT-32R2-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload433; SOFT-FLOAT-32R2-NEXT: jr $ra434; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 48435;436; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32:437; SOFT-FLOAT-64: # %bb.0:438; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -80439; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 80440; SOFT-FLOAT-64-NEXT: sd $ra, 72($sp) # 8-byte Folded Spill441; SOFT-FLOAT-64-NEXT: sd $23, 64($sp) # 8-byte Folded Spill442; SOFT-FLOAT-64-NEXT: sd $22, 56($sp) # 8-byte Folded Spill443; SOFT-FLOAT-64-NEXT: sd $21, 48($sp) # 8-byte Folded Spill444; SOFT-FLOAT-64-NEXT: sd $20, 40($sp) # 8-byte Folded Spill445; SOFT-FLOAT-64-NEXT: sd $19, 32($sp) # 8-byte Folded Spill446; SOFT-FLOAT-64-NEXT: sd $18, 24($sp) # 8-byte Folded Spill447; SOFT-FLOAT-64-NEXT: sd $17, 16($sp) # 8-byte Folded Spill448; SOFT-FLOAT-64-NEXT: sd $16, 8($sp) # 8-byte Folded Spill449; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8450; SOFT-FLOAT-64-NEXT: .cfi_offset 23, -16451; SOFT-FLOAT-64-NEXT: .cfi_offset 22, -24452; SOFT-FLOAT-64-NEXT: .cfi_offset 21, -32453; SOFT-FLOAT-64-NEXT: .cfi_offset 20, -40454; SOFT-FLOAT-64-NEXT: .cfi_offset 19, -48455; SOFT-FLOAT-64-NEXT: .cfi_offset 18, -56456; SOFT-FLOAT-64-NEXT: .cfi_offset 17, -64457; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -72458; SOFT-FLOAT-64-NEXT: move $16, $9459; SOFT-FLOAT-64-NEXT: move $19, $8460; SOFT-FLOAT-64-NEXT: move $17, $7461; SOFT-FLOAT-64-NEXT: move $20, $6462; SOFT-FLOAT-64-NEXT: move $18, $5463; SOFT-FLOAT-64-NEXT: move $21, $4464; SOFT-FLOAT-64-NEXT: sll $4, $21, 0465; SOFT-FLOAT-64-NEXT: jal __mulsf3466; SOFT-FLOAT-64-NEXT: sll $5, $20, 0467; SOFT-FLOAT-64-NEXT: move $4, $2468; SOFT-FLOAT-64-NEXT: jal __addsf3469; SOFT-FLOAT-64-NEXT: sll $5, $19, 0470; SOFT-FLOAT-64-NEXT: move $22, $2471; SOFT-FLOAT-64-NEXT: sll $4, $18, 0472; SOFT-FLOAT-64-NEXT: jal __mulsf3473; SOFT-FLOAT-64-NEXT: sll $5, $17, 0474; SOFT-FLOAT-64-NEXT: move $23, $2475; SOFT-FLOAT-64-NEXT: dsrl $1, $21, 32476; SOFT-FLOAT-64-NEXT: sll $4, $1, 0477; SOFT-FLOAT-64-NEXT: dsrl $1, $20, 32478; SOFT-FLOAT-64-NEXT: jal __mulsf3479; SOFT-FLOAT-64-NEXT: sll $5, $1, 0480; SOFT-FLOAT-64-NEXT: move $4, $2481; SOFT-FLOAT-64-NEXT: dsll $1, $22, 32482; SOFT-FLOAT-64-NEXT: dsrl $2, $19, 32483; SOFT-FLOAT-64-NEXT: sll $5, $2, 0484; SOFT-FLOAT-64-NEXT: jal __addsf3485; SOFT-FLOAT-64-NEXT: dsrl $19, $1, 32486; SOFT-FLOAT-64-NEXT: # kill: def $v0 killed $v0 def $v0_64487; SOFT-FLOAT-64-NEXT: dsll $1, $2, 32488; SOFT-FLOAT-64-NEXT: sll $5, $16, 0489; SOFT-FLOAT-64-NEXT: or $19, $19, $1490; SOFT-FLOAT-64-NEXT: jal __addsf3491; SOFT-FLOAT-64-NEXT: move $4, $23492; SOFT-FLOAT-64-NEXT: move $20, $2493; SOFT-FLOAT-64-NEXT: dsrl $1, $18, 32494; SOFT-FLOAT-64-NEXT: sll $4, $1, 0495; SOFT-FLOAT-64-NEXT: dsrl $1, $17, 32496; SOFT-FLOAT-64-NEXT: jal __mulsf3497; SOFT-FLOAT-64-NEXT: sll $5, $1, 0498; SOFT-FLOAT-64-NEXT: move $4, $2499; SOFT-FLOAT-64-NEXT: dsll $1, $20, 32500; SOFT-FLOAT-64-NEXT: dsrl $17, $1, 32501; SOFT-FLOAT-64-NEXT: dsrl $1, $16, 32502; SOFT-FLOAT-64-NEXT: jal __addsf3503; SOFT-FLOAT-64-NEXT: sll $5, $1, 0504; SOFT-FLOAT-64-NEXT: # kill: def $v0 killed $v0 def $v0_64505; SOFT-FLOAT-64-NEXT: dsll $1, $2, 32506; SOFT-FLOAT-64-NEXT: or $3, $17, $1507; SOFT-FLOAT-64-NEXT: move $2, $19508; SOFT-FLOAT-64-NEXT: ld $16, 8($sp) # 8-byte Folded Reload509; SOFT-FLOAT-64-NEXT: ld $17, 16($sp) # 8-byte Folded Reload510; SOFT-FLOAT-64-NEXT: ld $18, 24($sp) # 8-byte Folded Reload511; SOFT-FLOAT-64-NEXT: ld $19, 32($sp) # 8-byte Folded Reload512; SOFT-FLOAT-64-NEXT: ld $20, 40($sp) # 8-byte Folded Reload513; SOFT-FLOAT-64-NEXT: ld $21, 48($sp) # 8-byte Folded Reload514; SOFT-FLOAT-64-NEXT: ld $22, 56($sp) # 8-byte Folded Reload515; SOFT-FLOAT-64-NEXT: ld $23, 64($sp) # 8-byte Folded Reload516; SOFT-FLOAT-64-NEXT: ld $ra, 72($sp) # 8-byte Folded Reload517; SOFT-FLOAT-64-NEXT: jr $ra518; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 80519;520; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f32:521; SOFT-FLOAT-64R2: # %bb.0:522; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -80523; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 80524; SOFT-FLOAT-64R2-NEXT: sd $ra, 72($sp) # 8-byte Folded Spill525; SOFT-FLOAT-64R2-NEXT: sd $23, 64($sp) # 8-byte Folded Spill526; SOFT-FLOAT-64R2-NEXT: sd $22, 56($sp) # 8-byte Folded Spill527; SOFT-FLOAT-64R2-NEXT: sd $21, 48($sp) # 8-byte Folded Spill528; SOFT-FLOAT-64R2-NEXT: sd $20, 40($sp) # 8-byte Folded Spill529; SOFT-FLOAT-64R2-NEXT: sd $19, 32($sp) # 8-byte Folded Spill530; SOFT-FLOAT-64R2-NEXT: sd $18, 24($sp) # 8-byte Folded Spill531; SOFT-FLOAT-64R2-NEXT: sd $17, 16($sp) # 8-byte Folded Spill532; SOFT-FLOAT-64R2-NEXT: sd $16, 8($sp) # 8-byte Folded Spill533; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8534; SOFT-FLOAT-64R2-NEXT: .cfi_offset 23, -16535; SOFT-FLOAT-64R2-NEXT: .cfi_offset 22, -24536; SOFT-FLOAT-64R2-NEXT: .cfi_offset 21, -32537; SOFT-FLOAT-64R2-NEXT: .cfi_offset 20, -40538; SOFT-FLOAT-64R2-NEXT: .cfi_offset 19, -48539; SOFT-FLOAT-64R2-NEXT: .cfi_offset 18, -56540; SOFT-FLOAT-64R2-NEXT: .cfi_offset 17, -64541; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -72542; SOFT-FLOAT-64R2-NEXT: move $16, $9543; SOFT-FLOAT-64R2-NEXT: move $19, $8544; SOFT-FLOAT-64R2-NEXT: move $17, $7545; SOFT-FLOAT-64R2-NEXT: move $20, $6546; SOFT-FLOAT-64R2-NEXT: move $18, $5547; SOFT-FLOAT-64R2-NEXT: move $21, $4548; SOFT-FLOAT-64R2-NEXT: sll $4, $21, 0549; SOFT-FLOAT-64R2-NEXT: jal __mulsf3550; SOFT-FLOAT-64R2-NEXT: sll $5, $20, 0551; SOFT-FLOAT-64R2-NEXT: move $4, $2552; SOFT-FLOAT-64R2-NEXT: jal __addsf3553; SOFT-FLOAT-64R2-NEXT: sll $5, $19, 0554; SOFT-FLOAT-64R2-NEXT: move $22, $2555; SOFT-FLOAT-64R2-NEXT: sll $4, $18, 0556; SOFT-FLOAT-64R2-NEXT: jal __mulsf3557; SOFT-FLOAT-64R2-NEXT: sll $5, $17, 0558; SOFT-FLOAT-64R2-NEXT: move $23, $2559; SOFT-FLOAT-64R2-NEXT: dsrl $1, $21, 32560; SOFT-FLOAT-64R2-NEXT: sll $4, $1, 0561; SOFT-FLOAT-64R2-NEXT: dsrl $1, $20, 32562; SOFT-FLOAT-64R2-NEXT: jal __mulsf3563; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0564; SOFT-FLOAT-64R2-NEXT: move $4, $2565; SOFT-FLOAT-64R2-NEXT: dsrl $1, $19, 32566; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0567; SOFT-FLOAT-64R2-NEXT: jal __addsf3568; SOFT-FLOAT-64R2-NEXT: dext $19, $22, 0, 32569; SOFT-FLOAT-64R2-NEXT: # kill: def $v0 killed $v0 def $v0_64570; SOFT-FLOAT-64R2-NEXT: dsll $1, $2, 32571; SOFT-FLOAT-64R2-NEXT: sll $5, $16, 0572; SOFT-FLOAT-64R2-NEXT: or $19, $19, $1573; SOFT-FLOAT-64R2-NEXT: jal __addsf3574; SOFT-FLOAT-64R2-NEXT: move $4, $23575; SOFT-FLOAT-64R2-NEXT: move $20, $2576; SOFT-FLOAT-64R2-NEXT: dsrl $1, $18, 32577; SOFT-FLOAT-64R2-NEXT: sll $4, $1, 0578; SOFT-FLOAT-64R2-NEXT: dsrl $1, $17, 32579; SOFT-FLOAT-64R2-NEXT: jal __mulsf3580; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0581; SOFT-FLOAT-64R2-NEXT: move $4, $2582; SOFT-FLOAT-64R2-NEXT: dext $17, $20, 0, 32583; SOFT-FLOAT-64R2-NEXT: dsrl $1, $16, 32584; SOFT-FLOAT-64R2-NEXT: jal __addsf3585; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0586; SOFT-FLOAT-64R2-NEXT: # kill: def $v0 killed $v0 def $v0_64587; SOFT-FLOAT-64R2-NEXT: dsll $1, $2, 32588; SOFT-FLOAT-64R2-NEXT: or $3, $17, $1589; SOFT-FLOAT-64R2-NEXT: move $2, $19590; SOFT-FLOAT-64R2-NEXT: ld $16, 8($sp) # 8-byte Folded Reload591; SOFT-FLOAT-64R2-NEXT: ld $17, 16($sp) # 8-byte Folded Reload592; SOFT-FLOAT-64R2-NEXT: ld $18, 24($sp) # 8-byte Folded Reload593; SOFT-FLOAT-64R2-NEXT: ld $19, 32($sp) # 8-byte Folded Reload594; SOFT-FLOAT-64R2-NEXT: ld $20, 40($sp) # 8-byte Folded Reload595; SOFT-FLOAT-64R2-NEXT: ld $21, 48($sp) # 8-byte Folded Reload596; SOFT-FLOAT-64R2-NEXT: ld $22, 56($sp) # 8-byte Folded Reload597; SOFT-FLOAT-64R2-NEXT: ld $23, 64($sp) # 8-byte Folded Reload598; SOFT-FLOAT-64R2-NEXT: ld $ra, 72($sp) # 8-byte Folded Reload599; SOFT-FLOAT-64R2-NEXT: jr $ra600; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 80601 %product = fmul contract <4 x float> %a, %b602 %result = fadd contract <4 x float> %product, %c603 ret <4 x float> %result604}605 606define <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 {607; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f64:608; SOFT-FLOAT-32: # %bb.0:609; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -64610; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 64611; SOFT-FLOAT-32-NEXT: sw $ra, 60($sp) # 4-byte Folded Spill612; SOFT-FLOAT-32-NEXT: sw $fp, 56($sp) # 4-byte Folded Spill613; SOFT-FLOAT-32-NEXT: sw $23, 52($sp) # 4-byte Folded Spill614; SOFT-FLOAT-32-NEXT: sw $22, 48($sp) # 4-byte Folded Spill615; SOFT-FLOAT-32-NEXT: sw $21, 44($sp) # 4-byte Folded Spill616; SOFT-FLOAT-32-NEXT: sw $20, 40($sp) # 4-byte Folded Spill617; SOFT-FLOAT-32-NEXT: sw $19, 36($sp) # 4-byte Folded Spill618; SOFT-FLOAT-32-NEXT: sw $18, 32($sp) # 4-byte Folded Spill619; SOFT-FLOAT-32-NEXT: sw $17, 28($sp) # 4-byte Folded Spill620; SOFT-FLOAT-32-NEXT: sw $16, 24($sp) # 4-byte Folded Spill621; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4622; SOFT-FLOAT-32-NEXT: .cfi_offset 30, -8623; SOFT-FLOAT-32-NEXT: .cfi_offset 23, -12624; SOFT-FLOAT-32-NEXT: .cfi_offset 22, -16625; SOFT-FLOAT-32-NEXT: .cfi_offset 21, -20626; SOFT-FLOAT-32-NEXT: .cfi_offset 20, -24627; SOFT-FLOAT-32-NEXT: .cfi_offset 19, -28628; SOFT-FLOAT-32-NEXT: .cfi_offset 18, -32629; SOFT-FLOAT-32-NEXT: .cfi_offset 17, -36630; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -40631; SOFT-FLOAT-32-NEXT: sw $7, 20($sp) # 4-byte Folded Spill632; SOFT-FLOAT-32-NEXT: sw $6, 16($sp) # 4-byte Folded Spill633; SOFT-FLOAT-32-NEXT: move $16, $4634; SOFT-FLOAT-32-NEXT: lw $4, 88($sp)635; SOFT-FLOAT-32-NEXT: lw $5, 92($sp)636; SOFT-FLOAT-32-NEXT: lw $6, 120($sp)637; SOFT-FLOAT-32-NEXT: lw $7, 124($sp)638; SOFT-FLOAT-32-NEXT: jal __muldf3639; SOFT-FLOAT-32-NEXT: nop640; SOFT-FLOAT-32-NEXT: move $4, $2641; SOFT-FLOAT-32-NEXT: lw $6, 152($sp)642; SOFT-FLOAT-32-NEXT: lw $7, 156($sp)643; SOFT-FLOAT-32-NEXT: jal __adddf3644; SOFT-FLOAT-32-NEXT: move $5, $3645; SOFT-FLOAT-32-NEXT: move $19, $2646; SOFT-FLOAT-32-NEXT: lw $4, 96($sp)647; SOFT-FLOAT-32-NEXT: lw $5, 100($sp)648; SOFT-FLOAT-32-NEXT: lw $6, 128($sp)649; SOFT-FLOAT-32-NEXT: lw $7, 132($sp)650; SOFT-FLOAT-32-NEXT: jal __muldf3651; SOFT-FLOAT-32-NEXT: move $20, $3652; SOFT-FLOAT-32-NEXT: move $4, $2653; SOFT-FLOAT-32-NEXT: lw $6, 160($sp)654; SOFT-FLOAT-32-NEXT: lw $7, 164($sp)655; SOFT-FLOAT-32-NEXT: jal __adddf3656; SOFT-FLOAT-32-NEXT: move $5, $3657; SOFT-FLOAT-32-NEXT: move $21, $2658; SOFT-FLOAT-32-NEXT: lw $4, 80($sp)659; SOFT-FLOAT-32-NEXT: lw $5, 84($sp)660; SOFT-FLOAT-32-NEXT: lw $6, 112($sp)661; SOFT-FLOAT-32-NEXT: lw $7, 116($sp)662; SOFT-FLOAT-32-NEXT: jal __muldf3663; SOFT-FLOAT-32-NEXT: move $22, $3664; SOFT-FLOAT-32-NEXT: move $4, $2665; SOFT-FLOAT-32-NEXT: move $5, $3666; SOFT-FLOAT-32-NEXT: lw $23, 140($sp)667; SOFT-FLOAT-32-NEXT: lw $fp, 136($sp)668; SOFT-FLOAT-32-NEXT: lw $17, 108($sp)669; SOFT-FLOAT-32-NEXT: lw $18, 104($sp)670; SOFT-FLOAT-32-NEXT: lw $7, 148($sp)671; SOFT-FLOAT-32-NEXT: lw $6, 144($sp)672; SOFT-FLOAT-32-NEXT: sw $22, 28($16)673; SOFT-FLOAT-32-NEXT: sw $21, 24($16)674; SOFT-FLOAT-32-NEXT: sw $20, 20($16)675; SOFT-FLOAT-32-NEXT: jal __adddf3676; SOFT-FLOAT-32-NEXT: sw $19, 16($16)677; SOFT-FLOAT-32-NEXT: sw $3, 12($16)678; SOFT-FLOAT-32-NEXT: sw $2, 8($16)679; SOFT-FLOAT-32-NEXT: lw $4, 16($sp) # 4-byte Folded Reload680; SOFT-FLOAT-32-NEXT: lw $5, 20($sp) # 4-byte Folded Reload681; SOFT-FLOAT-32-NEXT: move $6, $18682; SOFT-FLOAT-32-NEXT: jal __muldf3683; SOFT-FLOAT-32-NEXT: move $7, $17684; SOFT-FLOAT-32-NEXT: move $4, $2685; SOFT-FLOAT-32-NEXT: move $5, $3686; SOFT-FLOAT-32-NEXT: move $6, $fp687; SOFT-FLOAT-32-NEXT: jal __adddf3688; SOFT-FLOAT-32-NEXT: move $7, $23689; SOFT-FLOAT-32-NEXT: sw $3, 4($16)690; SOFT-FLOAT-32-NEXT: sw $2, 0($16)691; SOFT-FLOAT-32-NEXT: lw $16, 24($sp) # 4-byte Folded Reload692; SOFT-FLOAT-32-NEXT: lw $17, 28($sp) # 4-byte Folded Reload693; SOFT-FLOAT-32-NEXT: lw $18, 32($sp) # 4-byte Folded Reload694; SOFT-FLOAT-32-NEXT: lw $19, 36($sp) # 4-byte Folded Reload695; SOFT-FLOAT-32-NEXT: lw $20, 40($sp) # 4-byte Folded Reload696; SOFT-FLOAT-32-NEXT: lw $21, 44($sp) # 4-byte Folded Reload697; SOFT-FLOAT-32-NEXT: lw $22, 48($sp) # 4-byte Folded Reload698; SOFT-FLOAT-32-NEXT: lw $23, 52($sp) # 4-byte Folded Reload699; SOFT-FLOAT-32-NEXT: lw $fp, 56($sp) # 4-byte Folded Reload700; SOFT-FLOAT-32-NEXT: lw $ra, 60($sp) # 4-byte Folded Reload701; SOFT-FLOAT-32-NEXT: jr $ra702; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 64703;704; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f64:705; SOFT-FLOAT-32R2: # %bb.0:706; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -64707; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 64708; SOFT-FLOAT-32R2-NEXT: sw $ra, 60($sp) # 4-byte Folded Spill709; SOFT-FLOAT-32R2-NEXT: sw $fp, 56($sp) # 4-byte Folded Spill710; SOFT-FLOAT-32R2-NEXT: sw $23, 52($sp) # 4-byte Folded Spill711; SOFT-FLOAT-32R2-NEXT: sw $22, 48($sp) # 4-byte Folded Spill712; SOFT-FLOAT-32R2-NEXT: sw $21, 44($sp) # 4-byte Folded Spill713; SOFT-FLOAT-32R2-NEXT: sw $20, 40($sp) # 4-byte Folded Spill714; SOFT-FLOAT-32R2-NEXT: sw $19, 36($sp) # 4-byte Folded Spill715; SOFT-FLOAT-32R2-NEXT: sw $18, 32($sp) # 4-byte Folded Spill716; SOFT-FLOAT-32R2-NEXT: sw $17, 28($sp) # 4-byte Folded Spill717; SOFT-FLOAT-32R2-NEXT: sw $16, 24($sp) # 4-byte Folded Spill718; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4719; SOFT-FLOAT-32R2-NEXT: .cfi_offset 30, -8720; SOFT-FLOAT-32R2-NEXT: .cfi_offset 23, -12721; SOFT-FLOAT-32R2-NEXT: .cfi_offset 22, -16722; SOFT-FLOAT-32R2-NEXT: .cfi_offset 21, -20723; SOFT-FLOAT-32R2-NEXT: .cfi_offset 20, -24724; SOFT-FLOAT-32R2-NEXT: .cfi_offset 19, -28725; SOFT-FLOAT-32R2-NEXT: .cfi_offset 18, -32726; SOFT-FLOAT-32R2-NEXT: .cfi_offset 17, -36727; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -40728; SOFT-FLOAT-32R2-NEXT: sw $7, 20($sp) # 4-byte Folded Spill729; SOFT-FLOAT-32R2-NEXT: sw $6, 16($sp) # 4-byte Folded Spill730; SOFT-FLOAT-32R2-NEXT: move $16, $4731; SOFT-FLOAT-32R2-NEXT: lw $4, 88($sp)732; SOFT-FLOAT-32R2-NEXT: lw $5, 92($sp)733; SOFT-FLOAT-32R2-NEXT: lw $6, 120($sp)734; SOFT-FLOAT-32R2-NEXT: lw $7, 124($sp)735; SOFT-FLOAT-32R2-NEXT: jal __muldf3736; SOFT-FLOAT-32R2-NEXT: nop737; SOFT-FLOAT-32R2-NEXT: move $4, $2738; SOFT-FLOAT-32R2-NEXT: lw $6, 152($sp)739; SOFT-FLOAT-32R2-NEXT: lw $7, 156($sp)740; SOFT-FLOAT-32R2-NEXT: jal __adddf3741; SOFT-FLOAT-32R2-NEXT: move $5, $3742; SOFT-FLOAT-32R2-NEXT: move $19, $2743; SOFT-FLOAT-32R2-NEXT: lw $4, 96($sp)744; SOFT-FLOAT-32R2-NEXT: lw $5, 100($sp)745; SOFT-FLOAT-32R2-NEXT: lw $6, 128($sp)746; SOFT-FLOAT-32R2-NEXT: lw $7, 132($sp)747; SOFT-FLOAT-32R2-NEXT: jal __muldf3748; SOFT-FLOAT-32R2-NEXT: move $20, $3749; SOFT-FLOAT-32R2-NEXT: move $4, $2750; SOFT-FLOAT-32R2-NEXT: lw $6, 160($sp)751; SOFT-FLOAT-32R2-NEXT: lw $7, 164($sp)752; SOFT-FLOAT-32R2-NEXT: jal __adddf3753; SOFT-FLOAT-32R2-NEXT: move $5, $3754; SOFT-FLOAT-32R2-NEXT: move $21, $2755; SOFT-FLOAT-32R2-NEXT: lw $4, 80($sp)756; SOFT-FLOAT-32R2-NEXT: lw $5, 84($sp)757; SOFT-FLOAT-32R2-NEXT: lw $6, 112($sp)758; SOFT-FLOAT-32R2-NEXT: lw $7, 116($sp)759; SOFT-FLOAT-32R2-NEXT: jal __muldf3760; SOFT-FLOAT-32R2-NEXT: move $22, $3761; SOFT-FLOAT-32R2-NEXT: move $4, $2762; SOFT-FLOAT-32R2-NEXT: move $5, $3763; SOFT-FLOAT-32R2-NEXT: lw $23, 140($sp)764; SOFT-FLOAT-32R2-NEXT: lw $fp, 136($sp)765; SOFT-FLOAT-32R2-NEXT: lw $17, 108($sp)766; SOFT-FLOAT-32R2-NEXT: lw $18, 104($sp)767; SOFT-FLOAT-32R2-NEXT: lw $7, 148($sp)768; SOFT-FLOAT-32R2-NEXT: lw $6, 144($sp)769; SOFT-FLOAT-32R2-NEXT: sw $22, 28($16)770; SOFT-FLOAT-32R2-NEXT: sw $21, 24($16)771; SOFT-FLOAT-32R2-NEXT: sw $20, 20($16)772; SOFT-FLOAT-32R2-NEXT: jal __adddf3773; SOFT-FLOAT-32R2-NEXT: sw $19, 16($16)774; SOFT-FLOAT-32R2-NEXT: sw $3, 12($16)775; SOFT-FLOAT-32R2-NEXT: sw $2, 8($16)776; SOFT-FLOAT-32R2-NEXT: lw $4, 16($sp) # 4-byte Folded Reload777; SOFT-FLOAT-32R2-NEXT: lw $5, 20($sp) # 4-byte Folded Reload778; SOFT-FLOAT-32R2-NEXT: move $6, $18779; SOFT-FLOAT-32R2-NEXT: jal __muldf3780; SOFT-FLOAT-32R2-NEXT: move $7, $17781; SOFT-FLOAT-32R2-NEXT: move $4, $2782; SOFT-FLOAT-32R2-NEXT: move $5, $3783; SOFT-FLOAT-32R2-NEXT: move $6, $fp784; SOFT-FLOAT-32R2-NEXT: jal __adddf3785; SOFT-FLOAT-32R2-NEXT: move $7, $23786; SOFT-FLOAT-32R2-NEXT: sw $3, 4($16)787; SOFT-FLOAT-32R2-NEXT: sw $2, 0($16)788; SOFT-FLOAT-32R2-NEXT: lw $16, 24($sp) # 4-byte Folded Reload789; SOFT-FLOAT-32R2-NEXT: lw $17, 28($sp) # 4-byte Folded Reload790; SOFT-FLOAT-32R2-NEXT: lw $18, 32($sp) # 4-byte Folded Reload791; SOFT-FLOAT-32R2-NEXT: lw $19, 36($sp) # 4-byte Folded Reload792; SOFT-FLOAT-32R2-NEXT: lw $20, 40($sp) # 4-byte Folded Reload793; SOFT-FLOAT-32R2-NEXT: lw $21, 44($sp) # 4-byte Folded Reload794; SOFT-FLOAT-32R2-NEXT: lw $22, 48($sp) # 4-byte Folded Reload795; SOFT-FLOAT-32R2-NEXT: lw $23, 52($sp) # 4-byte Folded Reload796; SOFT-FLOAT-32R2-NEXT: lw $fp, 56($sp) # 4-byte Folded Reload797; SOFT-FLOAT-32R2-NEXT: lw $ra, 60($sp) # 4-byte Folded Reload798; SOFT-FLOAT-32R2-NEXT: jr $ra799; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 64800;801; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64:802; SOFT-FLOAT-64: # %bb.0:803; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -64804; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 64805; SOFT-FLOAT-64-NEXT: sd $ra, 56($sp) # 8-byte Folded Spill806; SOFT-FLOAT-64-NEXT: sd $22, 48($sp) # 8-byte Folded Spill807; SOFT-FLOAT-64-NEXT: sd $21, 40($sp) # 8-byte Folded Spill808; SOFT-FLOAT-64-NEXT: sd $20, 32($sp) # 8-byte Folded Spill809; SOFT-FLOAT-64-NEXT: sd $19, 24($sp) # 8-byte Folded Spill810; SOFT-FLOAT-64-NEXT: sd $18, 16($sp) # 8-byte Folded Spill811; SOFT-FLOAT-64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill812; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill813; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8814; SOFT-FLOAT-64-NEXT: .cfi_offset 22, -16815; SOFT-FLOAT-64-NEXT: .cfi_offset 21, -24816; SOFT-FLOAT-64-NEXT: .cfi_offset 20, -32817; SOFT-FLOAT-64-NEXT: .cfi_offset 19, -40818; SOFT-FLOAT-64-NEXT: .cfi_offset 18, -48819; SOFT-FLOAT-64-NEXT: .cfi_offset 17, -56820; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -64821; SOFT-FLOAT-64-NEXT: move $17, $10822; SOFT-FLOAT-64-NEXT: move $18, $9823; SOFT-FLOAT-64-NEXT: move $19, $8824; SOFT-FLOAT-64-NEXT: move $20, $6825; SOFT-FLOAT-64-NEXT: move $21, $5826; SOFT-FLOAT-64-NEXT: move $16, $4827; SOFT-FLOAT-64-NEXT: move $4, $7828; SOFT-FLOAT-64-NEXT: jal __muldf3829; SOFT-FLOAT-64-NEXT: move $5, $11830; SOFT-FLOAT-64-NEXT: ld $5, 88($sp)831; SOFT-FLOAT-64-NEXT: jal __adddf3832; SOFT-FLOAT-64-NEXT: move $4, $2833; SOFT-FLOAT-64-NEXT: move $22, $2834; SOFT-FLOAT-64-NEXT: ld $5, 64($sp)835; SOFT-FLOAT-64-NEXT: jal __muldf3836; SOFT-FLOAT-64-NEXT: move $4, $19837; SOFT-FLOAT-64-NEXT: ld $5, 96($sp)838; SOFT-FLOAT-64-NEXT: jal __adddf3839; SOFT-FLOAT-64-NEXT: move $4, $2840; SOFT-FLOAT-64-NEXT: move $19, $2841; SOFT-FLOAT-64-NEXT: move $4, $20842; SOFT-FLOAT-64-NEXT: jal __muldf3843; SOFT-FLOAT-64-NEXT: move $5, $17844; SOFT-FLOAT-64-NEXT: move $4, $2845; SOFT-FLOAT-64-NEXT: ld $17, 72($sp)846; SOFT-FLOAT-64-NEXT: ld $5, 80($sp)847; SOFT-FLOAT-64-NEXT: sd $19, 24($16)848; SOFT-FLOAT-64-NEXT: jal __adddf3849; SOFT-FLOAT-64-NEXT: sd $22, 16($16)850; SOFT-FLOAT-64-NEXT: sd $2, 8($16)851; SOFT-FLOAT-64-NEXT: move $4, $21852; SOFT-FLOAT-64-NEXT: jal __muldf3853; SOFT-FLOAT-64-NEXT: move $5, $18854; SOFT-FLOAT-64-NEXT: move $4, $2855; SOFT-FLOAT-64-NEXT: jal __adddf3856; SOFT-FLOAT-64-NEXT: move $5, $17857; SOFT-FLOAT-64-NEXT: sd $2, 0($16)858; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload859; SOFT-FLOAT-64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload860; SOFT-FLOAT-64-NEXT: ld $18, 16($sp) # 8-byte Folded Reload861; SOFT-FLOAT-64-NEXT: ld $19, 24($sp) # 8-byte Folded Reload862; SOFT-FLOAT-64-NEXT: ld $20, 32($sp) # 8-byte Folded Reload863; SOFT-FLOAT-64-NEXT: ld $21, 40($sp) # 8-byte Folded Reload864; SOFT-FLOAT-64-NEXT: ld $22, 48($sp) # 8-byte Folded Reload865; SOFT-FLOAT-64-NEXT: ld $ra, 56($sp) # 8-byte Folded Reload866; SOFT-FLOAT-64-NEXT: jr $ra867; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 64868;869; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f64:870; SOFT-FLOAT-64R2: # %bb.0:871; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -64872; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 64873; SOFT-FLOAT-64R2-NEXT: sd $ra, 56($sp) # 8-byte Folded Spill874; SOFT-FLOAT-64R2-NEXT: sd $22, 48($sp) # 8-byte Folded Spill875; SOFT-FLOAT-64R2-NEXT: sd $21, 40($sp) # 8-byte Folded Spill876; SOFT-FLOAT-64R2-NEXT: sd $20, 32($sp) # 8-byte Folded Spill877; SOFT-FLOAT-64R2-NEXT: sd $19, 24($sp) # 8-byte Folded Spill878; SOFT-FLOAT-64R2-NEXT: sd $18, 16($sp) # 8-byte Folded Spill879; SOFT-FLOAT-64R2-NEXT: sd $17, 8($sp) # 8-byte Folded Spill880; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill881; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8882; SOFT-FLOAT-64R2-NEXT: .cfi_offset 22, -16883; SOFT-FLOAT-64R2-NEXT: .cfi_offset 21, -24884; SOFT-FLOAT-64R2-NEXT: .cfi_offset 20, -32885; SOFT-FLOAT-64R2-NEXT: .cfi_offset 19, -40886; SOFT-FLOAT-64R2-NEXT: .cfi_offset 18, -48887; SOFT-FLOAT-64R2-NEXT: .cfi_offset 17, -56888; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -64889; SOFT-FLOAT-64R2-NEXT: move $17, $10890; SOFT-FLOAT-64R2-NEXT: move $18, $9891; SOFT-FLOAT-64R2-NEXT: move $19, $8892; SOFT-FLOAT-64R2-NEXT: move $20, $6893; SOFT-FLOAT-64R2-NEXT: move $21, $5894; SOFT-FLOAT-64R2-NEXT: move $16, $4895; SOFT-FLOAT-64R2-NEXT: move $4, $7896; SOFT-FLOAT-64R2-NEXT: jal __muldf3897; SOFT-FLOAT-64R2-NEXT: move $5, $11898; SOFT-FLOAT-64R2-NEXT: ld $5, 88($sp)899; SOFT-FLOAT-64R2-NEXT: jal __adddf3900; SOFT-FLOAT-64R2-NEXT: move $4, $2901; SOFT-FLOAT-64R2-NEXT: move $22, $2902; SOFT-FLOAT-64R2-NEXT: ld $5, 64($sp)903; SOFT-FLOAT-64R2-NEXT: jal __muldf3904; SOFT-FLOAT-64R2-NEXT: move $4, $19905; SOFT-FLOAT-64R2-NEXT: ld $5, 96($sp)906; SOFT-FLOAT-64R2-NEXT: jal __adddf3907; SOFT-FLOAT-64R2-NEXT: move $4, $2908; SOFT-FLOAT-64R2-NEXT: move $19, $2909; SOFT-FLOAT-64R2-NEXT: move $4, $20910; SOFT-FLOAT-64R2-NEXT: jal __muldf3911; SOFT-FLOAT-64R2-NEXT: move $5, $17912; SOFT-FLOAT-64R2-NEXT: move $4, $2913; SOFT-FLOAT-64R2-NEXT: ld $17, 72($sp)914; SOFT-FLOAT-64R2-NEXT: ld $5, 80($sp)915; SOFT-FLOAT-64R2-NEXT: sd $19, 24($16)916; SOFT-FLOAT-64R2-NEXT: jal __adddf3917; SOFT-FLOAT-64R2-NEXT: sd $22, 16($16)918; SOFT-FLOAT-64R2-NEXT: sd $2, 8($16)919; SOFT-FLOAT-64R2-NEXT: move $4, $21920; SOFT-FLOAT-64R2-NEXT: jal __muldf3921; SOFT-FLOAT-64R2-NEXT: move $5, $18922; SOFT-FLOAT-64R2-NEXT: move $4, $2923; SOFT-FLOAT-64R2-NEXT: jal __adddf3924; SOFT-FLOAT-64R2-NEXT: move $5, $17925; SOFT-FLOAT-64R2-NEXT: sd $2, 0($16)926; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload927; SOFT-FLOAT-64R2-NEXT: ld $17, 8($sp) # 8-byte Folded Reload928; SOFT-FLOAT-64R2-NEXT: ld $18, 16($sp) # 8-byte Folded Reload929; SOFT-FLOAT-64R2-NEXT: ld $19, 24($sp) # 8-byte Folded Reload930; SOFT-FLOAT-64R2-NEXT: ld $20, 32($sp) # 8-byte Folded Reload931; SOFT-FLOAT-64R2-NEXT: ld $21, 40($sp) # 8-byte Folded Reload932; SOFT-FLOAT-64R2-NEXT: ld $22, 48($sp) # 8-byte Folded Reload933; SOFT-FLOAT-64R2-NEXT: ld $ra, 56($sp) # 8-byte Folded Reload934; SOFT-FLOAT-64R2-NEXT: jr $ra935; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 64936 %product = fmul contract <4 x double> %a, %b937 %result = fadd contract <4 x double> %product, %c938 ret <4 x double> %result939}940 941attributes #0 = { "use-soft-float"="true" }942 943declare float @llvm.fmuladd.f32(float %a, float %b, float %c)944declare double @llvm.fmuladd.f64(double %a, double %b, double %c)945