1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -mtriple=riscv32 -mattr=+v,+f,+d -target-abi=ilp32d -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s --check-prefix=RV32 4; RUN: llc -mtriple=riscv64 -mattr=+v,+f,+d -target-abi=lp64d -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s --check-prefix=RV64 6 7define <1 x float> @powi_v1f32(<1 x float> %x, i32 %y) nounwind { 8; RV32-LABEL: powi_v1f32: 9; RV32: # %bb.0: 10; RV32-NEXT: addi sp, sp, -16 11; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 12; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 13; RV32-NEXT: vfmv.f.s fa0, v8 14; RV32-NEXT: call __powisf2 15; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 16; RV32-NEXT: vfmv.s.f v8, fa0 17; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 18; RV32-NEXT: addi sp, sp, 16 19; RV32-NEXT: ret 20; 21; RV64-LABEL: powi_v1f32: 22; RV64: # %bb.0: 23; RV64-NEXT: addi sp, sp, -16 24; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 25; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 26; RV64-NEXT: vfmv.f.s fa0, v8 27; RV64-NEXT: sext.w a0, a0 28; RV64-NEXT: call __powisf2 29; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 30; RV64-NEXT: vfmv.s.f v8, fa0 31; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 32; RV64-NEXT: addi sp, sp, 16 33; RV64-NEXT: ret 34 %a = call <1 x float> @llvm.powi.v1f32.i32(<1 x float> %x, i32 %y) 35 ret <1 x float> %a 36} 37declare <1 x float> @llvm.powi.v1f32.i32(<1 x float>, i32) 38 39define <2 x float> @powi_v2f32(<2 x float> %x, i32 %y) nounwind { 40; RV32-LABEL: powi_v2f32: 41; RV32: # %bb.0: 42; RV32-NEXT: addi sp, sp, -32 43; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 44; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 45; RV32-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 46; RV32-NEXT: csrr a1, vlenb 47; RV32-NEXT: sub sp, sp, a1 48; RV32-NEXT: mv s0, a0 49; RV32-NEXT: addi a1, sp, 16 50; RV32-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 51; RV32-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 52; RV32-NEXT: vslidedown.vi v9, v8, 1 53; RV32-NEXT: vfmv.f.s fa0, v9 54; RV32-NEXT: call __powisf2 55; RV32-NEXT: fmv.s fs0, fa0 56; RV32-NEXT: flw fa0, 16(sp) # 8-byte Folded Reload 57; RV32-NEXT: mv a0, s0 58; RV32-NEXT: call __powisf2 59; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 60; RV32-NEXT: vfmv.v.f v8, fa0 61; RV32-NEXT: vfslide1down.vf v8, v8, fs0 62; RV32-NEXT: csrr a0, vlenb 63; RV32-NEXT: add sp, sp, a0 64; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 65; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 66; RV32-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 67; RV32-NEXT: addi sp, sp, 32 68; RV32-NEXT: ret 69; 70; RV64-LABEL: powi_v2f32: 71; RV64: # %bb.0: 72; RV64-NEXT: addi sp, sp, -64 73; RV64-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 74; RV64-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 75; RV64-NEXT: fsd fs0, 40(sp) # 8-byte Folded Spill 76; RV64-NEXT: csrr a1, vlenb 77; RV64-NEXT: sub sp, sp, a1 78; RV64-NEXT: addi a1, sp, 32 79; RV64-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 80; RV64-NEXT: sext.w s0, a0 81; RV64-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 82; RV64-NEXT: vslidedown.vi v9, v8, 1 83; RV64-NEXT: vfmv.f.s fa0, v9 84; RV64-NEXT: mv a0, s0 85; RV64-NEXT: call __powisf2 86; RV64-NEXT: fmv.s fs0, fa0 87; RV64-NEXT: flw fa0, 32(sp) # 8-byte Folded Reload 88; RV64-NEXT: mv a0, s0 89; RV64-NEXT: call __powisf2 90; RV64-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 91; RV64-NEXT: vfmv.v.f v8, fa0 92; RV64-NEXT: vfslide1down.vf v8, v8, fs0 93; RV64-NEXT: csrr a0, vlenb 94; RV64-NEXT: add sp, sp, a0 95; RV64-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 96; RV64-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 97; RV64-NEXT: fld fs0, 40(sp) # 8-byte Folded Reload 98; RV64-NEXT: addi sp, sp, 64 99; RV64-NEXT: ret 100 %a = call <2 x float> @llvm.powi.v2f32.i32(<2 x float> %x, i32 %y) 101 ret <2 x float> %a 102} 103declare <2 x float> @llvm.powi.v2f32.i32(<2 x float>, i32) 104 105define <3 x float> @powi_v3f32(<3 x float> %x, i32 %y) nounwind { 106; RV32-LABEL: powi_v3f32: 107; RV32: # %bb.0: 108; RV32-NEXT: addi sp, sp, -32 109; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 110; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 111; RV32-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 112; RV32-NEXT: csrr a1, vlenb 113; RV32-NEXT: slli a1, a1, 1 114; RV32-NEXT: sub sp, sp, a1 115; RV32-NEXT: mv s0, a0 116; RV32-NEXT: csrr a1, vlenb 117; RV32-NEXT: add a1, sp, a1 118; RV32-NEXT: addi a1, a1, 16 119; RV32-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 120; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 121; RV32-NEXT: vslidedown.vi v9, v8, 1 122; RV32-NEXT: vfmv.f.s fa0, v9 123; RV32-NEXT: call __powisf2 124; RV32-NEXT: fmv.s fs0, fa0 125; RV32-NEXT: csrr a0, vlenb 126; RV32-NEXT: add a0, sp, a0 127; RV32-NEXT: flw fa0, 16(a0) # 8-byte Folded Reload 128; RV32-NEXT: mv a0, s0 129; RV32-NEXT: call __powisf2 130; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 131; RV32-NEXT: vfmv.v.f v8, fa0 132; RV32-NEXT: vfslide1down.vf v8, v8, fs0 133; RV32-NEXT: addi a0, sp, 16 134; RV32-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill 135; RV32-NEXT: csrr a0, vlenb 136; RV32-NEXT: add a0, sp, a0 137; RV32-NEXT: addi a0, a0, 16 138; RV32-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 139; RV32-NEXT: vslidedown.vi v8, v8, 2 140; RV32-NEXT: vfmv.f.s fa0, v8 141; RV32-NEXT: mv a0, s0 142; RV32-NEXT: call __powisf2 143; RV32-NEXT: addi a0, sp, 16 144; RV32-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 145; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 146; RV32-NEXT: vfslide1down.vf v8, v8, fa0 147; RV32-NEXT: vslidedown.vi v8, v8, 1 148; RV32-NEXT: csrr a0, vlenb 149; RV32-NEXT: slli a0, a0, 1 150; RV32-NEXT: add sp, sp, a0 151; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 152; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 153; RV32-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 154; RV32-NEXT: addi sp, sp, 32 155; RV32-NEXT: ret 156; 157; RV64-LABEL: powi_v3f32: 158; RV64: # %bb.0: 159; RV64-NEXT: addi sp, sp, -64 160; RV64-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 161; RV64-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 162; RV64-NEXT: fsd fs0, 40(sp) # 8-byte Folded Spill 163; RV64-NEXT: csrr a1, vlenb 164; RV64-NEXT: slli a1, a1, 1 165; RV64-NEXT: sub sp, sp, a1 166; RV64-NEXT: csrr a1, vlenb 167; RV64-NEXT: add a1, sp, a1 168; RV64-NEXT: addi a1, a1, 32 169; RV64-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 170; RV64-NEXT: sext.w s0, a0 171; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 172; RV64-NEXT: vslidedown.vi v9, v8, 1 173; RV64-NEXT: vfmv.f.s fa0, v9 174; RV64-NEXT: mv a0, s0 175; RV64-NEXT: call __powisf2 176; RV64-NEXT: fmv.s fs0, fa0 177; RV64-NEXT: csrr a0, vlenb 178; RV64-NEXT: add a0, sp, a0 179; RV64-NEXT: flw fa0, 32(a0) # 8-byte Folded Reload 180; RV64-NEXT: mv a0, s0 181; RV64-NEXT: call __powisf2 182; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma 183; RV64-NEXT: vfmv.v.f v8, fa0 184; RV64-NEXT: vfslide1down.vf v8, v8, fs0 185; RV64-NEXT: addi a0, sp, 32 186; RV64-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill 187; RV64-NEXT: csrr a0, vlenb 188; RV64-NEXT: add a0, sp, a0 189; RV64-NEXT: addi a0, a0, 32 190; RV64-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 191; RV64-NEXT: vslidedown.vi v8, v8, 2 192; RV64-NEXT: vfmv.f.s fa0, v8 193; RV64-NEXT: mv a0, s0 194; RV64-NEXT: call __powisf2 195; RV64-NEXT: addi a0, sp, 32 196; RV64-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 197; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma 198; RV64-NEXT: vfslide1down.vf v8, v8, fa0 199; RV64-NEXT: vslidedown.vi v8, v8, 1 200; RV64-NEXT: csrr a0, vlenb 201; RV64-NEXT: slli a0, a0, 1 202; RV64-NEXT: add sp, sp, a0 203; RV64-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 204; RV64-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 205; RV64-NEXT: fld fs0, 40(sp) # 8-byte Folded Reload 206; RV64-NEXT: addi sp, sp, 64 207; RV64-NEXT: ret 208 %a = call <3 x float> @llvm.powi.v3f32.i32(<3 x float> %x, i32 %y) 209 ret <3 x float> %a 210} 211declare <3 x float> @llvm.powi.v3f32.i32(<3 x float>, i32) 212 213define <4 x float> @powi_v4f32(<4 x float> %x, i32 %y) nounwind { 214; RV32-LABEL: powi_v4f32: 215; RV32: # %bb.0: 216; RV32-NEXT: addi sp, sp, -32 217; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 218; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 219; RV32-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 220; RV32-NEXT: csrr a1, vlenb 221; RV32-NEXT: slli a1, a1, 1 222; RV32-NEXT: sub sp, sp, a1 223; RV32-NEXT: mv s0, a0 224; RV32-NEXT: csrr a1, vlenb 225; RV32-NEXT: add a1, sp, a1 226; RV32-NEXT: addi a1, a1, 16 227; RV32-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 228; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 229; RV32-NEXT: vslidedown.vi v9, v8, 1 230; RV32-NEXT: vfmv.f.s fa0, v9 231; RV32-NEXT: call __powisf2 232; RV32-NEXT: fmv.s fs0, fa0 233; RV32-NEXT: csrr a0, vlenb 234; RV32-NEXT: add a0, sp, a0 235; RV32-NEXT: flw fa0, 16(a0) # 8-byte Folded Reload 236; RV32-NEXT: mv a0, s0 237; RV32-NEXT: call __powisf2 238; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 239; RV32-NEXT: vfmv.v.f v8, fa0 240; RV32-NEXT: vfslide1down.vf v8, v8, fs0 241; RV32-NEXT: addi a0, sp, 16 242; RV32-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill 243; RV32-NEXT: csrr a0, vlenb 244; RV32-NEXT: add a0, sp, a0 245; RV32-NEXT: addi a0, a0, 16 246; RV32-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 247; RV32-NEXT: vslidedown.vi v8, v8, 2 248; RV32-NEXT: vfmv.f.s fa0, v8 249; RV32-NEXT: mv a0, s0 250; RV32-NEXT: call __powisf2 251; RV32-NEXT: addi a0, sp, 16 252; RV32-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 253; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 254; RV32-NEXT: vfslide1down.vf v8, v8, fa0 255; RV32-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill 256; RV32-NEXT: csrr a0, vlenb 257; RV32-NEXT: add a0, sp, a0 258; RV32-NEXT: addi a0, a0, 16 259; RV32-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 260; RV32-NEXT: vslidedown.vi v8, v8, 3 261; RV32-NEXT: vfmv.f.s fa0, v8 262; RV32-NEXT: mv a0, s0 263; RV32-NEXT: call __powisf2 264; RV32-NEXT: addi a0, sp, 16 265; RV32-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 266; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 267; RV32-NEXT: vfslide1down.vf v8, v8, fa0 268; RV32-NEXT: csrr a0, vlenb 269; RV32-NEXT: slli a0, a0, 1 270; RV32-NEXT: add sp, sp, a0 271; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 272; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 273; RV32-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 274; RV32-NEXT: addi sp, sp, 32 275; RV32-NEXT: ret 276; 277; RV64-LABEL: powi_v4f32: 278; RV64: # %bb.0: 279; RV64-NEXT: addi sp, sp, -64 280; RV64-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 281; RV64-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 282; RV64-NEXT: fsd fs0, 40(sp) # 8-byte Folded Spill 283; RV64-NEXT: csrr a1, vlenb 284; RV64-NEXT: slli a1, a1, 1 285; RV64-NEXT: sub sp, sp, a1 286; RV64-NEXT: csrr a1, vlenb 287; RV64-NEXT: add a1, sp, a1 288; RV64-NEXT: addi a1, a1, 32 289; RV64-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 290; RV64-NEXT: sext.w s0, a0 291; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 292; RV64-NEXT: vslidedown.vi v9, v8, 1 293; RV64-NEXT: vfmv.f.s fa0, v9 294; RV64-NEXT: mv a0, s0 295; RV64-NEXT: call __powisf2 296; RV64-NEXT: fmv.s fs0, fa0 297; RV64-NEXT: csrr a0, vlenb 298; RV64-NEXT: add a0, sp, a0 299; RV64-NEXT: flw fa0, 32(a0) # 8-byte Folded Reload 300; RV64-NEXT: mv a0, s0 301; RV64-NEXT: call __powisf2 302; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma 303; RV64-NEXT: vfmv.v.f v8, fa0 304; RV64-NEXT: vfslide1down.vf v8, v8, fs0 305; RV64-NEXT: addi a0, sp, 32 306; RV64-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill 307; RV64-NEXT: csrr a0, vlenb 308; RV64-NEXT: add a0, sp, a0 309; RV64-NEXT: addi a0, a0, 32 310; RV64-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 311; RV64-NEXT: vslidedown.vi v8, v8, 2 312; RV64-NEXT: vfmv.f.s fa0, v8 313; RV64-NEXT: mv a0, s0 314; RV64-NEXT: call __powisf2 315; RV64-NEXT: addi a0, sp, 32 316; RV64-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 317; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma 318; RV64-NEXT: vfslide1down.vf v8, v8, fa0 319; RV64-NEXT: vs1r.v v8, (a0) # Unknown-size Folded Spill 320; RV64-NEXT: csrr a0, vlenb 321; RV64-NEXT: add a0, sp, a0 322; RV64-NEXT: addi a0, a0, 32 323; RV64-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 324; RV64-NEXT: vslidedown.vi v8, v8, 3 325; RV64-NEXT: vfmv.f.s fa0, v8 326; RV64-NEXT: mv a0, s0 327; RV64-NEXT: call __powisf2 328; RV64-NEXT: addi a0, sp, 32 329; RV64-NEXT: vl1r.v v8, (a0) # Unknown-size Folded Reload 330; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma 331; RV64-NEXT: vfslide1down.vf v8, v8, fa0 332; RV64-NEXT: csrr a0, vlenb 333; RV64-NEXT: slli a0, a0, 1 334; RV64-NEXT: add sp, sp, a0 335; RV64-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 336; RV64-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 337; RV64-NEXT: fld fs0, 40(sp) # 8-byte Folded Reload 338; RV64-NEXT: addi sp, sp, 64 339; RV64-NEXT: ret 340 %a = call <4 x float> @llvm.powi.v4f32.i32(<4 x float> %x, i32 %y) 341 ret <4 x float> %a 342} 343declare <4 x float> @llvm.powi.v4f32.i32(<4 x float>, i32) 344 345define <8 x float> @powi_v8f32(<8 x float> %x, i32 %y) nounwind { 346; RV32-LABEL: powi_v8f32: 347; RV32: # %bb.0: 348; RV32-NEXT: addi sp, sp, -32 349; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 350; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 351; RV32-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 352; RV32-NEXT: csrr a1, vlenb 353; RV32-NEXT: slli a1, a1, 2 354; RV32-NEXT: sub sp, sp, a1 355; RV32-NEXT: mv s0, a0 356; RV32-NEXT: csrr a1, vlenb 357; RV32-NEXT: slli a1, a1, 1 358; RV32-NEXT: add a1, sp, a1 359; RV32-NEXT: addi a1, a1, 16 360; RV32-NEXT: vs2r.v v8, (a1) # Unknown-size Folded Spill 361; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 362; RV32-NEXT: vslidedown.vi v10, v8, 1 363; RV32-NEXT: vfmv.f.s fa0, v10 364; RV32-NEXT: call __powisf2 365; RV32-NEXT: fmv.s fs0, fa0 366; RV32-NEXT: csrr a0, vlenb 367; RV32-NEXT: slli a0, a0, 1 368; RV32-NEXT: add a0, sp, a0 369; RV32-NEXT: addi a0, a0, 16 370; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 371; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 372; RV32-NEXT: vfmv.f.s fa0, v8 373; RV32-NEXT: mv a0, s0 374; RV32-NEXT: call __powisf2 375; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 376; RV32-NEXT: vfmv.v.f v8, fa0 377; RV32-NEXT: vfslide1down.vf v8, v8, fs0 378; RV32-NEXT: addi a0, sp, 16 379; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 380; RV32-NEXT: csrr a0, vlenb 381; RV32-NEXT: slli a0, a0, 1 382; RV32-NEXT: add a0, sp, a0 383; RV32-NEXT: addi a0, a0, 16 384; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 385; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 386; RV32-NEXT: vslidedown.vi v8, v8, 2 387; RV32-NEXT: vfmv.f.s fa0, v8 388; RV32-NEXT: mv a0, s0 389; RV32-NEXT: call __powisf2 390; RV32-NEXT: addi a0, sp, 16 391; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 392; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 393; RV32-NEXT: vfslide1down.vf v8, v8, fa0 394; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 395; RV32-NEXT: csrr a0, vlenb 396; RV32-NEXT: slli a0, a0, 1 397; RV32-NEXT: add a0, sp, a0 398; RV32-NEXT: addi a0, a0, 16 399; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 400; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 401; RV32-NEXT: vslidedown.vi v8, v8, 3 402; RV32-NEXT: vfmv.f.s fa0, v8 403; RV32-NEXT: mv a0, s0 404; RV32-NEXT: call __powisf2 405; RV32-NEXT: addi a0, sp, 16 406; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 407; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 408; RV32-NEXT: vfslide1down.vf v8, v8, fa0 409; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 410; RV32-NEXT: csrr a0, vlenb 411; RV32-NEXT: slli a0, a0, 1 412; RV32-NEXT: add a0, sp, a0 413; RV32-NEXT: addi a0, a0, 16 414; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 415; RV32-NEXT: vslidedown.vi v8, v8, 4 416; RV32-NEXT: vfmv.f.s fa0, v8 417; RV32-NEXT: mv a0, s0 418; RV32-NEXT: call __powisf2 419; RV32-NEXT: addi a0, sp, 16 420; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 421; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 422; RV32-NEXT: vfslide1down.vf v8, v8, fa0 423; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 424; RV32-NEXT: csrr a0, vlenb 425; RV32-NEXT: slli a0, a0, 1 426; RV32-NEXT: add a0, sp, a0 427; RV32-NEXT: addi a0, a0, 16 428; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 429; RV32-NEXT: vslidedown.vi v8, v8, 5 430; RV32-NEXT: vfmv.f.s fa0, v8 431; RV32-NEXT: mv a0, s0 432; RV32-NEXT: call __powisf2 433; RV32-NEXT: addi a0, sp, 16 434; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 435; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 436; RV32-NEXT: vfslide1down.vf v8, v8, fa0 437; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 438; RV32-NEXT: csrr a0, vlenb 439; RV32-NEXT: slli a0, a0, 1 440; RV32-NEXT: add a0, sp, a0 441; RV32-NEXT: addi a0, a0, 16 442; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 443; RV32-NEXT: vslidedown.vi v8, v8, 6 444; RV32-NEXT: vfmv.f.s fa0, v8 445; RV32-NEXT: mv a0, s0 446; RV32-NEXT: call __powisf2 447; RV32-NEXT: addi a0, sp, 16 448; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 449; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 450; RV32-NEXT: vfslide1down.vf v8, v8, fa0 451; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 452; RV32-NEXT: csrr a0, vlenb 453; RV32-NEXT: slli a0, a0, 1 454; RV32-NEXT: add a0, sp, a0 455; RV32-NEXT: addi a0, a0, 16 456; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 457; RV32-NEXT: vslidedown.vi v8, v8, 7 458; RV32-NEXT: vfmv.f.s fa0, v8 459; RV32-NEXT: mv a0, s0 460; RV32-NEXT: call __powisf2 461; RV32-NEXT: addi a0, sp, 16 462; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 463; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 464; RV32-NEXT: vfslide1down.vf v8, v8, fa0 465; RV32-NEXT: csrr a0, vlenb 466; RV32-NEXT: slli a0, a0, 2 467; RV32-NEXT: add sp, sp, a0 468; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 469; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 470; RV32-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 471; RV32-NEXT: addi sp, sp, 32 472; RV32-NEXT: ret 473; 474; RV64-LABEL: powi_v8f32: 475; RV64: # %bb.0: 476; RV64-NEXT: addi sp, sp, -64 477; RV64-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 478; RV64-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 479; RV64-NEXT: fsd fs0, 40(sp) # 8-byte Folded Spill 480; RV64-NEXT: csrr a1, vlenb 481; RV64-NEXT: slli a1, a1, 2 482; RV64-NEXT: sub sp, sp, a1 483; RV64-NEXT: csrr a1, vlenb 484; RV64-NEXT: slli a1, a1, 1 485; RV64-NEXT: add a1, sp, a1 486; RV64-NEXT: addi a1, a1, 32 487; RV64-NEXT: vs2r.v v8, (a1) # Unknown-size Folded Spill 488; RV64-NEXT: sext.w s0, a0 489; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 490; RV64-NEXT: vslidedown.vi v10, v8, 1 491; RV64-NEXT: vfmv.f.s fa0, v10 492; RV64-NEXT: mv a0, s0 493; RV64-NEXT: call __powisf2 494; RV64-NEXT: fmv.s fs0, fa0 495; RV64-NEXT: csrr a0, vlenb 496; RV64-NEXT: slli a0, a0, 1 497; RV64-NEXT: add a0, sp, a0 498; RV64-NEXT: addi a0, a0, 32 499; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 500; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 501; RV64-NEXT: vfmv.f.s fa0, v8 502; RV64-NEXT: mv a0, s0 503; RV64-NEXT: call __powisf2 504; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 505; RV64-NEXT: vfmv.v.f v8, fa0 506; RV64-NEXT: vfslide1down.vf v8, v8, fs0 507; RV64-NEXT: addi a0, sp, 32 508; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 509; RV64-NEXT: csrr a0, vlenb 510; RV64-NEXT: slli a0, a0, 1 511; RV64-NEXT: add a0, sp, a0 512; RV64-NEXT: addi a0, a0, 32 513; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 514; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 515; RV64-NEXT: vslidedown.vi v8, v8, 2 516; RV64-NEXT: vfmv.f.s fa0, v8 517; RV64-NEXT: mv a0, s0 518; RV64-NEXT: call __powisf2 519; RV64-NEXT: addi a0, sp, 32 520; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 521; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 522; RV64-NEXT: vfslide1down.vf v8, v8, fa0 523; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 524; RV64-NEXT: csrr a0, vlenb 525; RV64-NEXT: slli a0, a0, 1 526; RV64-NEXT: add a0, sp, a0 527; RV64-NEXT: addi a0, a0, 32 528; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 529; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 530; RV64-NEXT: vslidedown.vi v8, v8, 3 531; RV64-NEXT: vfmv.f.s fa0, v8 532; RV64-NEXT: mv a0, s0 533; RV64-NEXT: call __powisf2 534; RV64-NEXT: addi a0, sp, 32 535; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 536; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 537; RV64-NEXT: vfslide1down.vf v8, v8, fa0 538; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 539; RV64-NEXT: csrr a0, vlenb 540; RV64-NEXT: slli a0, a0, 1 541; RV64-NEXT: add a0, sp, a0 542; RV64-NEXT: addi a0, a0, 32 543; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 544; RV64-NEXT: vslidedown.vi v8, v8, 4 545; RV64-NEXT: vfmv.f.s fa0, v8 546; RV64-NEXT: mv a0, s0 547; RV64-NEXT: call __powisf2 548; RV64-NEXT: addi a0, sp, 32 549; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 550; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 551; RV64-NEXT: vfslide1down.vf v8, v8, fa0 552; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 553; RV64-NEXT: csrr a0, vlenb 554; RV64-NEXT: slli a0, a0, 1 555; RV64-NEXT: add a0, sp, a0 556; RV64-NEXT: addi a0, a0, 32 557; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 558; RV64-NEXT: vslidedown.vi v8, v8, 5 559; RV64-NEXT: vfmv.f.s fa0, v8 560; RV64-NEXT: mv a0, s0 561; RV64-NEXT: call __powisf2 562; RV64-NEXT: addi a0, sp, 32 563; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 564; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 565; RV64-NEXT: vfslide1down.vf v8, v8, fa0 566; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 567; RV64-NEXT: csrr a0, vlenb 568; RV64-NEXT: slli a0, a0, 1 569; RV64-NEXT: add a0, sp, a0 570; RV64-NEXT: addi a0, a0, 32 571; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 572; RV64-NEXT: vslidedown.vi v8, v8, 6 573; RV64-NEXT: vfmv.f.s fa0, v8 574; RV64-NEXT: mv a0, s0 575; RV64-NEXT: call __powisf2 576; RV64-NEXT: addi a0, sp, 32 577; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 578; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 579; RV64-NEXT: vfslide1down.vf v8, v8, fa0 580; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 581; RV64-NEXT: csrr a0, vlenb 582; RV64-NEXT: slli a0, a0, 1 583; RV64-NEXT: add a0, sp, a0 584; RV64-NEXT: addi a0, a0, 32 585; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 586; RV64-NEXT: vslidedown.vi v8, v8, 7 587; RV64-NEXT: vfmv.f.s fa0, v8 588; RV64-NEXT: mv a0, s0 589; RV64-NEXT: call __powisf2 590; RV64-NEXT: addi a0, sp, 32 591; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 592; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma 593; RV64-NEXT: vfslide1down.vf v8, v8, fa0 594; RV64-NEXT: csrr a0, vlenb 595; RV64-NEXT: slli a0, a0, 2 596; RV64-NEXT: add sp, sp, a0 597; RV64-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 598; RV64-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 599; RV64-NEXT: fld fs0, 40(sp) # 8-byte Folded Reload 600; RV64-NEXT: addi sp, sp, 64 601; RV64-NEXT: ret 602 %a = call <8 x float> @llvm.powi.v8f32.i32(<8 x float> %x, i32 %y) 603 ret <8 x float> %a 604} 605declare <8 x float> @llvm.powi.v8f32.i32(<8 x float>, i32) 606 607define <16 x float> @powi_v16f32(<16 x float> %x, i32 %y) nounwind { 608; RV32-LABEL: powi_v16f32: 609; RV32: # %bb.0: 610; RV32-NEXT: addi sp, sp, -272 611; RV32-NEXT: sw ra, 268(sp) # 4-byte Folded Spill 612; RV32-NEXT: sw s0, 264(sp) # 4-byte Folded Spill 613; RV32-NEXT: sw s2, 260(sp) # 4-byte Folded Spill 614; RV32-NEXT: addi s0, sp, 272 615; RV32-NEXT: csrr a1, vlenb 616; RV32-NEXT: slli a1, a1, 2 617; RV32-NEXT: sub sp, sp, a1 618; RV32-NEXT: andi sp, sp, -64 619; RV32-NEXT: mv s2, a0 620; RV32-NEXT: addi a0, sp, 256 621; RV32-NEXT: vs4r.v v8, (a0) # Unknown-size Folded Spill 622; RV32-NEXT: addi a0, sp, 64 623; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma 624; RV32-NEXT: vse32.v v8, (a0) 625; RV32-NEXT: flw fa0, 124(sp) 626; RV32-NEXT: mv a0, s2 627; RV32-NEXT: call __powisf2 628; RV32-NEXT: fsw fa0, 188(sp) 629; RV32-NEXT: flw fa0, 120(sp) 630; RV32-NEXT: mv a0, s2 631; RV32-NEXT: call __powisf2 632; RV32-NEXT: fsw fa0, 184(sp) 633; RV32-NEXT: flw fa0, 116(sp) 634; RV32-NEXT: mv a0, s2 635; RV32-NEXT: call __powisf2 636; RV32-NEXT: fsw fa0, 180(sp) 637; RV32-NEXT: flw fa0, 112(sp) 638; RV32-NEXT: mv a0, s2 639; RV32-NEXT: call __powisf2 640; RV32-NEXT: fsw fa0, 176(sp) 641; RV32-NEXT: flw fa0, 108(sp) 642; RV32-NEXT: mv a0, s2 643; RV32-NEXT: call __powisf2 644; RV32-NEXT: fsw fa0, 172(sp) 645; RV32-NEXT: flw fa0, 104(sp) 646; RV32-NEXT: mv a0, s2 647; RV32-NEXT: call __powisf2 648; RV32-NEXT: fsw fa0, 168(sp) 649; RV32-NEXT: flw fa0, 100(sp) 650; RV32-NEXT: mv a0, s2 651; RV32-NEXT: call __powisf2 652; RV32-NEXT: fsw fa0, 164(sp) 653; RV32-NEXT: flw fa0, 96(sp) 654; RV32-NEXT: mv a0, s2 655; RV32-NEXT: call __powisf2 656; RV32-NEXT: fsw fa0, 160(sp) 657; RV32-NEXT: addi a0, sp, 256 658; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 659; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 660; RV32-NEXT: vfmv.f.s fa0, v8 661; RV32-NEXT: mv a0, s2 662; RV32-NEXT: call __powisf2 663; RV32-NEXT: fsw fa0, 128(sp) 664; RV32-NEXT: addi a0, sp, 256 665; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 666; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 667; RV32-NEXT: vslidedown.vi v8, v8, 3 668; RV32-NEXT: vfmv.f.s fa0, v8 669; RV32-NEXT: mv a0, s2 670; RV32-NEXT: call __powisf2 671; RV32-NEXT: fsw fa0, 140(sp) 672; RV32-NEXT: addi a0, sp, 256 673; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 674; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 675; RV32-NEXT: vslidedown.vi v8, v8, 2 676; RV32-NEXT: vfmv.f.s fa0, v8 677; RV32-NEXT: mv a0, s2 678; RV32-NEXT: call __powisf2 679; RV32-NEXT: fsw fa0, 136(sp) 680; RV32-NEXT: addi a0, sp, 256 681; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 682; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 683; RV32-NEXT: vslidedown.vi v8, v8, 1 684; RV32-NEXT: vfmv.f.s fa0, v8 685; RV32-NEXT: mv a0, s2 686; RV32-NEXT: call __powisf2 687; RV32-NEXT: fsw fa0, 132(sp) 688; RV32-NEXT: addi a0, sp, 256 689; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 690; RV32-NEXT: vsetivli zero, 1, e32, m2, ta, ma 691; RV32-NEXT: vslidedown.vi v8, v8, 7 692; RV32-NEXT: vfmv.f.s fa0, v8 693; RV32-NEXT: mv a0, s2 694; RV32-NEXT: call __powisf2 695; RV32-NEXT: fsw fa0, 156(sp) 696; RV32-NEXT: addi a0, sp, 256 697; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 698; RV32-NEXT: vsetivli zero, 1, e32, m2, ta, ma 699; RV32-NEXT: vslidedown.vi v8, v8, 6 700; RV32-NEXT: vfmv.f.s fa0, v8 701; RV32-NEXT: mv a0, s2 702; RV32-NEXT: call __powisf2 703; RV32-NEXT: fsw fa0, 152(sp) 704; RV32-NEXT: addi a0, sp, 256 705; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 706; RV32-NEXT: vsetivli zero, 1, e32, m2, ta, ma 707; RV32-NEXT: vslidedown.vi v8, v8, 5 708; RV32-NEXT: vfmv.f.s fa0, v8 709; RV32-NEXT: mv a0, s2 710; RV32-NEXT: call __powisf2 711; RV32-NEXT: fsw fa0, 148(sp) 712; RV32-NEXT: addi a0, sp, 256 713; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 714; RV32-NEXT: vsetivli zero, 1, e32, m2, ta, ma 715; RV32-NEXT: vslidedown.vi v8, v8, 4 716; RV32-NEXT: vfmv.f.s fa0, v8 717; RV32-NEXT: mv a0, s2 718; RV32-NEXT: call __powisf2 719; RV32-NEXT: fsw fa0, 144(sp) 720; RV32-NEXT: addi a0, sp, 128 721; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma 722; RV32-NEXT: vle32.v v8, (a0) 723; RV32-NEXT: addi sp, s0, -272 724; RV32-NEXT: lw ra, 268(sp) # 4-byte Folded Reload 725; RV32-NEXT: lw s0, 264(sp) # 4-byte Folded Reload 726; RV32-NEXT: lw s2, 260(sp) # 4-byte Folded Reload 727; RV32-NEXT: addi sp, sp, 272 728; RV32-NEXT: ret 729; 730; RV64-LABEL: powi_v16f32: 731; RV64: # %bb.0: 732; RV64-NEXT: addi sp, sp, -272 733; RV64-NEXT: sd ra, 264(sp) # 8-byte Folded Spill 734; RV64-NEXT: sd s0, 256(sp) # 8-byte Folded Spill 735; RV64-NEXT: sd s2, 248(sp) # 8-byte Folded Spill 736; RV64-NEXT: addi s0, sp, 272 737; RV64-NEXT: csrr a1, vlenb 738; RV64-NEXT: slli a1, a1, 2 739; RV64-NEXT: sub sp, sp, a1 740; RV64-NEXT: andi sp, sp, -64 741; RV64-NEXT: addi a1, sp, 240 742; RV64-NEXT: vs4r.v v8, (a1) # Unknown-size Folded Spill 743; RV64-NEXT: addi a1, sp, 64 744; RV64-NEXT: vsetivli zero, 16, e32, m4, ta, ma 745; RV64-NEXT: vse32.v v8, (a1) 746; RV64-NEXT: flw fa0, 124(sp) 747; RV64-NEXT: sext.w s2, a0 748; RV64-NEXT: mv a0, s2 749; RV64-NEXT: call __powisf2 750; RV64-NEXT: fsw fa0, 188(sp) 751; RV64-NEXT: flw fa0, 120(sp) 752; RV64-NEXT: mv a0, s2 753; RV64-NEXT: call __powisf2 754; RV64-NEXT: fsw fa0, 184(sp) 755; RV64-NEXT: flw fa0, 116(sp) 756; RV64-NEXT: mv a0, s2 757; RV64-NEXT: call __powisf2 758; RV64-NEXT: fsw fa0, 180(sp) 759; RV64-NEXT: flw fa0, 112(sp) 760; RV64-NEXT: mv a0, s2 761; RV64-NEXT: call __powisf2 762; RV64-NEXT: fsw fa0, 176(sp) 763; RV64-NEXT: flw fa0, 108(sp) 764; RV64-NEXT: mv a0, s2 765; RV64-NEXT: call __powisf2 766; RV64-NEXT: fsw fa0, 172(sp) 767; RV64-NEXT: flw fa0, 104(sp) 768; RV64-NEXT: mv a0, s2 769; RV64-NEXT: call __powisf2 770; RV64-NEXT: fsw fa0, 168(sp) 771; RV64-NEXT: flw fa0, 100(sp) 772; RV64-NEXT: mv a0, s2 773; RV64-NEXT: call __powisf2 774; RV64-NEXT: fsw fa0, 164(sp) 775; RV64-NEXT: flw fa0, 96(sp) 776; RV64-NEXT: mv a0, s2 777; RV64-NEXT: call __powisf2 778; RV64-NEXT: fsw fa0, 160(sp) 779; RV64-NEXT: addi a0, sp, 240 780; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 781; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 782; RV64-NEXT: vfmv.f.s fa0, v8 783; RV64-NEXT: mv a0, s2 784; RV64-NEXT: call __powisf2 785; RV64-NEXT: fsw fa0, 128(sp) 786; RV64-NEXT: addi a0, sp, 240 787; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 788; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 789; RV64-NEXT: vslidedown.vi v8, v8, 3 790; RV64-NEXT: vfmv.f.s fa0, v8 791; RV64-NEXT: mv a0, s2 792; RV64-NEXT: call __powisf2 793; RV64-NEXT: fsw fa0, 140(sp) 794; RV64-NEXT: addi a0, sp, 240 795; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 796; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 797; RV64-NEXT: vslidedown.vi v8, v8, 2 798; RV64-NEXT: vfmv.f.s fa0, v8 799; RV64-NEXT: mv a0, s2 800; RV64-NEXT: call __powisf2 801; RV64-NEXT: fsw fa0, 136(sp) 802; RV64-NEXT: addi a0, sp, 240 803; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 804; RV64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 805; RV64-NEXT: vslidedown.vi v8, v8, 1 806; RV64-NEXT: vfmv.f.s fa0, v8 807; RV64-NEXT: mv a0, s2 808; RV64-NEXT: call __powisf2 809; RV64-NEXT: fsw fa0, 132(sp) 810; RV64-NEXT: addi a0, sp, 240 811; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 812; RV64-NEXT: vsetivli zero, 1, e32, m2, ta, ma 813; RV64-NEXT: vslidedown.vi v8, v8, 7 814; RV64-NEXT: vfmv.f.s fa0, v8 815; RV64-NEXT: mv a0, s2 816; RV64-NEXT: call __powisf2 817; RV64-NEXT: fsw fa0, 156(sp) 818; RV64-NEXT: addi a0, sp, 240 819; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 820; RV64-NEXT: vsetivli zero, 1, e32, m2, ta, ma 821; RV64-NEXT: vslidedown.vi v8, v8, 6 822; RV64-NEXT: vfmv.f.s fa0, v8 823; RV64-NEXT: mv a0, s2 824; RV64-NEXT: call __powisf2 825; RV64-NEXT: fsw fa0, 152(sp) 826; RV64-NEXT: addi a0, sp, 240 827; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 828; RV64-NEXT: vsetivli zero, 1, e32, m2, ta, ma 829; RV64-NEXT: vslidedown.vi v8, v8, 5 830; RV64-NEXT: vfmv.f.s fa0, v8 831; RV64-NEXT: mv a0, s2 832; RV64-NEXT: call __powisf2 833; RV64-NEXT: fsw fa0, 148(sp) 834; RV64-NEXT: addi a0, sp, 240 835; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 836; RV64-NEXT: vsetivli zero, 1, e32, m2, ta, ma 837; RV64-NEXT: vslidedown.vi v8, v8, 4 838; RV64-NEXT: vfmv.f.s fa0, v8 839; RV64-NEXT: mv a0, s2 840; RV64-NEXT: call __powisf2 841; RV64-NEXT: fsw fa0, 144(sp) 842; RV64-NEXT: addi a0, sp, 128 843; RV64-NEXT: vsetivli zero, 16, e32, m4, ta, ma 844; RV64-NEXT: vle32.v v8, (a0) 845; RV64-NEXT: addi sp, s0, -272 846; RV64-NEXT: ld ra, 264(sp) # 8-byte Folded Reload 847; RV64-NEXT: ld s0, 256(sp) # 8-byte Folded Reload 848; RV64-NEXT: ld s2, 248(sp) # 8-byte Folded Reload 849; RV64-NEXT: addi sp, sp, 272 850; RV64-NEXT: ret 851 %a = call <16 x float> @llvm.powi.v16f32.i32(<16 x float> %x, i32 %y) 852 ret <16 x float> %a 853} 854declare <16 x float> @llvm.powi.v16f32.i32(<16 x float>, i32) 855 856define <1 x double> @powi_v1f64(<1 x double> %x, i32 %y) nounwind { 857; RV32-LABEL: powi_v1f64: 858; RV32: # %bb.0: 859; RV32-NEXT: addi sp, sp, -16 860; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 861; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 862; RV32-NEXT: vfmv.f.s fa0, v8 863; RV32-NEXT: call __powidf2 864; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 865; RV32-NEXT: vfmv.s.f v8, fa0 866; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload 867; RV32-NEXT: addi sp, sp, 16 868; RV32-NEXT: ret 869; 870; RV64-LABEL: powi_v1f64: 871; RV64: # %bb.0: 872; RV64-NEXT: addi sp, sp, -16 873; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 874; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 875; RV64-NEXT: vfmv.f.s fa0, v8 876; RV64-NEXT: sext.w a0, a0 877; RV64-NEXT: call __powidf2 878; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 879; RV64-NEXT: vfmv.s.f v8, fa0 880; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload 881; RV64-NEXT: addi sp, sp, 16 882; RV64-NEXT: ret 883 %a = call <1 x double> @llvm.powi.v1f64.i32(<1 x double> %x, i32 %y) 884 ret <1 x double> %a 885} 886declare <1 x double> @llvm.powi.v1f64.i32(<1 x double>, i32) 887 888define <2 x double> @powi_v2f64(<2 x double> %x, i32 %y) nounwind { 889; RV32-LABEL: powi_v2f64: 890; RV32: # %bb.0: 891; RV32-NEXT: addi sp, sp, -32 892; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 893; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 894; RV32-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 895; RV32-NEXT: csrr a1, vlenb 896; RV32-NEXT: sub sp, sp, a1 897; RV32-NEXT: mv s0, a0 898; RV32-NEXT: addi a1, sp, 16 899; RV32-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 900; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 901; RV32-NEXT: vslidedown.vi v9, v8, 1 902; RV32-NEXT: vfmv.f.s fa0, v9 903; RV32-NEXT: call __powidf2 904; RV32-NEXT: fmv.d fs0, fa0 905; RV32-NEXT: fld fa0, 16(sp) # 8-byte Folded Reload 906; RV32-NEXT: mv a0, s0 907; RV32-NEXT: call __powidf2 908; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma 909; RV32-NEXT: vfmv.v.f v8, fa0 910; RV32-NEXT: vfslide1down.vf v8, v8, fs0 911; RV32-NEXT: csrr a0, vlenb 912; RV32-NEXT: add sp, sp, a0 913; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 914; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 915; RV32-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 916; RV32-NEXT: addi sp, sp, 32 917; RV32-NEXT: ret 918; 919; RV64-LABEL: powi_v2f64: 920; RV64: # %bb.0: 921; RV64-NEXT: addi sp, sp, -64 922; RV64-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 923; RV64-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 924; RV64-NEXT: fsd fs0, 40(sp) # 8-byte Folded Spill 925; RV64-NEXT: csrr a1, vlenb 926; RV64-NEXT: sub sp, sp, a1 927; RV64-NEXT: addi a1, sp, 32 928; RV64-NEXT: vs1r.v v8, (a1) # Unknown-size Folded Spill 929; RV64-NEXT: sext.w s0, a0 930; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 931; RV64-NEXT: vslidedown.vi v9, v8, 1 932; RV64-NEXT: vfmv.f.s fa0, v9 933; RV64-NEXT: mv a0, s0 934; RV64-NEXT: call __powidf2 935; RV64-NEXT: fmv.d fs0, fa0 936; RV64-NEXT: fld fa0, 32(sp) # 8-byte Folded Reload 937; RV64-NEXT: mv a0, s0 938; RV64-NEXT: call __powidf2 939; RV64-NEXT: vsetivli zero, 2, e64, m1, ta, ma 940; RV64-NEXT: vfmv.v.f v8, fa0 941; RV64-NEXT: vfslide1down.vf v8, v8, fs0 942; RV64-NEXT: csrr a0, vlenb 943; RV64-NEXT: add sp, sp, a0 944; RV64-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 945; RV64-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 946; RV64-NEXT: fld fs0, 40(sp) # 8-byte Folded Reload 947; RV64-NEXT: addi sp, sp, 64 948; RV64-NEXT: ret 949 %a = call <2 x double> @llvm.powi.v2f64.i32(<2 x double> %x, i32 %y) 950 ret <2 x double> %a 951} 952declare <2 x double> @llvm.powi.v2f64.i32(<2 x double>, i32) 953 954define <4 x double> @powi_v4f64(<4 x double> %x, i32 %y) nounwind { 955; RV32-LABEL: powi_v4f64: 956; RV32: # %bb.0: 957; RV32-NEXT: addi sp, sp, -32 958; RV32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill 959; RV32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill 960; RV32-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill 961; RV32-NEXT: csrr a1, vlenb 962; RV32-NEXT: slli a1, a1, 2 963; RV32-NEXT: sub sp, sp, a1 964; RV32-NEXT: mv s0, a0 965; RV32-NEXT: csrr a1, vlenb 966; RV32-NEXT: slli a1, a1, 1 967; RV32-NEXT: add a1, sp, a1 968; RV32-NEXT: addi a1, a1, 16 969; RV32-NEXT: vs2r.v v8, (a1) # Unknown-size Folded Spill 970; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 971; RV32-NEXT: vslidedown.vi v10, v8, 1 972; RV32-NEXT: vfmv.f.s fa0, v10 973; RV32-NEXT: call __powidf2 974; RV32-NEXT: fmv.d fs0, fa0 975; RV32-NEXT: csrr a0, vlenb 976; RV32-NEXT: slli a0, a0, 1 977; RV32-NEXT: add a0, sp, a0 978; RV32-NEXT: addi a0, a0, 16 979; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 980; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 981; RV32-NEXT: vfmv.f.s fa0, v8 982; RV32-NEXT: mv a0, s0 983; RV32-NEXT: call __powidf2 984; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 985; RV32-NEXT: vfmv.v.f v8, fa0 986; RV32-NEXT: vfslide1down.vf v8, v8, fs0 987; RV32-NEXT: addi a0, sp, 16 988; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 989; RV32-NEXT: csrr a0, vlenb 990; RV32-NEXT: slli a0, a0, 1 991; RV32-NEXT: add a0, sp, a0 992; RV32-NEXT: addi a0, a0, 16 993; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 994; RV32-NEXT: vslidedown.vi v8, v8, 2 995; RV32-NEXT: vfmv.f.s fa0, v8 996; RV32-NEXT: mv a0, s0 997; RV32-NEXT: call __powidf2 998; RV32-NEXT: addi a0, sp, 16 999; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1000; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1001; RV32-NEXT: vfslide1down.vf v8, v8, fa0 1002; RV32-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 1003; RV32-NEXT: csrr a0, vlenb 1004; RV32-NEXT: slli a0, a0, 1 1005; RV32-NEXT: add a0, sp, a0 1006; RV32-NEXT: addi a0, a0, 16 1007; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1008; RV32-NEXT: vslidedown.vi v8, v8, 3 1009; RV32-NEXT: vfmv.f.s fa0, v8 1010; RV32-NEXT: mv a0, s0 1011; RV32-NEXT: call __powidf2 1012; RV32-NEXT: addi a0, sp, 16 1013; RV32-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1014; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1015; RV32-NEXT: vfslide1down.vf v8, v8, fa0 1016; RV32-NEXT: csrr a0, vlenb 1017; RV32-NEXT: slli a0, a0, 2 1018; RV32-NEXT: add sp, sp, a0 1019; RV32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload 1020; RV32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload 1021; RV32-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload 1022; RV32-NEXT: addi sp, sp, 32 1023; RV32-NEXT: ret 1024; 1025; RV64-LABEL: powi_v4f64: 1026; RV64: # %bb.0: 1027; RV64-NEXT: addi sp, sp, -64 1028; RV64-NEXT: sd ra, 56(sp) # 8-byte Folded Spill 1029; RV64-NEXT: sd s0, 48(sp) # 8-byte Folded Spill 1030; RV64-NEXT: fsd fs0, 40(sp) # 8-byte Folded Spill 1031; RV64-NEXT: csrr a1, vlenb 1032; RV64-NEXT: slli a1, a1, 2 1033; RV64-NEXT: sub sp, sp, a1 1034; RV64-NEXT: csrr a1, vlenb 1035; RV64-NEXT: slli a1, a1, 1 1036; RV64-NEXT: add a1, sp, a1 1037; RV64-NEXT: addi a1, a1, 32 1038; RV64-NEXT: vs2r.v v8, (a1) # Unknown-size Folded Spill 1039; RV64-NEXT: sext.w s0, a0 1040; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1041; RV64-NEXT: vslidedown.vi v10, v8, 1 1042; RV64-NEXT: vfmv.f.s fa0, v10 1043; RV64-NEXT: mv a0, s0 1044; RV64-NEXT: call __powidf2 1045; RV64-NEXT: fmv.d fs0, fa0 1046; RV64-NEXT: csrr a0, vlenb 1047; RV64-NEXT: slli a0, a0, 1 1048; RV64-NEXT: add a0, sp, a0 1049; RV64-NEXT: addi a0, a0, 32 1050; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1051; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1052; RV64-NEXT: vfmv.f.s fa0, v8 1053; RV64-NEXT: mv a0, s0 1054; RV64-NEXT: call __powidf2 1055; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1056; RV64-NEXT: vfmv.v.f v8, fa0 1057; RV64-NEXT: vfslide1down.vf v8, v8, fs0 1058; RV64-NEXT: addi a0, sp, 32 1059; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 1060; RV64-NEXT: csrr a0, vlenb 1061; RV64-NEXT: slli a0, a0, 1 1062; RV64-NEXT: add a0, sp, a0 1063; RV64-NEXT: addi a0, a0, 32 1064; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1065; RV64-NEXT: vslidedown.vi v8, v8, 2 1066; RV64-NEXT: vfmv.f.s fa0, v8 1067; RV64-NEXT: mv a0, s0 1068; RV64-NEXT: call __powidf2 1069; RV64-NEXT: addi a0, sp, 32 1070; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1071; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1072; RV64-NEXT: vfslide1down.vf v8, v8, fa0 1073; RV64-NEXT: vs2r.v v8, (a0) # Unknown-size Folded Spill 1074; RV64-NEXT: csrr a0, vlenb 1075; RV64-NEXT: slli a0, a0, 1 1076; RV64-NEXT: add a0, sp, a0 1077; RV64-NEXT: addi a0, a0, 32 1078; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1079; RV64-NEXT: vslidedown.vi v8, v8, 3 1080; RV64-NEXT: vfmv.f.s fa0, v8 1081; RV64-NEXT: mv a0, s0 1082; RV64-NEXT: call __powidf2 1083; RV64-NEXT: addi a0, sp, 32 1084; RV64-NEXT: vl2r.v v8, (a0) # Unknown-size Folded Reload 1085; RV64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1086; RV64-NEXT: vfslide1down.vf v8, v8, fa0 1087; RV64-NEXT: csrr a0, vlenb 1088; RV64-NEXT: slli a0, a0, 2 1089; RV64-NEXT: add sp, sp, a0 1090; RV64-NEXT: ld ra, 56(sp) # 8-byte Folded Reload 1091; RV64-NEXT: ld s0, 48(sp) # 8-byte Folded Reload 1092; RV64-NEXT: fld fs0, 40(sp) # 8-byte Folded Reload 1093; RV64-NEXT: addi sp, sp, 64 1094; RV64-NEXT: ret 1095 %a = call <4 x double> @llvm.powi.v4f64.i32(<4 x double> %x, i32 %y) 1096 ret <4 x double> %a 1097} 1098declare <4 x double> @llvm.powi.v4f64.i32(<4 x double>, i32) 1099 1100define <8 x double> @powi_v8f64(<8 x double> %x, i32 %y) nounwind { 1101; RV32-LABEL: powi_v8f64: 1102; RV32: # %bb.0: 1103; RV32-NEXT: addi sp, sp, -272 1104; RV32-NEXT: sw ra, 268(sp) # 4-byte Folded Spill 1105; RV32-NEXT: sw s0, 264(sp) # 4-byte Folded Spill 1106; RV32-NEXT: sw s2, 260(sp) # 4-byte Folded Spill 1107; RV32-NEXT: addi s0, sp, 272 1108; RV32-NEXT: csrr a1, vlenb 1109; RV32-NEXT: slli a1, a1, 2 1110; RV32-NEXT: sub sp, sp, a1 1111; RV32-NEXT: andi sp, sp, -64 1112; RV32-NEXT: mv s2, a0 1113; RV32-NEXT: addi a0, sp, 256 1114; RV32-NEXT: vs4r.v v8, (a0) # Unknown-size Folded Spill 1115; RV32-NEXT: addi a0, sp, 64 1116; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1117; RV32-NEXT: vse64.v v8, (a0) 1118; RV32-NEXT: fld fa0, 120(sp) 1119; RV32-NEXT: mv a0, s2 1120; RV32-NEXT: call __powidf2 1121; RV32-NEXT: fsd fa0, 184(sp) 1122; RV32-NEXT: fld fa0, 112(sp) 1123; RV32-NEXT: mv a0, s2 1124; RV32-NEXT: call __powidf2 1125; RV32-NEXT: fsd fa0, 176(sp) 1126; RV32-NEXT: fld fa0, 104(sp) 1127; RV32-NEXT: mv a0, s2 1128; RV32-NEXT: call __powidf2 1129; RV32-NEXT: fsd fa0, 168(sp) 1130; RV32-NEXT: fld fa0, 96(sp) 1131; RV32-NEXT: mv a0, s2 1132; RV32-NEXT: call __powidf2 1133; RV32-NEXT: fsd fa0, 160(sp) 1134; RV32-NEXT: addi a0, sp, 256 1135; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1136; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1137; RV32-NEXT: vfmv.f.s fa0, v8 1138; RV32-NEXT: mv a0, s2 1139; RV32-NEXT: call __powidf2 1140; RV32-NEXT: fsd fa0, 128(sp) 1141; RV32-NEXT: addi a0, sp, 256 1142; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1143; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1144; RV32-NEXT: vslidedown.vi v8, v8, 1 1145; RV32-NEXT: vfmv.f.s fa0, v8 1146; RV32-NEXT: mv a0, s2 1147; RV32-NEXT: call __powidf2 1148; RV32-NEXT: fsd fa0, 136(sp) 1149; RV32-NEXT: addi a0, sp, 256 1150; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1151; RV32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 1152; RV32-NEXT: vslidedown.vi v8, v8, 3 1153; RV32-NEXT: vfmv.f.s fa0, v8 1154; RV32-NEXT: mv a0, s2 1155; RV32-NEXT: call __powidf2 1156; RV32-NEXT: fsd fa0, 152(sp) 1157; RV32-NEXT: addi a0, sp, 256 1158; RV32-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1159; RV32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 1160; RV32-NEXT: vslidedown.vi v8, v8, 2 1161; RV32-NEXT: vfmv.f.s fa0, v8 1162; RV32-NEXT: mv a0, s2 1163; RV32-NEXT: call __powidf2 1164; RV32-NEXT: fsd fa0, 144(sp) 1165; RV32-NEXT: addi a0, sp, 128 1166; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1167; RV32-NEXT: vle64.v v8, (a0) 1168; RV32-NEXT: addi sp, s0, -272 1169; RV32-NEXT: lw ra, 268(sp) # 4-byte Folded Reload 1170; RV32-NEXT: lw s0, 264(sp) # 4-byte Folded Reload 1171; RV32-NEXT: lw s2, 260(sp) # 4-byte Folded Reload 1172; RV32-NEXT: addi sp, sp, 272 1173; RV32-NEXT: ret 1174; 1175; RV64-LABEL: powi_v8f64: 1176; RV64: # %bb.0: 1177; RV64-NEXT: addi sp, sp, -272 1178; RV64-NEXT: sd ra, 264(sp) # 8-byte Folded Spill 1179; RV64-NEXT: sd s0, 256(sp) # 8-byte Folded Spill 1180; RV64-NEXT: sd s2, 248(sp) # 8-byte Folded Spill 1181; RV64-NEXT: addi s0, sp, 272 1182; RV64-NEXT: csrr a1, vlenb 1183; RV64-NEXT: slli a1, a1, 2 1184; RV64-NEXT: sub sp, sp, a1 1185; RV64-NEXT: andi sp, sp, -64 1186; RV64-NEXT: addi a1, sp, 240 1187; RV64-NEXT: vs4r.v v8, (a1) # Unknown-size Folded Spill 1188; RV64-NEXT: addi a1, sp, 64 1189; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1190; RV64-NEXT: vse64.v v8, (a1) 1191; RV64-NEXT: fld fa0, 120(sp) 1192; RV64-NEXT: sext.w s2, a0 1193; RV64-NEXT: mv a0, s2 1194; RV64-NEXT: call __powidf2 1195; RV64-NEXT: fsd fa0, 184(sp) 1196; RV64-NEXT: fld fa0, 112(sp) 1197; RV64-NEXT: mv a0, s2 1198; RV64-NEXT: call __powidf2 1199; RV64-NEXT: fsd fa0, 176(sp) 1200; RV64-NEXT: fld fa0, 104(sp) 1201; RV64-NEXT: mv a0, s2 1202; RV64-NEXT: call __powidf2 1203; RV64-NEXT: fsd fa0, 168(sp) 1204; RV64-NEXT: fld fa0, 96(sp) 1205; RV64-NEXT: mv a0, s2 1206; RV64-NEXT: call __powidf2 1207; RV64-NEXT: fsd fa0, 160(sp) 1208; RV64-NEXT: addi a0, sp, 240 1209; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1210; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1211; RV64-NEXT: vfmv.f.s fa0, v8 1212; RV64-NEXT: mv a0, s2 1213; RV64-NEXT: call __powidf2 1214; RV64-NEXT: fsd fa0, 128(sp) 1215; RV64-NEXT: addi a0, sp, 240 1216; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1217; RV64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1218; RV64-NEXT: vslidedown.vi v8, v8, 1 1219; RV64-NEXT: vfmv.f.s fa0, v8 1220; RV64-NEXT: mv a0, s2 1221; RV64-NEXT: call __powidf2 1222; RV64-NEXT: fsd fa0, 136(sp) 1223; RV64-NEXT: addi a0, sp, 240 1224; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1225; RV64-NEXT: vsetivli zero, 1, e64, m2, ta, ma 1226; RV64-NEXT: vslidedown.vi v8, v8, 3 1227; RV64-NEXT: vfmv.f.s fa0, v8 1228; RV64-NEXT: mv a0, s2 1229; RV64-NEXT: call __powidf2 1230; RV64-NEXT: fsd fa0, 152(sp) 1231; RV64-NEXT: addi a0, sp, 240 1232; RV64-NEXT: vl4r.v v8, (a0) # Unknown-size Folded Reload 1233; RV64-NEXT: vsetivli zero, 1, e64, m2, ta, ma 1234; RV64-NEXT: vslidedown.vi v8, v8, 2 1235; RV64-NEXT: vfmv.f.s fa0, v8 1236; RV64-NEXT: mv a0, s2 1237; RV64-NEXT: call __powidf2 1238; RV64-NEXT: fsd fa0, 144(sp) 1239; RV64-NEXT: addi a0, sp, 128 1240; RV64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1241; RV64-NEXT: vle64.v v8, (a0) 1242; RV64-NEXT: addi sp, s0, -272 1243; RV64-NEXT: ld ra, 264(sp) # 8-byte Folded Reload 1244; RV64-NEXT: ld s0, 256(sp) # 8-byte Folded Reload 1245; RV64-NEXT: ld s2, 248(sp) # 8-byte Folded Reload 1246; RV64-NEXT: addi sp, sp, 272 1247; RV64-NEXT: ret 1248 %a = call <8 x double> @llvm.powi.v8f64.i32(<8 x double> %x, i32 %y) 1249 ret <8 x double> %a 1250} 1251declare <8 x double> @llvm.powi.v8f64.i32(<8 x double>, i32) 1252