1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32F 3; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32D 4; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F 5; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D 6 7;; TODO: Merge the offset of address calculation into the offset field of instructions. 8 9%f2 = type <2 x float> 10%f4 = type <4 x float> 11%f8 = type <8 x float> 12%d2 = type <2 x double> 13%d4 = type <4 x double> 14%d8 = type <8 x double> 15 16define void @test_zero(ptr %P, ptr %S) nounwind { 17; LA32F-LABEL: test_zero: 18; LA32F: # %bb.0: 19; LA32F-NEXT: fld.s $fa0, $a0, 12 20; LA32F-NEXT: fld.s $fa1, $a0, 0 21; LA32F-NEXT: fld.s $fa2, $a0, 4 22; LA32F-NEXT: fld.s $fa3, $a0, 8 23; LA32F-NEXT: movgr2fr.w $fa4, $zero 24; LA32F-NEXT: fadd.s $fa1, $fa1, $fa4 25; LA32F-NEXT: fadd.s $fa2, $fa2, $fa4 26; LA32F-NEXT: fadd.s $fa3, $fa3, $fa4 27; LA32F-NEXT: fadd.s $fa0, $fa0, $fa4 28; LA32F-NEXT: fst.s $fa0, $a1, 12 29; LA32F-NEXT: fst.s $fa3, $a1, 8 30; LA32F-NEXT: fst.s $fa2, $a1, 4 31; LA32F-NEXT: fst.s $fa1, $a1, 0 32; LA32F-NEXT: ret 33; 34; LA32D-LABEL: test_zero: 35; LA32D: # %bb.0: 36; LA32D-NEXT: fld.s $fa0, $a0, 12 37; LA32D-NEXT: fld.s $fa1, $a0, 0 38; LA32D-NEXT: fld.s $fa2, $a0, 4 39; LA32D-NEXT: fld.s $fa3, $a0, 8 40; LA32D-NEXT: movgr2fr.w $fa4, $zero 41; LA32D-NEXT: fadd.s $fa1, $fa1, $fa4 42; LA32D-NEXT: fadd.s $fa2, $fa2, $fa4 43; LA32D-NEXT: fadd.s $fa3, $fa3, $fa4 44; LA32D-NEXT: fadd.s $fa0, $fa0, $fa4 45; LA32D-NEXT: fst.s $fa0, $a1, 12 46; LA32D-NEXT: fst.s $fa3, $a1, 8 47; LA32D-NEXT: fst.s $fa2, $a1, 4 48; LA32D-NEXT: fst.s $fa1, $a1, 0 49; LA32D-NEXT: ret 50; 51; LA64F-LABEL: test_zero: 52; LA64F: # %bb.0: 53; LA64F-NEXT: fld.s $fa0, $a0, 12 54; LA64F-NEXT: fld.s $fa1, $a0, 0 55; LA64F-NEXT: fld.s $fa2, $a0, 4 56; LA64F-NEXT: fld.s $fa3, $a0, 8 57; LA64F-NEXT: movgr2fr.w $fa4, $zero 58; LA64F-NEXT: fadd.s $fa1, $fa1, $fa4 59; LA64F-NEXT: fadd.s $fa2, $fa2, $fa4 60; LA64F-NEXT: fadd.s $fa3, $fa3, $fa4 61; LA64F-NEXT: fadd.s $fa0, $fa0, $fa4 62; LA64F-NEXT: fst.s $fa0, $a1, 12 63; LA64F-NEXT: fst.s $fa3, $a1, 8 64; LA64F-NEXT: fst.s $fa2, $a1, 4 65; LA64F-NEXT: fst.s $fa1, $a1, 0 66; LA64F-NEXT: ret 67; 68; LA64D-LABEL: test_zero: 69; LA64D: # %bb.0: 70; LA64D-NEXT: vld $vr0, $a0, 0 71; LA64D-NEXT: vrepli.b $vr1, 0 72; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1 73; LA64D-NEXT: vst $vr0, $a1, 0 74; LA64D-NEXT: ret 75 %p = load %f4, ptr %P 76 %R = fadd %f4 %p, zeroinitializer 77 store %f4 %R, ptr %S 78 ret void 79} 80 81define void @test_f2(ptr %P, ptr %S) nounwind { 82; LA32F-LABEL: test_f2: 83; LA32F: # %bb.0: 84; LA32F-NEXT: fld.s $fa0, $a0, 4 85; LA32F-NEXT: fld.s $fa1, $a0, 0 86; LA32F-NEXT: addi.w $a0, $zero, 1 87; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0) 88; LA32F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI1_0) 89; LA32F-NEXT: movgr2fr.w $fa3, $a0 90; LA32F-NEXT: ffint.s.w $fa3, $fa3 91; LA32F-NEXT: fadd.s $fa1, $fa1, $fa3 92; LA32F-NEXT: fadd.s $fa0, $fa0, $fa2 93; LA32F-NEXT: fst.s $fa0, $a1, 4 94; LA32F-NEXT: fst.s $fa1, $a1, 0 95; LA32F-NEXT: ret 96; 97; LA32D-LABEL: test_f2: 98; LA32D: # %bb.0: 99; LA32D-NEXT: fld.s $fa0, $a0, 4 100; LA32D-NEXT: fld.s $fa1, $a0, 0 101; LA32D-NEXT: addi.w $a0, $zero, 1 102; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0) 103; LA32D-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI1_0) 104; LA32D-NEXT: movgr2fr.w $fa3, $a0 105; LA32D-NEXT: ffint.s.w $fa3, $fa3 106; LA32D-NEXT: fadd.s $fa1, $fa1, $fa3 107; LA32D-NEXT: fadd.s $fa0, $fa0, $fa2 108; LA32D-NEXT: fst.s $fa0, $a1, 4 109; LA32D-NEXT: fst.s $fa1, $a1, 0 110; LA32D-NEXT: ret 111; 112; LA64F-LABEL: test_f2: 113; LA64F: # %bb.0: 114; LA64F-NEXT: fld.s $fa0, $a0, 4 115; LA64F-NEXT: fld.s $fa1, $a0, 0 116; LA64F-NEXT: addi.w $a0, $zero, 1 117; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0) 118; LA64F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI1_0) 119; LA64F-NEXT: movgr2fr.w $fa3, $a0 120; LA64F-NEXT: ffint.s.w $fa3, $fa3 121; LA64F-NEXT: fadd.s $fa1, $fa1, $fa3 122; LA64F-NEXT: fadd.s $fa0, $fa0, $fa2 123; LA64F-NEXT: fst.s $fa0, $a1, 4 124; LA64F-NEXT: fst.s $fa1, $a1, 0 125; LA64F-NEXT: ret 126; 127; LA64D-LABEL: test_f2: 128; LA64D: # %bb.0: 129; LA64D-NEXT: ld.d $a0, $a0, 0 130; LA64D-NEXT: vinsgr2vr.d $vr0, $a0, 0 131; LA64D-NEXT: lu12i.w $a0, 260096 132; LA64D-NEXT: lu52i.d $a0, $a0, 1024 133; LA64D-NEXT: vreplgr2vr.d $vr1, $a0 134; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1 135; LA64D-NEXT: vpickve2gr.d $a0, $vr0, 0 136; LA64D-NEXT: st.d $a0, $a1, 0 137; LA64D-NEXT: ret 138 %p = load %f2, ptr %P 139 %R = fadd %f2 %p, < float 1.000000e+00, float 2.000000e+00 > 140 store %f2 %R, ptr %S 141 ret void 142} 143 144define void @test_f4(ptr %P, ptr %S) nounwind { 145; LA32F-LABEL: test_f4: 146; LA32F: # %bb.0: 147; LA32F-NEXT: fld.s $fa0, $a0, 12 148; LA32F-NEXT: fld.s $fa1, $a0, 8 149; LA32F-NEXT: fld.s $fa2, $a0, 4 150; LA32F-NEXT: fld.s $fa3, $a0, 0 151; LA32F-NEXT: addi.w $a0, $zero, 1 152; LA32F-NEXT: movgr2fr.w $fa4, $a0 153; LA32F-NEXT: ffint.s.w $fa4, $fa4 154; LA32F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0) 155; LA32F-NEXT: fld.s $fa5, $a0, %pc_lo12(.LCPI2_0) 156; LA32F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_1) 157; LA32F-NEXT: fld.s $fa6, $a0, %pc_lo12(.LCPI2_1) 158; LA32F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_2) 159; LA32F-NEXT: fld.s $fa7, $a0, %pc_lo12(.LCPI2_2) 160; LA32F-NEXT: fadd.s $fa3, $fa3, $fa4 161; LA32F-NEXT: fadd.s $fa2, $fa2, $fa5 162; LA32F-NEXT: fadd.s $fa1, $fa1, $fa6 163; LA32F-NEXT: fadd.s $fa0, $fa0, $fa7 164; LA32F-NEXT: fst.s $fa0, $a1, 12 165; LA32F-NEXT: fst.s $fa1, $a1, 8 166; LA32F-NEXT: fst.s $fa2, $a1, 4 167; LA32F-NEXT: fst.s $fa3, $a1, 0 168; LA32F-NEXT: ret 169; 170; LA32D-LABEL: test_f4: 171; LA32D: # %bb.0: 172; LA32D-NEXT: fld.s $fa0, $a0, 12 173; LA32D-NEXT: fld.s $fa1, $a0, 8 174; LA32D-NEXT: fld.s $fa2, $a0, 4 175; LA32D-NEXT: fld.s $fa3, $a0, 0 176; LA32D-NEXT: addi.w $a0, $zero, 1 177; LA32D-NEXT: movgr2fr.w $fa4, $a0 178; LA32D-NEXT: ffint.s.w $fa4, $fa4 179; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0) 180; LA32D-NEXT: fld.s $fa5, $a0, %pc_lo12(.LCPI2_0) 181; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_1) 182; LA32D-NEXT: fld.s $fa6, $a0, %pc_lo12(.LCPI2_1) 183; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_2) 184; LA32D-NEXT: fld.s $fa7, $a0, %pc_lo12(.LCPI2_2) 185; LA32D-NEXT: fadd.s $fa3, $fa3, $fa4 186; LA32D-NEXT: fadd.s $fa2, $fa2, $fa5 187; LA32D-NEXT: fadd.s $fa1, $fa1, $fa6 188; LA32D-NEXT: fadd.s $fa0, $fa0, $fa7 189; LA32D-NEXT: fst.s $fa0, $a1, 12 190; LA32D-NEXT: fst.s $fa1, $a1, 8 191; LA32D-NEXT: fst.s $fa2, $a1, 4 192; LA32D-NEXT: fst.s $fa3, $a1, 0 193; LA32D-NEXT: ret 194; 195; LA64F-LABEL: test_f4: 196; LA64F: # %bb.0: 197; LA64F-NEXT: fld.s $fa0, $a0, 12 198; LA64F-NEXT: fld.s $fa1, $a0, 8 199; LA64F-NEXT: fld.s $fa2, $a0, 4 200; LA64F-NEXT: fld.s $fa3, $a0, 0 201; LA64F-NEXT: addi.w $a0, $zero, 1 202; LA64F-NEXT: movgr2fr.w $fa4, $a0 203; LA64F-NEXT: ffint.s.w $fa4, $fa4 204; LA64F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0) 205; LA64F-NEXT: fld.s $fa5, $a0, %pc_lo12(.LCPI2_0) 206; LA64F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_1) 207; LA64F-NEXT: fld.s $fa6, $a0, %pc_lo12(.LCPI2_1) 208; LA64F-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_2) 209; LA64F-NEXT: fld.s $fa7, $a0, %pc_lo12(.LCPI2_2) 210; LA64F-NEXT: fadd.s $fa3, $fa3, $fa4 211; LA64F-NEXT: fadd.s $fa2, $fa2, $fa5 212; LA64F-NEXT: fadd.s $fa1, $fa1, $fa6 213; LA64F-NEXT: fadd.s $fa0, $fa0, $fa7 214; LA64F-NEXT: fst.s $fa0, $a1, 12 215; LA64F-NEXT: fst.s $fa1, $a1, 8 216; LA64F-NEXT: fst.s $fa2, $a1, 4 217; LA64F-NEXT: fst.s $fa3, $a1, 0 218; LA64F-NEXT: ret 219; 220; LA64D-LABEL: test_f4: 221; LA64D: # %bb.0: 222; LA64D-NEXT: vld $vr0, $a0, 0 223; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0) 224; LA64D-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI2_0) 225; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1 226; LA64D-NEXT: vst $vr0, $a1, 0 227; LA64D-NEXT: ret 228 %p = load %f4, ptr %P 229 %R = fadd %f4 %p, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 > 230 store %f4 %R, ptr %S 231 ret void 232} 233 234define void @test_f8(ptr %P, ptr %S) nounwind { 235; LA32F-LABEL: test_f8: 236; LA32F: # %bb.0: 237; LA32F-NEXT: addi.w $a2, $zero, 1 238; LA32F-NEXT: movgr2fr.w $fa0, $a2 239; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0) 240; LA32F-NEXT: fld.s $fa1, $a2, %pc_lo12(.LCPI3_0) 241; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_1) 242; LA32F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI3_1) 243; LA32F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_2) 244; LA32F-NEXT: fld.s $fa3, $a2, %pc_lo12(.LCPI3_2) 245; LA32F-NEXT: fld.s $fa4, $a0, 28 246; LA32F-NEXT: fld.s $fa5, $a0, 24 247; LA32F-NEXT: fld.s $fa6, $a0, 12 248; LA32F-NEXT: fld.s $fa7, $a0, 8 249; LA32F-NEXT: fld.s $ft0, $a0, 0 250; LA32F-NEXT: fld.s $ft1, $a0, 16 251; LA32F-NEXT: fld.s $ft2, $a0, 4 252; LA32F-NEXT: ffint.s.w $fa0, $fa0 253; LA32F-NEXT: fadd.s $ft0, $ft0, $fa0 254; LA32F-NEXT: fadd.s $fa0, $ft1, $fa0 255; LA32F-NEXT: fld.s $ft1, $a0, 20 256; LA32F-NEXT: fadd.s $ft2, $ft2, $fa1 257; LA32F-NEXT: fadd.s $fa7, $fa7, $fa2 258; LA32F-NEXT: fadd.s $fa6, $fa6, $fa3 259; LA32F-NEXT: fadd.s $fa1, $ft1, $fa1 260; LA32F-NEXT: fadd.s $fa2, $fa5, $fa2 261; LA32F-NEXT: fadd.s $fa3, $fa4, $fa3 262; LA32F-NEXT: fst.s $fa3, $a1, 28 263; LA32F-NEXT: fst.s $fa2, $a1, 24 264; LA32F-NEXT: fst.s $fa1, $a1, 20 265; LA32F-NEXT: fst.s $fa6, $a1, 12 266; LA32F-NEXT: fst.s $fa7, $a1, 8 267; LA32F-NEXT: fst.s $ft2, $a1, 4 268; LA32F-NEXT: fst.s $fa0, $a1, 16 269; LA32F-NEXT: fst.s $ft0, $a1, 0 270; LA32F-NEXT: ret 271; 272; LA32D-LABEL: test_f8: 273; LA32D: # %bb.0: 274; LA32D-NEXT: addi.w $a2, $zero, 1 275; LA32D-NEXT: movgr2fr.w $fa0, $a2 276; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0) 277; LA32D-NEXT: fld.s $fa1, $a2, %pc_lo12(.LCPI3_0) 278; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_1) 279; LA32D-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI3_1) 280; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_2) 281; LA32D-NEXT: fld.s $fa3, $a2, %pc_lo12(.LCPI3_2) 282; LA32D-NEXT: fld.s $fa4, $a0, 28 283; LA32D-NEXT: fld.s $fa5, $a0, 24 284; LA32D-NEXT: fld.s $fa6, $a0, 12 285; LA32D-NEXT: fld.s $fa7, $a0, 8 286; LA32D-NEXT: fld.s $ft0, $a0, 0 287; LA32D-NEXT: fld.s $ft1, $a0, 16 288; LA32D-NEXT: fld.s $ft2, $a0, 4 289; LA32D-NEXT: ffint.s.w $fa0, $fa0 290; LA32D-NEXT: fadd.s $ft0, $ft0, $fa0 291; LA32D-NEXT: fadd.s $fa0, $ft1, $fa0 292; LA32D-NEXT: fld.s $ft1, $a0, 20 293; LA32D-NEXT: fadd.s $ft2, $ft2, $fa1 294; LA32D-NEXT: fadd.s $fa7, $fa7, $fa2 295; LA32D-NEXT: fadd.s $fa6, $fa6, $fa3 296; LA32D-NEXT: fadd.s $fa1, $ft1, $fa1 297; LA32D-NEXT: fadd.s $fa2, $fa5, $fa2 298; LA32D-NEXT: fadd.s $fa3, $fa4, $fa3 299; LA32D-NEXT: fst.s $fa3, $a1, 28 300; LA32D-NEXT: fst.s $fa2, $a1, 24 301; LA32D-NEXT: fst.s $fa1, $a1, 20 302; LA32D-NEXT: fst.s $fa6, $a1, 12 303; LA32D-NEXT: fst.s $fa7, $a1, 8 304; LA32D-NEXT: fst.s $ft2, $a1, 4 305; LA32D-NEXT: fst.s $fa0, $a1, 16 306; LA32D-NEXT: fst.s $ft0, $a1, 0 307; LA32D-NEXT: ret 308; 309; LA64F-LABEL: test_f8: 310; LA64F: # %bb.0: 311; LA64F-NEXT: addi.w $a2, $zero, 1 312; LA64F-NEXT: movgr2fr.w $fa0, $a2 313; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0) 314; LA64F-NEXT: fld.s $fa1, $a2, %pc_lo12(.LCPI3_0) 315; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_1) 316; LA64F-NEXT: fld.s $fa2, $a2, %pc_lo12(.LCPI3_1) 317; LA64F-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_2) 318; LA64F-NEXT: fld.s $fa3, $a2, %pc_lo12(.LCPI3_2) 319; LA64F-NEXT: fld.s $fa4, $a0, 28 320; LA64F-NEXT: fld.s $fa5, $a0, 24 321; LA64F-NEXT: fld.s $fa6, $a0, 12 322; LA64F-NEXT: fld.s $fa7, $a0, 8 323; LA64F-NEXT: fld.s $ft0, $a0, 0 324; LA64F-NEXT: fld.s $ft1, $a0, 16 325; LA64F-NEXT: fld.s $ft2, $a0, 4 326; LA64F-NEXT: ffint.s.w $fa0, $fa0 327; LA64F-NEXT: fadd.s $ft0, $ft0, $fa0 328; LA64F-NEXT: fadd.s $fa0, $ft1, $fa0 329; LA64F-NEXT: fld.s $ft1, $a0, 20 330; LA64F-NEXT: fadd.s $ft2, $ft2, $fa1 331; LA64F-NEXT: fadd.s $fa7, $fa7, $fa2 332; LA64F-NEXT: fadd.s $fa6, $fa6, $fa3 333; LA64F-NEXT: fadd.s $fa1, $ft1, $fa1 334; LA64F-NEXT: fadd.s $fa2, $fa5, $fa2 335; LA64F-NEXT: fadd.s $fa3, $fa4, $fa3 336; LA64F-NEXT: fst.s $fa3, $a1, 28 337; LA64F-NEXT: fst.s $fa2, $a1, 24 338; LA64F-NEXT: fst.s $fa1, $a1, 20 339; LA64F-NEXT: fst.s $fa6, $a1, 12 340; LA64F-NEXT: fst.s $fa7, $a1, 8 341; LA64F-NEXT: fst.s $ft2, $a1, 4 342; LA64F-NEXT: fst.s $fa0, $a1, 16 343; LA64F-NEXT: fst.s $ft0, $a1, 0 344; LA64F-NEXT: ret 345; 346; LA64D-LABEL: test_f8: 347; LA64D: # %bb.0: 348; LA64D-NEXT: vld $vr0, $a0, 16 349; LA64D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0) 350; LA64D-NEXT: vld $vr1, $a2, %pc_lo12(.LCPI3_0) 351; LA64D-NEXT: vld $vr2, $a0, 0 352; LA64D-NEXT: vfadd.s $vr0, $vr0, $vr1 353; LA64D-NEXT: vfadd.s $vr1, $vr2, $vr1 354; LA64D-NEXT: vst $vr1, $a1, 0 355; LA64D-NEXT: vst $vr0, $a1, 16 356; LA64D-NEXT: ret 357 %p = load %f8, ptr %P 358 %R = fadd %f8 %p, < float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00 > 359 store %f8 %R, ptr %S 360 ret void 361} 362 363define void @test_d2(ptr %P, ptr %S) nounwind { 364; LA32F-LABEL: test_d2: 365; LA32F: # %bb.0: 366; LA32F-NEXT: addi.w $sp, $sp, -32 367; LA32F-NEXT: st.w $ra, $sp, 28 # 4-byte Folded Spill 368; LA32F-NEXT: st.w $fp, $sp, 24 # 4-byte Folded Spill 369; LA32F-NEXT: st.w $s0, $sp, 20 # 4-byte Folded Spill 370; LA32F-NEXT: st.w $s1, $sp, 16 # 4-byte Folded Spill 371; LA32F-NEXT: st.w $s2, $sp, 12 # 4-byte Folded Spill 372; LA32F-NEXT: st.w $s3, $sp, 8 # 4-byte Folded Spill 373; LA32F-NEXT: ld.w $fp, $a0, 8 374; LA32F-NEXT: ld.w $s0, $a0, 12 375; LA32F-NEXT: ld.w $a2, $a0, 0 376; LA32F-NEXT: ld.w $a4, $a0, 4 377; LA32F-NEXT: move $s1, $a1 378; LA32F-NEXT: lu12i.w $a3, 261888 379; LA32F-NEXT: move $a0, $a2 380; LA32F-NEXT: move $a1, $a4 381; LA32F-NEXT: move $a2, $zero 382; LA32F-NEXT: bl %plt(__adddf3) 383; LA32F-NEXT: move $s2, $a0 384; LA32F-NEXT: move $s3, $a1 385; LA32F-NEXT: lu12i.w $a3, 262144 386; LA32F-NEXT: move $a0, $fp 387; LA32F-NEXT: move $a1, $s0 388; LA32F-NEXT: move $a2, $zero 389; LA32F-NEXT: bl %plt(__adddf3) 390; LA32F-NEXT: st.w $a0, $s1, 8 391; LA32F-NEXT: st.w $a1, $s1, 12 392; LA32F-NEXT: st.w $s2, $s1, 0 393; LA32F-NEXT: st.w $s3, $s1, 4 394; LA32F-NEXT: ld.w $s3, $sp, 8 # 4-byte Folded Reload 395; LA32F-NEXT: ld.w $s2, $sp, 12 # 4-byte Folded Reload 396; LA32F-NEXT: ld.w $s1, $sp, 16 # 4-byte Folded Reload 397; LA32F-NEXT: ld.w $s0, $sp, 20 # 4-byte Folded Reload 398; LA32F-NEXT: ld.w $fp, $sp, 24 # 4-byte Folded Reload 399; LA32F-NEXT: ld.w $ra, $sp, 28 # 4-byte Folded Reload 400; LA32F-NEXT: addi.w $sp, $sp, 32 401; LA32F-NEXT: ret 402; 403; LA32D-LABEL: test_d2: 404; LA32D: # %bb.0: 405; LA32D-NEXT: fld.d $fa0, $a0, 8 406; LA32D-NEXT: fld.d $fa1, $a0, 0 407; LA32D-NEXT: addi.w $a0, $zero, 1 408; LA32D-NEXT: movgr2fr.w $fa2, $a0 409; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0) 410; LA32D-NEXT: fld.d $fa3, $a0, %pc_lo12(.LCPI4_0) 411; LA32D-NEXT: ffint.s.w $fa2, $fa2 412; LA32D-NEXT: fcvt.d.s $fa2, $fa2 413; LA32D-NEXT: fadd.d $fa1, $fa1, $fa2 414; LA32D-NEXT: fadd.d $fa0, $fa0, $fa3 415; LA32D-NEXT: fst.d $fa0, $a1, 8 416; LA32D-NEXT: fst.d $fa1, $a1, 0 417; LA32D-NEXT: ret 418; 419; LA64F-LABEL: test_d2: 420; LA64F: # %bb.0: 421; LA64F-NEXT: addi.d $sp, $sp, -32 422; LA64F-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill 423; LA64F-NEXT: st.d $fp, $sp, 16 # 8-byte Folded Spill 424; LA64F-NEXT: st.d $s0, $sp, 8 # 8-byte Folded Spill 425; LA64F-NEXT: st.d $s1, $sp, 0 # 8-byte Folded Spill 426; LA64F-NEXT: ld.d $fp, $a0, 8 427; LA64F-NEXT: ld.d $a0, $a0, 0 428; LA64F-NEXT: move $s0, $a1 429; LA64F-NEXT: lu52i.d $a1, $zero, 1023 430; LA64F-NEXT: bl %plt(__adddf3) 431; LA64F-NEXT: move $s1, $a0 432; LA64F-NEXT: lu52i.d $a1, $zero, 1024 433; LA64F-NEXT: move $a0, $fp 434; LA64F-NEXT: bl %plt(__adddf3) 435; LA64F-NEXT: st.d $a0, $s0, 8 436; LA64F-NEXT: st.d $s1, $s0, 0 437; LA64F-NEXT: ld.d $s1, $sp, 0 # 8-byte Folded Reload 438; LA64F-NEXT: ld.d $s0, $sp, 8 # 8-byte Folded Reload 439; LA64F-NEXT: ld.d $fp, $sp, 16 # 8-byte Folded Reload 440; LA64F-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload 441; LA64F-NEXT: addi.d $sp, $sp, 32 442; LA64F-NEXT: ret 443; 444; LA64D-LABEL: test_d2: 445; LA64D: # %bb.0: 446; LA64D-NEXT: vld $vr0, $a0, 0 447; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0) 448; LA64D-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI4_0) 449; LA64D-NEXT: vfadd.d $vr0, $vr0, $vr1 450; LA64D-NEXT: vst $vr0, $a1, 0 451; LA64D-NEXT: ret 452 %p = load %d2, ptr %P 453 %R = fadd %d2 %p, < double 1.000000e+00, double 2.000000e+00 > 454 store %d2 %R, ptr %S 455 ret void 456} 457 458define void @test_d4(ptr %P, ptr %S) nounwind { 459; LA32F-LABEL: test_d4: 460; LA32F: # %bb.0: 461; LA32F-NEXT: addi.w $sp, $sp, -48 462; LA32F-NEXT: st.w $ra, $sp, 44 # 4-byte Folded Spill 463; LA32F-NEXT: st.w $fp, $sp, 40 # 4-byte Folded Spill 464; LA32F-NEXT: st.w $s0, $sp, 36 # 4-byte Folded Spill 465; LA32F-NEXT: st.w $s1, $sp, 32 # 4-byte Folded Spill 466; LA32F-NEXT: st.w $s2, $sp, 28 # 4-byte Folded Spill 467; LA32F-NEXT: st.w $s3, $sp, 24 # 4-byte Folded Spill 468; LA32F-NEXT: st.w $s4, $sp, 20 # 4-byte Folded Spill 469; LA32F-NEXT: st.w $s5, $sp, 16 # 4-byte Folded Spill 470; LA32F-NEXT: st.w $s6, $sp, 12 # 4-byte Folded Spill 471; LA32F-NEXT: st.w $s7, $sp, 8 # 4-byte Folded Spill 472; LA32F-NEXT: ld.w $fp, $a0, 24 473; LA32F-NEXT: ld.w $s0, $a0, 28 474; LA32F-NEXT: ld.w $s1, $a0, 16 475; LA32F-NEXT: ld.w $s2, $a0, 20 476; LA32F-NEXT: ld.w $s3, $a0, 8 477; LA32F-NEXT: ld.w $s4, $a0, 12 478; LA32F-NEXT: ld.w $a2, $a0, 0 479; LA32F-NEXT: ld.w $a4, $a0, 4 480; LA32F-NEXT: move $s5, $a1 481; LA32F-NEXT: lu12i.w $a3, 261888 482; LA32F-NEXT: move $a0, $a2 483; LA32F-NEXT: move $a1, $a4 484; LA32F-NEXT: move $a2, $zero 485; LA32F-NEXT: bl %plt(__adddf3) 486; LA32F-NEXT: move $s6, $a0 487; LA32F-NEXT: move $s7, $a1 488; LA32F-NEXT: lu12i.w $a3, 262144 489; LA32F-NEXT: move $a0, $s3 490; LA32F-NEXT: move $a1, $s4 491; LA32F-NEXT: move $a2, $zero 492; LA32F-NEXT: bl %plt(__adddf3) 493; LA32F-NEXT: move $s3, $a0 494; LA32F-NEXT: move $s4, $a1 495; LA32F-NEXT: lu12i.w $a3, 262272 496; LA32F-NEXT: move $a0, $s1 497; LA32F-NEXT: move $a1, $s2 498; LA32F-NEXT: move $a2, $zero 499; LA32F-NEXT: bl %plt(__adddf3) 500; LA32F-NEXT: move $s1, $a0 501; LA32F-NEXT: move $s2, $a1 502; LA32F-NEXT: lu12i.w $a3, 262400 503; LA32F-NEXT: move $a0, $fp 504; LA32F-NEXT: move $a1, $s0 505; LA32F-NEXT: move $a2, $zero 506; LA32F-NEXT: bl %plt(__adddf3) 507; LA32F-NEXT: st.w $a0, $s5, 24 508; LA32F-NEXT: st.w $a1, $s5, 28 509; LA32F-NEXT: st.w $s1, $s5, 16 510; LA32F-NEXT: st.w $s2, $s5, 20 511; LA32F-NEXT: st.w $s3, $s5, 8 512; LA32F-NEXT: st.w $s4, $s5, 12 513; LA32F-NEXT: st.w $s6, $s5, 0 514; LA32F-NEXT: st.w $s7, $s5, 4 515; LA32F-NEXT: ld.w $s7, $sp, 8 # 4-byte Folded Reload 516; LA32F-NEXT: ld.w $s6, $sp, 12 # 4-byte Folded Reload 517; LA32F-NEXT: ld.w $s5, $sp, 16 # 4-byte Folded Reload 518; LA32F-NEXT: ld.w $s4, $sp, 20 # 4-byte Folded Reload 519; LA32F-NEXT: ld.w $s3, $sp, 24 # 4-byte Folded Reload 520; LA32F-NEXT: ld.w $s2, $sp, 28 # 4-byte Folded Reload 521; LA32F-NEXT: ld.w $s1, $sp, 32 # 4-byte Folded Reload 522; LA32F-NEXT: ld.w $s0, $sp, 36 # 4-byte Folded Reload 523; LA32F-NEXT: ld.w $fp, $sp, 40 # 4-byte Folded Reload 524; LA32F-NEXT: ld.w $ra, $sp, 44 # 4-byte Folded Reload 525; LA32F-NEXT: addi.w $sp, $sp, 48 526; LA32F-NEXT: ret 527; 528; LA32D-LABEL: test_d4: 529; LA32D: # %bb.0: 530; LA32D-NEXT: fld.d $fa0, $a0, 24 531; LA32D-NEXT: fld.d $fa1, $a0, 16 532; LA32D-NEXT: fld.d $fa2, $a0, 8 533; LA32D-NEXT: fld.d $fa3, $a0, 0 534; LA32D-NEXT: addi.w $a0, $zero, 1 535; LA32D-NEXT: movgr2fr.w $fa4, $a0 536; LA32D-NEXT: ffint.s.w $fa4, $fa4 537; LA32D-NEXT: fcvt.d.s $fa4, $fa4 538; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0) 539; LA32D-NEXT: fld.d $fa5, $a0, %pc_lo12(.LCPI5_0) 540; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_1) 541; LA32D-NEXT: fld.d $fa6, $a0, %pc_lo12(.LCPI5_1) 542; LA32D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_2) 543; LA32D-NEXT: fld.d $fa7, $a0, %pc_lo12(.LCPI5_2) 544; LA32D-NEXT: fadd.d $fa3, $fa3, $fa4 545; LA32D-NEXT: fadd.d $fa2, $fa2, $fa5 546; LA32D-NEXT: fadd.d $fa1, $fa1, $fa6 547; LA32D-NEXT: fadd.d $fa0, $fa0, $fa7 548; LA32D-NEXT: fst.d $fa0, $a1, 24 549; LA32D-NEXT: fst.d $fa1, $a1, 16 550; LA32D-NEXT: fst.d $fa2, $a1, 8 551; LA32D-NEXT: fst.d $fa3, $a1, 0 552; LA32D-NEXT: ret 553; 554; LA64F-LABEL: test_d4: 555; LA64F: # %bb.0: 556; LA64F-NEXT: addi.d $sp, $sp, -48 557; LA64F-NEXT: st.d $ra, $sp, 40 # 8-byte Folded Spill 558; LA64F-NEXT: st.d $fp, $sp, 32 # 8-byte Folded Spill 559; LA64F-NEXT: st.d $s0, $sp, 24 # 8-byte Folded Spill 560; LA64F-NEXT: st.d $s1, $sp, 16 # 8-byte Folded Spill 561; LA64F-NEXT: st.d $s2, $sp, 8 # 8-byte Folded Spill 562; LA64F-NEXT: st.d $s3, $sp, 0 # 8-byte Folded Spill 563; LA64F-NEXT: ld.d $fp, $a0, 24 564; LA64F-NEXT: ld.d $s0, $a0, 8 565; LA64F-NEXT: ld.d $s1, $a0, 0 566; LA64F-NEXT: ld.d $a0, $a0, 16 567; LA64F-NEXT: move $s2, $a1 568; LA64F-NEXT: ori $a1, $zero, 0 569; LA64F-NEXT: lu32i.d $a1, -524288 570; LA64F-NEXT: lu52i.d $a1, $a1, 1024 571; LA64F-NEXT: bl %plt(__adddf3) 572; LA64F-NEXT: move $s3, $a0 573; LA64F-NEXT: lu52i.d $a1, $zero, 1023 574; LA64F-NEXT: move $a0, $s1 575; LA64F-NEXT: bl %plt(__adddf3) 576; LA64F-NEXT: move $s1, $a0 577; LA64F-NEXT: lu52i.d $a1, $zero, 1024 578; LA64F-NEXT: move $a0, $s0 579; LA64F-NEXT: bl %plt(__adddf3) 580; LA64F-NEXT: move $s0, $a0 581; LA64F-NEXT: lu52i.d $a1, $zero, 1025 582; LA64F-NEXT: move $a0, $fp 583; LA64F-NEXT: bl %plt(__adddf3) 584; LA64F-NEXT: st.d $a0, $s2, 24 585; LA64F-NEXT: st.d $s0, $s2, 8 586; LA64F-NEXT: st.d $s1, $s2, 0 587; LA64F-NEXT: st.d $s3, $s2, 16 588; LA64F-NEXT: ld.d $s3, $sp, 0 # 8-byte Folded Reload 589; LA64F-NEXT: ld.d $s2, $sp, 8 # 8-byte Folded Reload 590; LA64F-NEXT: ld.d $s1, $sp, 16 # 8-byte Folded Reload 591; LA64F-NEXT: ld.d $s0, $sp, 24 # 8-byte Folded Reload 592; LA64F-NEXT: ld.d $fp, $sp, 32 # 8-byte Folded Reload 593; LA64F-NEXT: ld.d $ra, $sp, 40 # 8-byte Folded Reload 594; LA64F-NEXT: addi.d $sp, $sp, 48 595; LA64F-NEXT: ret 596; 597; LA64D-LABEL: test_d4: 598; LA64D: # %bb.0: 599; LA64D-NEXT: vld $vr0, $a0, 0 600; LA64D-NEXT: vld $vr1, $a0, 16 601; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0) 602; LA64D-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI5_0) 603; LA64D-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_1) 604; LA64D-NEXT: vld $vr3, $a0, %pc_lo12(.LCPI5_1) 605; LA64D-NEXT: vfadd.d $vr1, $vr1, $vr2 606; LA64D-NEXT: vfadd.d $vr0, $vr0, $vr3 607; LA64D-NEXT: vst $vr0, $a1, 0 608; LA64D-NEXT: vst $vr1, $a1, 16 609; LA64D-NEXT: ret 610 %p = load %d4, ptr %P 611 %R = fadd %d4 %p, < double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00 > 612 store %d4 %R, ptr %S 613 ret void 614} 615 616define void @test_d8(ptr %P, ptr %S) nounwind { 617; LA32F-LABEL: test_d8: 618; LA32F: # %bb.0: 619; LA32F-NEXT: addi.w $sp, $sp, -96 620; LA32F-NEXT: st.w $ra, $sp, 92 # 4-byte Folded Spill 621; LA32F-NEXT: st.w $fp, $sp, 88 # 4-byte Folded Spill 622; LA32F-NEXT: st.w $s0, $sp, 84 # 4-byte Folded Spill 623; LA32F-NEXT: st.w $s1, $sp, 80 # 4-byte Folded Spill 624; LA32F-NEXT: st.w $s2, $sp, 76 # 4-byte Folded Spill 625; LA32F-NEXT: st.w $s3, $sp, 72 # 4-byte Folded Spill 626; LA32F-NEXT: st.w $s4, $sp, 68 # 4-byte Folded Spill 627; LA32F-NEXT: st.w $s5, $sp, 64 # 4-byte Folded Spill 628; LA32F-NEXT: st.w $s6, $sp, 60 # 4-byte Folded Spill 629; LA32F-NEXT: st.w $s7, $sp, 56 # 4-byte Folded Spill 630; LA32F-NEXT: st.w $s8, $sp, 52 # 4-byte Folded Spill 631; LA32F-NEXT: ld.w $a2, $a0, 56 632; LA32F-NEXT: st.w $a2, $sp, 48 # 4-byte Folded Spill 633; LA32F-NEXT: ld.w $a2, $a0, 60 634; LA32F-NEXT: st.w $a2, $sp, 44 # 4-byte Folded Spill 635; LA32F-NEXT: ld.w $a2, $a0, 48 636; LA32F-NEXT: st.w $a2, $sp, 32 # 4-byte Folded Spill 637; LA32F-NEXT: ld.w $a2, $a0, 52 638; LA32F-NEXT: st.w $a2, $sp, 28 # 4-byte Folded Spill 639; LA32F-NEXT: ld.w $s8, $a0, 40 640; LA32F-NEXT: ld.w $a2, $a0, 44 641; LA32F-NEXT: st.w $a2, $sp, 16 # 4-byte Folded Spill 642; LA32F-NEXT: ld.w $s3, $a0, 32 643; LA32F-NEXT: ld.w $s4, $a0, 36 644; LA32F-NEXT: ld.w $s5, $a0, 24 645; LA32F-NEXT: ld.w $s6, $a0, 28 646; LA32F-NEXT: ld.w $s1, $a0, 16 647; LA32F-NEXT: ld.w $s2, $a0, 20 648; LA32F-NEXT: ld.w $s7, $a0, 8 649; LA32F-NEXT: ld.w $s0, $a0, 12 650; LA32F-NEXT: ld.w $a2, $a0, 0 651; LA32F-NEXT: ld.w $a4, $a0, 4 652; LA32F-NEXT: move $fp, $a1 653; LA32F-NEXT: lu12i.w $a3, 261888 654; LA32F-NEXT: move $a0, $a2 655; LA32F-NEXT: move $a1, $a4 656; LA32F-NEXT: move $a2, $zero 657; LA32F-NEXT: bl %plt(__adddf3) 658; LA32F-NEXT: st.w $a0, $sp, 40 # 4-byte Folded Spill 659; LA32F-NEXT: st.w $a1, $sp, 36 # 4-byte Folded Spill 660; LA32F-NEXT: lu12i.w $a3, 262144 661; LA32F-NEXT: move $a0, $s7 662; LA32F-NEXT: move $a1, $s0 663; LA32F-NEXT: move $a2, $zero 664; LA32F-NEXT: move $s0, $a3 665; LA32F-NEXT: bl %plt(__adddf3) 666; LA32F-NEXT: st.w $a0, $sp, 24 # 4-byte Folded Spill 667; LA32F-NEXT: st.w $a1, $sp, 20 # 4-byte Folded Spill 668; LA32F-NEXT: lu12i.w $s7, 262272 669; LA32F-NEXT: move $a0, $s1 670; LA32F-NEXT: move $a1, $s2 671; LA32F-NEXT: move $a2, $zero 672; LA32F-NEXT: move $a3, $s7 673; LA32F-NEXT: bl %plt(__adddf3) 674; LA32F-NEXT: st.w $a0, $sp, 12 # 4-byte Folded Spill 675; LA32F-NEXT: move $s2, $a1 676; LA32F-NEXT: lu12i.w $a3, 262400 677; LA32F-NEXT: move $a0, $s5 678; LA32F-NEXT: move $a1, $s6 679; LA32F-NEXT: move $a2, $zero 680; LA32F-NEXT: bl %plt(__adddf3) 681; LA32F-NEXT: move $s5, $a0 682; LA32F-NEXT: move $s6, $a1 683; LA32F-NEXT: move $a0, $s3 684; LA32F-NEXT: move $a1, $s4 685; LA32F-NEXT: move $a2, $zero 686; LA32F-NEXT: lu12i.w $a3, 261888 687; LA32F-NEXT: bl %plt(__adddf3) 688; LA32F-NEXT: move $s3, $a0 689; LA32F-NEXT: move $s4, $a1 690; LA32F-NEXT: move $a0, $s8 691; LA32F-NEXT: ld.w $a1, $sp, 16 # 4-byte Folded Reload 692; LA32F-NEXT: move $a2, $zero 693; LA32F-NEXT: move $a3, $s0 694; LA32F-NEXT: bl %plt(__adddf3) 695; LA32F-NEXT: move $s8, $a0 696; LA32F-NEXT: move $s0, $a1 697; LA32F-NEXT: ld.w $a0, $sp, 32 # 4-byte Folded Reload 698; LA32F-NEXT: ld.w $a1, $sp, 28 # 4-byte Folded Reload 699; LA32F-NEXT: move $a2, $zero 700; LA32F-NEXT: move $a3, $s7 701; LA32F-NEXT: bl %plt(__adddf3) 702; LA32F-NEXT: move $s7, $a0 703; LA32F-NEXT: move $s1, $a1 704; LA32F-NEXT: ld.w $a0, $sp, 48 # 4-byte Folded Reload 705; LA32F-NEXT: ld.w $a1, $sp, 44 # 4-byte Folded Reload 706; LA32F-NEXT: move $a2, $zero 707; LA32F-NEXT: lu12i.w $a3, 262400 708; LA32F-NEXT: bl %plt(__adddf3) 709; LA32F-NEXT: st.w $a0, $fp, 56 710; LA32F-NEXT: st.w $a1, $fp, 60 711; LA32F-NEXT: st.w $s7, $fp, 48 712; LA32F-NEXT: st.w $s1, $fp, 52 713; LA32F-NEXT: st.w $s8, $fp, 40 714; LA32F-NEXT: st.w $s0, $fp, 44 715; LA32F-NEXT: st.w $s3, $fp, 32 716; LA32F-NEXT: st.w $s4, $fp, 36 717; LA32F-NEXT: st.w $s5, $fp, 24 718; LA32F-NEXT: st.w $s6, $fp, 28 719; LA32F-NEXT: ld.w $a0, $sp, 12 # 4-byte Folded Reload 720; LA32F-NEXT: st.w $a0, $fp, 16 721; LA32F-NEXT: st.w $s2, $fp, 20 722; LA32F-NEXT: ld.w $a0, $sp, 24 # 4-byte Folded Reload 723; LA32F-NEXT: st.w $a0, $fp, 8 724; LA32F-NEXT: ld.w $a0, $sp, 20 # 4-byte Folded Reload 725; LA32F-NEXT: st.w $a0, $fp, 12 726; LA32F-NEXT: ld.w $a0, $sp, 40 # 4-byte Folded Reload 727; LA32F-NEXT: st.w $a0, $fp, 0 728; LA32F-NEXT: ld.w $a0, $sp, 36 # 4-byte Folded Reload 729; LA32F-NEXT: st.w $a0, $fp, 4 730; LA32F-NEXT: ld.w $s8, $sp, 52 # 4-byte Folded Reload 731; LA32F-NEXT: ld.w $s7, $sp, 56 # 4-byte Folded Reload 732; LA32F-NEXT: ld.w $s6, $sp, 60 # 4-byte Folded Reload 733; LA32F-NEXT: ld.w $s5, $sp, 64 # 4-byte Folded Reload 734; LA32F-NEXT: ld.w $s4, $sp, 68 # 4-byte Folded Reload 735; LA32F-NEXT: ld.w $s3, $sp, 72 # 4-byte Folded Reload 736; LA32F-NEXT: ld.w $s2, $sp, 76 # 4-byte Folded Reload 737; LA32F-NEXT: ld.w $s1, $sp, 80 # 4-byte Folded Reload 738; LA32F-NEXT: ld.w $s0, $sp, 84 # 4-byte Folded Reload 739; LA32F-NEXT: ld.w $fp, $sp, 88 # 4-byte Folded Reload 740; LA32F-NEXT: ld.w $ra, $sp, 92 # 4-byte Folded Reload 741; LA32F-NEXT: addi.w $sp, $sp, 96 742; LA32F-NEXT: ret 743; 744; LA32D-LABEL: test_d8: 745; LA32D: # %bb.0: 746; LA32D-NEXT: addi.w $a2, $zero, 1 747; LA32D-NEXT: movgr2fr.w $fa0, $a2 748; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_0) 749; LA32D-NEXT: fld.d $fa1, $a2, %pc_lo12(.LCPI6_0) 750; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_1) 751; LA32D-NEXT: fld.d $fa2, $a2, %pc_lo12(.LCPI6_1) 752; LA32D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_2) 753; LA32D-NEXT: fld.d $fa3, $a2, %pc_lo12(.LCPI6_2) 754; LA32D-NEXT: fld.d $fa4, $a0, 56 755; LA32D-NEXT: fld.d $fa5, $a0, 48 756; LA32D-NEXT: fld.d $fa6, $a0, 24 757; LA32D-NEXT: fld.d $fa7, $a0, 16 758; LA32D-NEXT: fld.d $ft0, $a0, 8 759; LA32D-NEXT: fld.d $ft1, $a0, 0 760; LA32D-NEXT: fld.d $ft2, $a0, 32 761; LA32D-NEXT: ffint.s.w $fa0, $fa0 762; LA32D-NEXT: fcvt.d.s $fa0, $fa0 763; LA32D-NEXT: fadd.d $ft1, $ft1, $fa0 764; LA32D-NEXT: fadd.d $fa0, $ft2, $fa0 765; LA32D-NEXT: fld.d $ft2, $a0, 40 766; LA32D-NEXT: fadd.d $ft0, $ft0, $fa1 767; LA32D-NEXT: fadd.d $fa7, $fa7, $fa2 768; LA32D-NEXT: fadd.d $fa6, $fa6, $fa3 769; LA32D-NEXT: fadd.d $fa1, $ft2, $fa1 770; LA32D-NEXT: fadd.d $fa2, $fa5, $fa2 771; LA32D-NEXT: fadd.d $fa3, $fa4, $fa3 772; LA32D-NEXT: fst.d $fa3, $a1, 56 773; LA32D-NEXT: fst.d $fa2, $a1, 48 774; LA32D-NEXT: fst.d $fa1, $a1, 40 775; LA32D-NEXT: fst.d $fa6, $a1, 24 776; LA32D-NEXT: fst.d $fa7, $a1, 16 777; LA32D-NEXT: fst.d $ft0, $a1, 8 778; LA32D-NEXT: fst.d $fa0, $a1, 32 779; LA32D-NEXT: fst.d $ft1, $a1, 0 780; LA32D-NEXT: ret 781; 782; LA64F-LABEL: test_d8: 783; LA64F: # %bb.0: 784; LA64F-NEXT: addi.d $sp, $sp, -112 785; LA64F-NEXT: st.d $ra, $sp, 104 # 8-byte Folded Spill 786; LA64F-NEXT: st.d $fp, $sp, 96 # 8-byte Folded Spill 787; LA64F-NEXT: st.d $s0, $sp, 88 # 8-byte Folded Spill 788; LA64F-NEXT: st.d $s1, $sp, 80 # 8-byte Folded Spill 789; LA64F-NEXT: st.d $s2, $sp, 72 # 8-byte Folded Spill 790; LA64F-NEXT: st.d $s3, $sp, 64 # 8-byte Folded Spill 791; LA64F-NEXT: st.d $s4, $sp, 56 # 8-byte Folded Spill 792; LA64F-NEXT: st.d $s5, $sp, 48 # 8-byte Folded Spill 793; LA64F-NEXT: st.d $s6, $sp, 40 # 8-byte Folded Spill 794; LA64F-NEXT: st.d $s7, $sp, 32 # 8-byte Folded Spill 795; LA64F-NEXT: st.d $s8, $sp, 24 # 8-byte Folded Spill 796; LA64F-NEXT: ld.d $a2, $a0, 56 797; LA64F-NEXT: st.d $a2, $sp, 16 # 8-byte Folded Spill 798; LA64F-NEXT: ld.d $s1, $a0, 40 799; LA64F-NEXT: ld.d $s2, $a0, 32 800; LA64F-NEXT: ld.d $s3, $a0, 24 801; LA64F-NEXT: ld.d $s4, $a0, 8 802; LA64F-NEXT: ld.d $s5, $a0, 0 803; LA64F-NEXT: ld.d $s6, $a0, 48 804; LA64F-NEXT: ld.d $a0, $a0, 16 805; LA64F-NEXT: move $fp, $a1 806; LA64F-NEXT: ori $a1, $zero, 0 807; LA64F-NEXT: lu32i.d $a1, -524288 808; LA64F-NEXT: lu52i.d $s7, $a1, 1024 809; LA64F-NEXT: move $a1, $s7 810; LA64F-NEXT: bl %plt(__adddf3) 811; LA64F-NEXT: st.d $a0, $sp, 8 # 8-byte Folded Spill 812; LA64F-NEXT: move $a0, $s6 813; LA64F-NEXT: move $a1, $s7 814; LA64F-NEXT: bl %plt(__adddf3) 815; LA64F-NEXT: move $s6, $a0 816; LA64F-NEXT: lu52i.d $s7, $zero, 1023 817; LA64F-NEXT: move $a0, $s5 818; LA64F-NEXT: move $a1, $s7 819; LA64F-NEXT: bl %plt(__adddf3) 820; LA64F-NEXT: move $s5, $a0 821; LA64F-NEXT: lu52i.d $s0, $zero, 1024 822; LA64F-NEXT: move $a0, $s4 823; LA64F-NEXT: move $a1, $s0 824; LA64F-NEXT: bl %plt(__adddf3) 825; LA64F-NEXT: move $s4, $a0 826; LA64F-NEXT: lu52i.d $s8, $zero, 1025 827; LA64F-NEXT: move $a0, $s3 828; LA64F-NEXT: move $a1, $s8 829; LA64F-NEXT: bl %plt(__adddf3) 830; LA64F-NEXT: move $s3, $a0 831; LA64F-NEXT: move $a0, $s2 832; LA64F-NEXT: move $a1, $s7 833; LA64F-NEXT: bl %plt(__adddf3) 834; LA64F-NEXT: move $s2, $a0 835; LA64F-NEXT: move $a0, $s1 836; LA64F-NEXT: move $a1, $s0 837; LA64F-NEXT: bl %plt(__adddf3) 838; LA64F-NEXT: move $s0, $a0 839; LA64F-NEXT: ld.d $a0, $sp, 16 # 8-byte Folded Reload 840; LA64F-NEXT: move $a1, $s8 841; LA64F-NEXT: bl %plt(__adddf3) 842; LA64F-NEXT: st.d $a0, $fp, 56 843; LA64F-NEXT: st.d $s0, $fp, 40 844; LA64F-NEXT: st.d $s2, $fp, 32 845; LA64F-NEXT: st.d $s3, $fp, 24 846; LA64F-NEXT: st.d $s4, $fp, 8 847; LA64F-NEXT: st.d $s5, $fp, 0 848; LA64F-NEXT: st.d $s6, $fp, 48 849; LA64F-NEXT: ld.d $a0, $sp, 8 # 8-byte Folded Reload 850; LA64F-NEXT: st.d $a0, $fp, 16 851; LA64F-NEXT: ld.d $s8, $sp, 24 # 8-byte Folded Reload 852; LA64F-NEXT: ld.d $s7, $sp, 32 # 8-byte Folded Reload 853; LA64F-NEXT: ld.d $s6, $sp, 40 # 8-byte Folded Reload 854; LA64F-NEXT: ld.d $s5, $sp, 48 # 8-byte Folded Reload 855; LA64F-NEXT: ld.d $s4, $sp, 56 # 8-byte Folded Reload 856; LA64F-NEXT: ld.d $s3, $sp, 64 # 8-byte Folded Reload 857; LA64F-NEXT: ld.d $s2, $sp, 72 # 8-byte Folded Reload 858; LA64F-NEXT: ld.d $s1, $sp, 80 # 8-byte Folded Reload 859; LA64F-NEXT: ld.d $s0, $sp, 88 # 8-byte Folded Reload 860; LA64F-NEXT: ld.d $fp, $sp, 96 # 8-byte Folded Reload 861; LA64F-NEXT: ld.d $ra, $sp, 104 # 8-byte Folded Reload 862; LA64F-NEXT: addi.d $sp, $sp, 112 863; LA64F-NEXT: ret 864; 865; LA64D-LABEL: test_d8: 866; LA64D: # %bb.0: 867; LA64D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_0) 868; LA64D-NEXT: vld $vr0, $a2, %pc_lo12(.LCPI6_0) 869; LA64D-NEXT: pcalau12i $a2, %pc_hi20(.LCPI6_1) 870; LA64D-NEXT: vld $vr1, $a2, %pc_lo12(.LCPI6_1) 871; LA64D-NEXT: vld $vr2, $a0, 16 872; LA64D-NEXT: vld $vr3, $a0, 0 873; LA64D-NEXT: vld $vr4, $a0, 48 874; LA64D-NEXT: vld $vr5, $a0, 32 875; LA64D-NEXT: vfadd.d $vr2, $vr2, $vr0 876; LA64D-NEXT: vfadd.d $vr3, $vr3, $vr1 877; LA64D-NEXT: vfadd.d $vr0, $vr4, $vr0 878; LA64D-NEXT: vfadd.d $vr1, $vr5, $vr1 879; LA64D-NEXT: vst $vr1, $a1, 32 880; LA64D-NEXT: vst $vr0, $a1, 48 881; LA64D-NEXT: vst $vr3, $a1, 0 882; LA64D-NEXT: vst $vr2, $a1, 16 883; LA64D-NEXT: ret 884 %p = load %d8, ptr %P 885 %R = fadd %d8 %p, < double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00 > 886 store %d8 %R, ptr %S 887 ret void 888} 889