1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -mtriple=sparc < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32 3; RUN: llc -mtriple=sparc64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64 4 5define float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 { 6; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f32: 7; SOFT-FLOAT-32: .cfi_startproc 8; SOFT-FLOAT-32-NEXT: ! %bb.0: 9; SOFT-FLOAT-32-NEXT: save %sp, -96, %sp 10; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_register %fp 11; SOFT-FLOAT-32-NEXT: .cfi_window_save 12; SOFT-FLOAT-32-NEXT: .cfi_register %o7, %i7 13; SOFT-FLOAT-32-NEXT: mov %i0, %o0 14; SOFT-FLOAT-32-NEXT: call __mulsf3 15; SOFT-FLOAT-32-NEXT: mov %i1, %o1 16; SOFT-FLOAT-32-NEXT: call __addsf3 17; SOFT-FLOAT-32-NEXT: mov %i2, %o1 18; SOFT-FLOAT-32-NEXT: ret 19; SOFT-FLOAT-32-NEXT: restore %g0, %o0, %o0 20; 21; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32: 22; SOFT-FLOAT-64: .cfi_startproc 23; SOFT-FLOAT-64-NEXT: ! %bb.0: 24; SOFT-FLOAT-64-NEXT: save %sp, -176, %sp 25; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_register %fp 26; SOFT-FLOAT-64-NEXT: .cfi_window_save 27; SOFT-FLOAT-64-NEXT: .cfi_register %o7, %i7 28; SOFT-FLOAT-64-NEXT: srl %i0, 0, %o0 29; SOFT-FLOAT-64-NEXT: call __mulsf3 30; SOFT-FLOAT-64-NEXT: srl %i1, 0, %o1 31; SOFT-FLOAT-64-NEXT: call __addsf3 32; SOFT-FLOAT-64-NEXT: srl %i2, 0, %o1 33; SOFT-FLOAT-64-NEXT: ret 34; SOFT-FLOAT-64-NEXT: restore %g0, %o0, %o0 35 %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c) 36 ret float %result 37} 38 39define double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 { 40; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f64: 41; SOFT-FLOAT-32: .cfi_startproc 42; SOFT-FLOAT-32-NEXT: ! %bb.0: 43; SOFT-FLOAT-32-NEXT: save %sp, -96, %sp 44; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_register %fp 45; SOFT-FLOAT-32-NEXT: .cfi_window_save 46; SOFT-FLOAT-32-NEXT: .cfi_register %o7, %i7 47; SOFT-FLOAT-32-NEXT: mov %i0, %o0 48; SOFT-FLOAT-32-NEXT: mov %i1, %o1 49; SOFT-FLOAT-32-NEXT: mov %i2, %o2 50; SOFT-FLOAT-32-NEXT: call __muldf3 51; SOFT-FLOAT-32-NEXT: mov %i3, %o3 52; SOFT-FLOAT-32-NEXT: mov %i4, %o2 53; SOFT-FLOAT-32-NEXT: call __adddf3 54; SOFT-FLOAT-32-NEXT: mov %i5, %o3 55; SOFT-FLOAT-32-NEXT: mov %o0, %i0 56; SOFT-FLOAT-32-NEXT: ret 57; SOFT-FLOAT-32-NEXT: restore %g0, %o1, %o1 58; 59; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64: 60; SOFT-FLOAT-64: .cfi_startproc 61; SOFT-FLOAT-64-NEXT: ! %bb.0: 62; SOFT-FLOAT-64-NEXT: save %sp, -176, %sp 63; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_register %fp 64; SOFT-FLOAT-64-NEXT: .cfi_window_save 65; SOFT-FLOAT-64-NEXT: .cfi_register %o7, %i7 66; SOFT-FLOAT-64-NEXT: mov %i0, %o0 67; SOFT-FLOAT-64-NEXT: call __muldf3 68; SOFT-FLOAT-64-NEXT: mov %i1, %o1 69; SOFT-FLOAT-64-NEXT: call __adddf3 70; SOFT-FLOAT-64-NEXT: mov %i2, %o1 71; SOFT-FLOAT-64-NEXT: ret 72; SOFT-FLOAT-64-NEXT: restore %g0, %o0, %o0 73 %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c) 74 ret double %result 75} 76 77define float @fmuladd_contract_f32(float %a, float %b, float %c) #0 { 78; SOFT-FLOAT-32-LABEL: fmuladd_contract_f32: 79; SOFT-FLOAT-32: .cfi_startproc 80; SOFT-FLOAT-32-NEXT: ! %bb.0: 81; SOFT-FLOAT-32-NEXT: save %sp, -96, %sp 82; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_register %fp 83; SOFT-FLOAT-32-NEXT: .cfi_window_save 84; SOFT-FLOAT-32-NEXT: .cfi_register %o7, %i7 85; SOFT-FLOAT-32-NEXT: mov %i0, %o0 86; SOFT-FLOAT-32-NEXT: call __mulsf3 87; SOFT-FLOAT-32-NEXT: mov %i1, %o1 88; SOFT-FLOAT-32-NEXT: call __addsf3 89; SOFT-FLOAT-32-NEXT: mov %i2, %o1 90; SOFT-FLOAT-32-NEXT: ret 91; SOFT-FLOAT-32-NEXT: restore %g0, %o0, %o0 92; 93; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32: 94; SOFT-FLOAT-64: .cfi_startproc 95; SOFT-FLOAT-64-NEXT: ! %bb.0: 96; SOFT-FLOAT-64-NEXT: save %sp, -176, %sp 97; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_register %fp 98; SOFT-FLOAT-64-NEXT: .cfi_window_save 99; SOFT-FLOAT-64-NEXT: .cfi_register %o7, %i7 100; SOFT-FLOAT-64-NEXT: srl %i0, 0, %o0 101; SOFT-FLOAT-64-NEXT: call __mulsf3 102; SOFT-FLOAT-64-NEXT: srl %i1, 0, %o1 103; SOFT-FLOAT-64-NEXT: call __addsf3 104; SOFT-FLOAT-64-NEXT: srl %i2, 0, %o1 105; SOFT-FLOAT-64-NEXT: ret 106; SOFT-FLOAT-64-NEXT: restore %g0, %o0, %o0 107 %product = fmul contract float %a, %b 108 %result = fadd contract float %product, %c 109 ret float %result 110} 111 112define double @fmuladd_contract_f64(double %a, double %b, double %c) #0 { 113; SOFT-FLOAT-32-LABEL: fmuladd_contract_f64: 114; SOFT-FLOAT-32: .cfi_startproc 115; SOFT-FLOAT-32-NEXT: ! %bb.0: 116; SOFT-FLOAT-32-NEXT: save %sp, -96, %sp 117; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_register %fp 118; SOFT-FLOAT-32-NEXT: .cfi_window_save 119; SOFT-FLOAT-32-NEXT: .cfi_register %o7, %i7 120; SOFT-FLOAT-32-NEXT: mov %i0, %o0 121; SOFT-FLOAT-32-NEXT: mov %i1, %o1 122; SOFT-FLOAT-32-NEXT: mov %i2, %o2 123; SOFT-FLOAT-32-NEXT: call __muldf3 124; SOFT-FLOAT-32-NEXT: mov %i3, %o3 125; SOFT-FLOAT-32-NEXT: mov %i4, %o2 126; SOFT-FLOAT-32-NEXT: call __adddf3 127; SOFT-FLOAT-32-NEXT: mov %i5, %o3 128; SOFT-FLOAT-32-NEXT: mov %o0, %i0 129; SOFT-FLOAT-32-NEXT: ret 130; SOFT-FLOAT-32-NEXT: restore %g0, %o1, %o1 131; 132; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64: 133; SOFT-FLOAT-64: .cfi_startproc 134; SOFT-FLOAT-64-NEXT: ! %bb.0: 135; SOFT-FLOAT-64-NEXT: save %sp, -176, %sp 136; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_register %fp 137; SOFT-FLOAT-64-NEXT: .cfi_window_save 138; SOFT-FLOAT-64-NEXT: .cfi_register %o7, %i7 139; SOFT-FLOAT-64-NEXT: mov %i0, %o0 140; SOFT-FLOAT-64-NEXT: call __muldf3 141; SOFT-FLOAT-64-NEXT: mov %i1, %o1 142; SOFT-FLOAT-64-NEXT: call __adddf3 143; SOFT-FLOAT-64-NEXT: mov %i2, %o1 144; SOFT-FLOAT-64-NEXT: ret 145; SOFT-FLOAT-64-NEXT: restore %g0, %o0, %o0 146 %product = fmul contract double %a, %b 147 %result = fadd contract double %product, %c 148 ret double %result 149} 150 151define <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 { 152; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f32: 153; SOFT-FLOAT-32: .cfi_startproc 154; SOFT-FLOAT-32-NEXT: ! %bb.0: 155; SOFT-FLOAT-32-NEXT: save %sp, -96, %sp 156; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_register %fp 157; SOFT-FLOAT-32-NEXT: .cfi_window_save 158; SOFT-FLOAT-32-NEXT: .cfi_register %o7, %i7 159; SOFT-FLOAT-32-NEXT: ld [%fp+100], %l0 160; SOFT-FLOAT-32-NEXT: ld [%fp+104], %l1 161; SOFT-FLOAT-32-NEXT: ld [%fp+108], %l2 162; SOFT-FLOAT-32-NEXT: ld [%fp+112], %l3 163; SOFT-FLOAT-32-NEXT: ld [%fp+96], %l4 164; SOFT-FLOAT-32-NEXT: ld [%fp+92], %l5 165; SOFT-FLOAT-32-NEXT: mov %i0, %o0 166; SOFT-FLOAT-32-NEXT: call __mulsf3 167; SOFT-FLOAT-32-NEXT: mov %i4, %o1 168; SOFT-FLOAT-32-NEXT: mov %o0, %l6 169; SOFT-FLOAT-32-NEXT: mov %i1, %o0 170; SOFT-FLOAT-32-NEXT: call __mulsf3 171; SOFT-FLOAT-32-NEXT: mov %i5, %o1 172; SOFT-FLOAT-32-NEXT: mov %o0, %i1 173; SOFT-FLOAT-32-NEXT: mov %i2, %o0 174; SOFT-FLOAT-32-NEXT: call __mulsf3 175; SOFT-FLOAT-32-NEXT: mov %l5, %o1 176; SOFT-FLOAT-32-NEXT: mov %o0, %i4 177; SOFT-FLOAT-32-NEXT: mov %i3, %o0 178; SOFT-FLOAT-32-NEXT: call __mulsf3 179; SOFT-FLOAT-32-NEXT: mov %l4, %o1 180; SOFT-FLOAT-32-NEXT: call __addsf3 181; SOFT-FLOAT-32-NEXT: mov %l3, %o1 182; SOFT-FLOAT-32-NEXT: mov %o0, %i3 183; SOFT-FLOAT-32-NEXT: mov %i4, %o0 184; SOFT-FLOAT-32-NEXT: call __addsf3 185; SOFT-FLOAT-32-NEXT: mov %l2, %o1 186; SOFT-FLOAT-32-NEXT: mov %o0, %i2 187; SOFT-FLOAT-32-NEXT: mov %i1, %o0 188; SOFT-FLOAT-32-NEXT: call __addsf3 189; SOFT-FLOAT-32-NEXT: mov %l1, %o1 190; SOFT-FLOAT-32-NEXT: mov %o0, %i1 191; SOFT-FLOAT-32-NEXT: mov %l6, %o0 192; SOFT-FLOAT-32-NEXT: call __addsf3 193; SOFT-FLOAT-32-NEXT: mov %l0, %o1 194; SOFT-FLOAT-32-NEXT: ret 195; SOFT-FLOAT-32-NEXT: restore %g0, %o0, %o0 196; 197; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32: 198; SOFT-FLOAT-64: .cfi_startproc 199; SOFT-FLOAT-64-NEXT: ! %bb.0: 200; SOFT-FLOAT-64-NEXT: save %sp, -176, %sp 201; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_register %fp 202; SOFT-FLOAT-64-NEXT: .cfi_window_save 203; SOFT-FLOAT-64-NEXT: .cfi_register %o7, %i7 204; SOFT-FLOAT-64-NEXT: ld [%fp+2267], %l0 205; SOFT-FLOAT-64-NEXT: ld [%fp+2259], %l1 206; SOFT-FLOAT-64-NEXT: ld [%fp+2251], %l2 207; SOFT-FLOAT-64-NEXT: ld [%fp+2243], %l3 208; SOFT-FLOAT-64-NEXT: ld [%fp+2227], %l4 209; SOFT-FLOAT-64-NEXT: ld [%fp+2235], %o1 210; SOFT-FLOAT-64-NEXT: call __mulsf3 211; SOFT-FLOAT-64-NEXT: srl %i3, 0, %o0 212; SOFT-FLOAT-64-NEXT: mov %o0, %i3 213; SOFT-FLOAT-64-NEXT: srl %i2, 0, %o0 214; SOFT-FLOAT-64-NEXT: call __mulsf3 215; SOFT-FLOAT-64-NEXT: mov %l4, %o1 216; SOFT-FLOAT-64-NEXT: mov %o0, %i2 217; SOFT-FLOAT-64-NEXT: srl %i1, 0, %o0 218; SOFT-FLOAT-64-NEXT: call __mulsf3 219; SOFT-FLOAT-64-NEXT: srl %i5, 0, %o1 220; SOFT-FLOAT-64-NEXT: mov %o0, %i1 221; SOFT-FLOAT-64-NEXT: srl %i0, 0, %o0 222; SOFT-FLOAT-64-NEXT: call __mulsf3 223; SOFT-FLOAT-64-NEXT: srl %i4, 0, %o1 224; SOFT-FLOAT-64-NEXT: call __addsf3 225; SOFT-FLOAT-64-NEXT: mov %l3, %o1 226; SOFT-FLOAT-64-NEXT: mov %o0, %i0 227; SOFT-FLOAT-64-NEXT: mov %i1, %o0 228; SOFT-FLOAT-64-NEXT: call __addsf3 229; SOFT-FLOAT-64-NEXT: mov %l2, %o1 230; SOFT-FLOAT-64-NEXT: mov %o0, %i1 231; SOFT-FLOAT-64-NEXT: mov %i2, %o0 232; SOFT-FLOAT-64-NEXT: call __addsf3 233; SOFT-FLOAT-64-NEXT: mov %l1, %o1 234; SOFT-FLOAT-64-NEXT: mov %o0, %i2 235; SOFT-FLOAT-64-NEXT: mov %i3, %o0 236; SOFT-FLOAT-64-NEXT: call __addsf3 237; SOFT-FLOAT-64-NEXT: mov %l0, %o1 238; SOFT-FLOAT-64-NEXT: ret 239; SOFT-FLOAT-64-NEXT: restore %g0, %o0, %o3 240 %product = fmul contract <4 x float> %a, %b 241 %result = fadd contract <4 x float> %product, %c 242 ret <4 x float> %result 243} 244 245define <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 { 246; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f64: 247; SOFT-FLOAT-32: .cfi_startproc 248; SOFT-FLOAT-32-NEXT: ! %bb.0: 249; SOFT-FLOAT-32-NEXT: save %sp, -128, %sp 250; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_register %fp 251; SOFT-FLOAT-32-NEXT: .cfi_window_save 252; SOFT-FLOAT-32-NEXT: .cfi_register %o7, %i7 253; SOFT-FLOAT-32-NEXT: ld [%fp+64], %l6 254; SOFT-FLOAT-32-NEXT: ld [%fp+156], %g2 255; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-4] ! 4-byte Folded Spill 256; SOFT-FLOAT-32-NEXT: ld [%fp+160], %g2 257; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-8] ! 4-byte Folded Spill 258; SOFT-FLOAT-32-NEXT: ld [%fp+148], %g2 259; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-12] ! 4-byte Folded Spill 260; SOFT-FLOAT-32-NEXT: ld [%fp+152], %g2 261; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-16] ! 4-byte Folded Spill 262; SOFT-FLOAT-32-NEXT: ld [%fp+140], %g2 263; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-20] ! 4-byte Folded Spill 264; SOFT-FLOAT-32-NEXT: ld [%fp+144], %g2 265; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-24] ! 4-byte Folded Spill 266; SOFT-FLOAT-32-NEXT: ld [%fp+132], %g2 267; SOFT-FLOAT-32-NEXT: st %g2, [%fp+-28] ! 4-byte Folded Spill 268; SOFT-FLOAT-32-NEXT: ld [%fp+136], %l7 269; SOFT-FLOAT-32-NEXT: ld [%fp+100], %l0 270; SOFT-FLOAT-32-NEXT: ld [%fp+104], %l1 271; SOFT-FLOAT-32-NEXT: ld [%fp+108], %l2 272; SOFT-FLOAT-32-NEXT: ld [%fp+112], %l3 273; SOFT-FLOAT-32-NEXT: ld [%fp+116], %l4 274; SOFT-FLOAT-32-NEXT: ld [%fp+120], %l5 275; SOFT-FLOAT-32-NEXT: ld [%fp+92], %o0 276; SOFT-FLOAT-32-NEXT: ld [%fp+96], %o1 277; SOFT-FLOAT-32-NEXT: ld [%fp+124], %o2 278; SOFT-FLOAT-32-NEXT: call __muldf3 279; SOFT-FLOAT-32-NEXT: ld [%fp+128], %o3 280; SOFT-FLOAT-32-NEXT: st %o0, [%fp+-32] ! 4-byte Folded Spill 281; SOFT-FLOAT-32-NEXT: st %o1, [%fp+-36] ! 4-byte Folded Spill 282; SOFT-FLOAT-32-NEXT: mov %i4, %o0 283; SOFT-FLOAT-32-NEXT: mov %i5, %o1 284; SOFT-FLOAT-32-NEXT: mov %l4, %o2 285; SOFT-FLOAT-32-NEXT: call __muldf3 286; SOFT-FLOAT-32-NEXT: mov %l5, %o3 287; SOFT-FLOAT-32-NEXT: mov %o0, %l4 288; SOFT-FLOAT-32-NEXT: mov %o1, %l5 289; SOFT-FLOAT-32-NEXT: mov %i2, %o0 290; SOFT-FLOAT-32-NEXT: mov %i3, %o1 291; SOFT-FLOAT-32-NEXT: mov %l2, %o2 292; SOFT-FLOAT-32-NEXT: call __muldf3 293; SOFT-FLOAT-32-NEXT: mov %l3, %o3 294; SOFT-FLOAT-32-NEXT: mov %o0, %i4 295; SOFT-FLOAT-32-NEXT: mov %o1, %i5 296; SOFT-FLOAT-32-NEXT: mov %i0, %o0 297; SOFT-FLOAT-32-NEXT: mov %i1, %o1 298; SOFT-FLOAT-32-NEXT: mov %l0, %o2 299; SOFT-FLOAT-32-NEXT: call __muldf3 300; SOFT-FLOAT-32-NEXT: mov %l1, %o3 301; SOFT-FLOAT-32-NEXT: ld [%fp+-28], %o2 ! 4-byte Folded Reload 302; SOFT-FLOAT-32-NEXT: call __adddf3 303; SOFT-FLOAT-32-NEXT: mov %l7, %o3 304; SOFT-FLOAT-32-NEXT: mov %o0, %i2 305; SOFT-FLOAT-32-NEXT: mov %o1, %i3 306; SOFT-FLOAT-32-NEXT: mov %i4, %o0 307; SOFT-FLOAT-32-NEXT: mov %i5, %o1 308; SOFT-FLOAT-32-NEXT: ld [%fp+-20], %o2 ! 4-byte Folded Reload 309; SOFT-FLOAT-32-NEXT: call __adddf3 310; SOFT-FLOAT-32-NEXT: ld [%fp+-24], %o3 311; SOFT-FLOAT-32-NEXT: mov %o0, %i4 312; SOFT-FLOAT-32-NEXT: mov %o1, %i5 313; SOFT-FLOAT-32-NEXT: mov %l4, %o0 314; SOFT-FLOAT-32-NEXT: mov %l5, %o1 315; SOFT-FLOAT-32-NEXT: ld [%fp+-12], %o2 ! 4-byte Folded Reload 316; SOFT-FLOAT-32-NEXT: call __adddf3 317; SOFT-FLOAT-32-NEXT: ld [%fp+-16], %o3 318; SOFT-FLOAT-32-NEXT: mov %o0, %i0 319; SOFT-FLOAT-32-NEXT: mov %o1, %i1 320; SOFT-FLOAT-32-NEXT: ld [%fp+-32], %o0 ! 4-byte Folded Reload 321; SOFT-FLOAT-32-NEXT: ld [%fp+-36], %o1 ! 4-byte Folded Reload 322; SOFT-FLOAT-32-NEXT: ld [%fp+-4], %o2 ! 4-byte Folded Reload 323; SOFT-FLOAT-32-NEXT: call __adddf3 324; SOFT-FLOAT-32-NEXT: ld [%fp+-8], %o3 325; SOFT-FLOAT-32-NEXT: ! kill: def $o0 killed $o0 killed $o0_o1 def $o0_o1 326; SOFT-FLOAT-32-NEXT: ! kill: def $o1 killed $o1 killed $o0_o1 def $o0_o1 327; SOFT-FLOAT-32-NEXT: std %o0, [%l6+24] 328; SOFT-FLOAT-32-NEXT: std %i0, [%l6+16] 329; SOFT-FLOAT-32-NEXT: std %i4, [%l6+8] 330; SOFT-FLOAT-32-NEXT: std %i2, [%l6] 331; SOFT-FLOAT-32-NEXT: ret 332; SOFT-FLOAT-32-NEXT: restore 333; 334; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64: 335; SOFT-FLOAT-64: .cfi_startproc 336; SOFT-FLOAT-64-NEXT: ! %bb.0: 337; SOFT-FLOAT-64-NEXT: save %sp, -176, %sp 338; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_register %fp 339; SOFT-FLOAT-64-NEXT: .cfi_window_save 340; SOFT-FLOAT-64-NEXT: .cfi_register %o7, %i7 341; SOFT-FLOAT-64-NEXT: ldx [%fp+2263], %l0 342; SOFT-FLOAT-64-NEXT: ldx [%fp+2255], %l1 343; SOFT-FLOAT-64-NEXT: ldx [%fp+2247], %l2 344; SOFT-FLOAT-64-NEXT: ldx [%fp+2239], %l3 345; SOFT-FLOAT-64-NEXT: ldx [%fp+2223], %l4 346; SOFT-FLOAT-64-NEXT: ldx [%fp+2231], %o1 347; SOFT-FLOAT-64-NEXT: call __muldf3 348; SOFT-FLOAT-64-NEXT: mov %i3, %o0 349; SOFT-FLOAT-64-NEXT: mov %o0, %i3 350; SOFT-FLOAT-64-NEXT: mov %i2, %o0 351; SOFT-FLOAT-64-NEXT: call __muldf3 352; SOFT-FLOAT-64-NEXT: mov %l4, %o1 353; SOFT-FLOAT-64-NEXT: mov %o0, %i2 354; SOFT-FLOAT-64-NEXT: mov %i1, %o0 355; SOFT-FLOAT-64-NEXT: call __muldf3 356; SOFT-FLOAT-64-NEXT: mov %i5, %o1 357; SOFT-FLOAT-64-NEXT: mov %o0, %i1 358; SOFT-FLOAT-64-NEXT: mov %i0, %o0 359; SOFT-FLOAT-64-NEXT: call __muldf3 360; SOFT-FLOAT-64-NEXT: mov %i4, %o1 361; SOFT-FLOAT-64-NEXT: call __adddf3 362; SOFT-FLOAT-64-NEXT: mov %l3, %o1 363; SOFT-FLOAT-64-NEXT: mov %o0, %i0 364; SOFT-FLOAT-64-NEXT: mov %i1, %o0 365; SOFT-FLOAT-64-NEXT: call __adddf3 366; SOFT-FLOAT-64-NEXT: mov %l2, %o1 367; SOFT-FLOAT-64-NEXT: mov %o0, %i1 368; SOFT-FLOAT-64-NEXT: mov %i2, %o0 369; SOFT-FLOAT-64-NEXT: call __adddf3 370; SOFT-FLOAT-64-NEXT: mov %l1, %o1 371; SOFT-FLOAT-64-NEXT: mov %o0, %i2 372; SOFT-FLOAT-64-NEXT: mov %i3, %o0 373; SOFT-FLOAT-64-NEXT: call __adddf3 374; SOFT-FLOAT-64-NEXT: mov %l0, %o1 375; SOFT-FLOAT-64-NEXT: ret 376; SOFT-FLOAT-64-NEXT: restore %g0, %o0, %o3 377 %product = fmul contract <4 x double> %a, %b 378 %result = fadd contract <4 x double> %product, %c 379 ret <4 x double> %result 380} 381 382attributes #0 = { "use-soft-float"="true" } 383 384declare float @llvm.fmuladd.f32(float %a, float %b, float %c) 385declare double @llvm.fmuladd.f64(double %a, double %b, double %c) 386