1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+f,+d \ 3; RUN: -target-abi=ilp32d -verify-machineinstrs | FileCheck %s --check-prefix=RV32 4; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv64 -mattr=+v,+f,+d \ 5; RUN: -target-abi=lp64d -verify-machineinstrs | FileCheck %s --check-prefix=RV64-i32 6; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+f,+d \ 7; RUN: -target-abi=lp64d -verify-machineinstrs | FileCheck %s --check-prefix=RV64-i64 8 9define <1 x iXLen> @lrint_v1f32(<1 x float> %x) { 10; RV32-LABEL: lrint_v1f32: 11; RV32: # %bb.0: 12; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 13; RV32-NEXT: vfmv.f.s fa5, v8 14; RV32-NEXT: fcvt.w.s a0, fa5 15; RV32-NEXT: vmv.s.x v8, a0 16; RV32-NEXT: ret 17; 18; RV64-i32-LABEL: lrint_v1f32: 19; RV64-i32: # %bb.0: 20; RV64-i32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 21; RV64-i32-NEXT: vfmv.f.s fa5, v8 22; RV64-i32-NEXT: fcvt.l.s a0, fa5 23; RV64-i32-NEXT: vmv.s.x v8, a0 24; RV64-i32-NEXT: ret 25; 26; RV64-i64-LABEL: lrint_v1f32: 27; RV64-i64: # %bb.0: 28; RV64-i64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 29; RV64-i64-NEXT: vfmv.f.s fa5, v8 30; RV64-i64-NEXT: fcvt.l.s a0, fa5 31; RV64-i64-NEXT: vsetvli zero, zero, e64, m2, ta, ma 32; RV64-i64-NEXT: vmv.s.x v8, a0 33; RV64-i64-NEXT: ret 34 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float> %x) 35 ret <1 x iXLen> %a 36} 37declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float>) 38 39define <2 x iXLen> @lrint_v2f32(<2 x float> %x) { 40; RV32-LABEL: lrint_v2f32: 41; RV32: # %bb.0: 42; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 43; RV32-NEXT: vslidedown.vi v9, v8, 1 44; RV32-NEXT: vfmv.f.s fa5, v8 45; RV32-NEXT: fcvt.w.s a0, fa5 46; RV32-NEXT: vfmv.f.s fa5, v9 47; RV32-NEXT: fcvt.w.s a1, fa5 48; RV32-NEXT: vmv.v.x v8, a0 49; RV32-NEXT: vslide1down.vx v8, v8, a1 50; RV32-NEXT: ret 51; 52; RV64-i32-LABEL: lrint_v2f32: 53; RV64-i32: # %bb.0: 54; RV64-i32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 55; RV64-i32-NEXT: vslidedown.vi v9, v8, 1 56; RV64-i32-NEXT: vfmv.f.s fa5, v8 57; RV64-i32-NEXT: fcvt.l.s a0, fa5 58; RV64-i32-NEXT: vfmv.f.s fa5, v9 59; RV64-i32-NEXT: fcvt.l.s a1, fa5 60; RV64-i32-NEXT: vmv.v.x v8, a0 61; RV64-i32-NEXT: vslide1down.vx v8, v8, a1 62; RV64-i32-NEXT: ret 63; 64; RV64-i64-LABEL: lrint_v2f32: 65; RV64-i64: # %bb.0: 66; RV64-i64-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 67; RV64-i64-NEXT: vslidedown.vi v9, v8, 1 68; RV64-i64-NEXT: vfmv.f.s fa5, v8 69; RV64-i64-NEXT: fcvt.l.s a0, fa5 70; RV64-i64-NEXT: vfmv.f.s fa5, v9 71; RV64-i64-NEXT: fcvt.l.s a1, fa5 72; RV64-i64-NEXT: vsetivli zero, 2, e64, m1, ta, ma 73; RV64-i64-NEXT: vmv.v.x v8, a0 74; RV64-i64-NEXT: vslide1down.vx v8, v8, a1 75; RV64-i64-NEXT: ret 76 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float> %x) 77 ret <2 x iXLen> %a 78} 79declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float>) 80 81define <3 x iXLen> @lrint_v3f32(<3 x float> %x) { 82; RV32-LABEL: lrint_v3f32: 83; RV32: # %bb.0: 84; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 85; RV32-NEXT: vslidedown.vi v9, v8, 1 86; RV32-NEXT: vfmv.f.s fa5, v8 87; RV32-NEXT: vslidedown.vi v10, v8, 2 88; RV32-NEXT: vslidedown.vi v8, v8, 3 89; RV32-NEXT: fcvt.w.s a0, fa5 90; RV32-NEXT: vfmv.f.s fa5, v9 91; RV32-NEXT: fcvt.w.s a1, fa5 92; RV32-NEXT: vfmv.f.s fa5, v10 93; RV32-NEXT: vmv.v.x v9, a0 94; RV32-NEXT: fcvt.w.s a0, fa5 95; RV32-NEXT: vfmv.f.s fa5, v8 96; RV32-NEXT: vslide1down.vx v8, v9, a1 97; RV32-NEXT: vslide1down.vx v8, v8, a0 98; RV32-NEXT: fcvt.w.s a0, fa5 99; RV32-NEXT: vslide1down.vx v8, v8, a0 100; RV32-NEXT: ret 101; 102; RV64-i32-LABEL: lrint_v3f32: 103; RV64-i32: # %bb.0: 104; RV64-i32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 105; RV64-i32-NEXT: vslidedown.vi v9, v8, 1 106; RV64-i32-NEXT: vfmv.f.s fa5, v8 107; RV64-i32-NEXT: vslidedown.vi v10, v8, 2 108; RV64-i32-NEXT: vslidedown.vi v8, v8, 3 109; RV64-i32-NEXT: fcvt.l.s a0, fa5 110; RV64-i32-NEXT: vfmv.f.s fa5, v9 111; RV64-i32-NEXT: fcvt.l.s a1, fa5 112; RV64-i32-NEXT: vfmv.f.s fa5, v10 113; RV64-i32-NEXT: vmv.v.x v9, a0 114; RV64-i32-NEXT: fcvt.l.s a0, fa5 115; RV64-i32-NEXT: vfmv.f.s fa5, v8 116; RV64-i32-NEXT: vslide1down.vx v8, v9, a1 117; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 118; RV64-i32-NEXT: fcvt.l.s a0, fa5 119; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 120; RV64-i32-NEXT: ret 121; 122; RV64-i64-LABEL: lrint_v3f32: 123; RV64-i64: # %bb.0: 124; RV64-i64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 125; RV64-i64-NEXT: vslidedown.vi v9, v8, 1 126; RV64-i64-NEXT: vfmv.f.s fa5, v8 127; RV64-i64-NEXT: vslidedown.vi v10, v8, 2 128; RV64-i64-NEXT: vslidedown.vi v8, v8, 3 129; RV64-i64-NEXT: fcvt.l.s a0, fa5 130; RV64-i64-NEXT: vfmv.f.s fa5, v9 131; RV64-i64-NEXT: fcvt.l.s a1, fa5 132; RV64-i64-NEXT: vfmv.f.s fa5, v10 133; RV64-i64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 134; RV64-i64-NEXT: vmv.v.x v10, a0 135; RV64-i64-NEXT: fcvt.l.s a0, fa5 136; RV64-i64-NEXT: vsetvli zero, zero, e32, m1, ta, ma 137; RV64-i64-NEXT: vfmv.f.s fa5, v8 138; RV64-i64-NEXT: vsetvli zero, zero, e64, m2, ta, ma 139; RV64-i64-NEXT: vslide1down.vx v8, v10, a1 140; RV64-i64-NEXT: vslide1down.vx v8, v8, a0 141; RV64-i64-NEXT: fcvt.l.s a0, fa5 142; RV64-i64-NEXT: vslide1down.vx v8, v8, a0 143; RV64-i64-NEXT: ret 144 %a = call <3 x iXLen> @llvm.lrint.v3iXLen.v3f32(<3 x float> %x) 145 ret <3 x iXLen> %a 146} 147declare <3 x iXLen> @llvm.lrint.v3iXLen.v3f32(<3 x float>) 148 149define <4 x iXLen> @lrint_v4f32(<4 x float> %x) { 150; RV32-LABEL: lrint_v4f32: 151; RV32: # %bb.0: 152; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 153; RV32-NEXT: vslidedown.vi v9, v8, 1 154; RV32-NEXT: vfmv.f.s fa5, v8 155; RV32-NEXT: vslidedown.vi v10, v8, 2 156; RV32-NEXT: vslidedown.vi v8, v8, 3 157; RV32-NEXT: fcvt.w.s a0, fa5 158; RV32-NEXT: vfmv.f.s fa5, v9 159; RV32-NEXT: fcvt.w.s a1, fa5 160; RV32-NEXT: vfmv.f.s fa5, v10 161; RV32-NEXT: vmv.v.x v9, a0 162; RV32-NEXT: fcvt.w.s a0, fa5 163; RV32-NEXT: vfmv.f.s fa5, v8 164; RV32-NEXT: vslide1down.vx v8, v9, a1 165; RV32-NEXT: vslide1down.vx v8, v8, a0 166; RV32-NEXT: fcvt.w.s a0, fa5 167; RV32-NEXT: vslide1down.vx v8, v8, a0 168; RV32-NEXT: ret 169; 170; RV64-i32-LABEL: lrint_v4f32: 171; RV64-i32: # %bb.0: 172; RV64-i32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 173; RV64-i32-NEXT: vslidedown.vi v9, v8, 1 174; RV64-i32-NEXT: vfmv.f.s fa5, v8 175; RV64-i32-NEXT: vslidedown.vi v10, v8, 2 176; RV64-i32-NEXT: vslidedown.vi v8, v8, 3 177; RV64-i32-NEXT: fcvt.l.s a0, fa5 178; RV64-i32-NEXT: vfmv.f.s fa5, v9 179; RV64-i32-NEXT: fcvt.l.s a1, fa5 180; RV64-i32-NEXT: vfmv.f.s fa5, v10 181; RV64-i32-NEXT: vmv.v.x v9, a0 182; RV64-i32-NEXT: fcvt.l.s a0, fa5 183; RV64-i32-NEXT: vfmv.f.s fa5, v8 184; RV64-i32-NEXT: vslide1down.vx v8, v9, a1 185; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 186; RV64-i32-NEXT: fcvt.l.s a0, fa5 187; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 188; RV64-i32-NEXT: ret 189; 190; RV64-i64-LABEL: lrint_v4f32: 191; RV64-i64: # %bb.0: 192; RV64-i64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 193; RV64-i64-NEXT: vslidedown.vi v9, v8, 1 194; RV64-i64-NEXT: vfmv.f.s fa5, v8 195; RV64-i64-NEXT: vslidedown.vi v10, v8, 2 196; RV64-i64-NEXT: vslidedown.vi v8, v8, 3 197; RV64-i64-NEXT: fcvt.l.s a0, fa5 198; RV64-i64-NEXT: vfmv.f.s fa5, v9 199; RV64-i64-NEXT: fcvt.l.s a1, fa5 200; RV64-i64-NEXT: vfmv.f.s fa5, v10 201; RV64-i64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 202; RV64-i64-NEXT: vmv.v.x v10, a0 203; RV64-i64-NEXT: fcvt.l.s a0, fa5 204; RV64-i64-NEXT: vsetvli zero, zero, e32, m1, ta, ma 205; RV64-i64-NEXT: vfmv.f.s fa5, v8 206; RV64-i64-NEXT: vsetvli zero, zero, e64, m2, ta, ma 207; RV64-i64-NEXT: vslide1down.vx v8, v10, a1 208; RV64-i64-NEXT: vslide1down.vx v8, v8, a0 209; RV64-i64-NEXT: fcvt.l.s a0, fa5 210; RV64-i64-NEXT: vslide1down.vx v8, v8, a0 211; RV64-i64-NEXT: ret 212 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float> %x) 213 ret <4 x iXLen> %a 214} 215declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float>) 216 217define <8 x iXLen> @lrint_v8f32(<8 x float> %x) { 218; RV32-LABEL: lrint_v8f32: 219; RV32: # %bb.0: 220; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 221; RV32-NEXT: vslidedown.vi v10, v8, 1 222; RV32-NEXT: vfmv.f.s fa5, v8 223; RV32-NEXT: vslidedown.vi v11, v8, 2 224; RV32-NEXT: vslidedown.vi v12, v8, 3 225; RV32-NEXT: fcvt.w.s a0, fa5 226; RV32-NEXT: vfmv.f.s fa5, v10 227; RV32-NEXT: fcvt.w.s a1, fa5 228; RV32-NEXT: vfmv.f.s fa5, v11 229; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 230; RV32-NEXT: vmv.v.x v10, a0 231; RV32-NEXT: fcvt.w.s a0, fa5 232; RV32-NEXT: vfmv.f.s fa5, v12 233; RV32-NEXT: vslidedown.vi v12, v8, 4 234; RV32-NEXT: vslide1down.vx v10, v10, a1 235; RV32-NEXT: fcvt.w.s a1, fa5 236; RV32-NEXT: vfmv.f.s fa5, v12 237; RV32-NEXT: vslidedown.vi v12, v8, 5 238; RV32-NEXT: vslide1down.vx v10, v10, a0 239; RV32-NEXT: fcvt.w.s a0, fa5 240; RV32-NEXT: vfmv.f.s fa5, v12 241; RV32-NEXT: vslidedown.vi v12, v8, 6 242; RV32-NEXT: vslidedown.vi v8, v8, 7 243; RV32-NEXT: vslide1down.vx v10, v10, a1 244; RV32-NEXT: fcvt.w.s a1, fa5 245; RV32-NEXT: vfmv.f.s fa5, v12 246; RV32-NEXT: vslide1down.vx v10, v10, a0 247; RV32-NEXT: fcvt.w.s a0, fa5 248; RV32-NEXT: vfmv.f.s fa5, v8 249; RV32-NEXT: vslide1down.vx v8, v10, a1 250; RV32-NEXT: vslide1down.vx v8, v8, a0 251; RV32-NEXT: fcvt.w.s a0, fa5 252; RV32-NEXT: vslide1down.vx v8, v8, a0 253; RV32-NEXT: ret 254; 255; RV64-i32-LABEL: lrint_v8f32: 256; RV64-i32: # %bb.0: 257; RV64-i32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 258; RV64-i32-NEXT: vslidedown.vi v10, v8, 1 259; RV64-i32-NEXT: vfmv.f.s fa5, v8 260; RV64-i32-NEXT: vslidedown.vi v11, v8, 2 261; RV64-i32-NEXT: vslidedown.vi v12, v8, 3 262; RV64-i32-NEXT: fcvt.l.s a0, fa5 263; RV64-i32-NEXT: vfmv.f.s fa5, v10 264; RV64-i32-NEXT: fcvt.l.s a1, fa5 265; RV64-i32-NEXT: vfmv.f.s fa5, v11 266; RV64-i32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 267; RV64-i32-NEXT: vmv.v.x v10, a0 268; RV64-i32-NEXT: fcvt.l.s a0, fa5 269; RV64-i32-NEXT: vfmv.f.s fa5, v12 270; RV64-i32-NEXT: vslidedown.vi v12, v8, 4 271; RV64-i32-NEXT: vslide1down.vx v10, v10, a1 272; RV64-i32-NEXT: fcvt.l.s a1, fa5 273; RV64-i32-NEXT: vfmv.f.s fa5, v12 274; RV64-i32-NEXT: vslidedown.vi v12, v8, 5 275; RV64-i32-NEXT: vslide1down.vx v10, v10, a0 276; RV64-i32-NEXT: fcvt.l.s a0, fa5 277; RV64-i32-NEXT: vfmv.f.s fa5, v12 278; RV64-i32-NEXT: vslidedown.vi v12, v8, 6 279; RV64-i32-NEXT: vslidedown.vi v8, v8, 7 280; RV64-i32-NEXT: vslide1down.vx v10, v10, a1 281; RV64-i32-NEXT: fcvt.l.s a1, fa5 282; RV64-i32-NEXT: vfmv.f.s fa5, v12 283; RV64-i32-NEXT: vslide1down.vx v10, v10, a0 284; RV64-i32-NEXT: fcvt.l.s a0, fa5 285; RV64-i32-NEXT: vfmv.f.s fa5, v8 286; RV64-i32-NEXT: vslide1down.vx v8, v10, a1 287; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 288; RV64-i32-NEXT: fcvt.l.s a0, fa5 289; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 290; RV64-i32-NEXT: ret 291; 292; RV64-i64-LABEL: lrint_v8f32: 293; RV64-i64: # %bb.0: 294; RV64-i64-NEXT: addi sp, sp, -128 295; RV64-i64-NEXT: .cfi_def_cfa_offset 128 296; RV64-i64-NEXT: sd ra, 120(sp) # 8-byte Folded Spill 297; RV64-i64-NEXT: sd s0, 112(sp) # 8-byte Folded Spill 298; RV64-i64-NEXT: .cfi_offset ra, -8 299; RV64-i64-NEXT: .cfi_offset s0, -16 300; RV64-i64-NEXT: addi s0, sp, 128 301; RV64-i64-NEXT: .cfi_def_cfa s0, 0 302; RV64-i64-NEXT: andi sp, sp, -64 303; RV64-i64-NEXT: vsetivli zero, 1, e32, m2, ta, ma 304; RV64-i64-NEXT: vfmv.f.s fa5, v8 305; RV64-i64-NEXT: vslidedown.vi v10, v8, 7 306; RV64-i64-NEXT: fcvt.l.s a0, fa5 307; RV64-i64-NEXT: vfmv.f.s fa5, v10 308; RV64-i64-NEXT: vslidedown.vi v10, v8, 6 309; RV64-i64-NEXT: fcvt.l.s a1, fa5 310; RV64-i64-NEXT: vfmv.f.s fa5, v10 311; RV64-i64-NEXT: vslidedown.vi v10, v8, 5 312; RV64-i64-NEXT: fcvt.l.s a2, fa5 313; RV64-i64-NEXT: vfmv.f.s fa5, v10 314; RV64-i64-NEXT: vslidedown.vi v10, v8, 4 315; RV64-i64-NEXT: fcvt.l.s a3, fa5 316; RV64-i64-NEXT: vfmv.f.s fa5, v10 317; RV64-i64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 318; RV64-i64-NEXT: vslidedown.vi v9, v8, 3 319; RV64-i64-NEXT: vslidedown.vi v10, v8, 2 320; RV64-i64-NEXT: vslidedown.vi v8, v8, 1 321; RV64-i64-NEXT: fcvt.l.s a4, fa5 322; RV64-i64-NEXT: vfmv.f.s fa5, v9 323; RV64-i64-NEXT: fcvt.l.s a5, fa5 324; RV64-i64-NEXT: vfmv.f.s fa5, v10 325; RV64-i64-NEXT: fcvt.l.s a6, fa5 326; RV64-i64-NEXT: vfmv.f.s fa5, v8 327; RV64-i64-NEXT: sd a4, 32(sp) 328; RV64-i64-NEXT: sd a3, 40(sp) 329; RV64-i64-NEXT: sd a2, 48(sp) 330; RV64-i64-NEXT: sd a1, 56(sp) 331; RV64-i64-NEXT: fcvt.l.s a1, fa5 332; RV64-i64-NEXT: sd a0, 0(sp) 333; RV64-i64-NEXT: sd a1, 8(sp) 334; RV64-i64-NEXT: sd a6, 16(sp) 335; RV64-i64-NEXT: sd a5, 24(sp) 336; RV64-i64-NEXT: mv a0, sp 337; RV64-i64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 338; RV64-i64-NEXT: vle64.v v8, (a0) 339; RV64-i64-NEXT: addi sp, s0, -128 340; RV64-i64-NEXT: .cfi_def_cfa sp, 128 341; RV64-i64-NEXT: ld ra, 120(sp) # 8-byte Folded Reload 342; RV64-i64-NEXT: ld s0, 112(sp) # 8-byte Folded Reload 343; RV64-i64-NEXT: .cfi_restore ra 344; RV64-i64-NEXT: .cfi_restore s0 345; RV64-i64-NEXT: addi sp, sp, 128 346; RV64-i64-NEXT: .cfi_def_cfa_offset 0 347; RV64-i64-NEXT: ret 348 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float> %x) 349 ret <8 x iXLen> %a 350} 351declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float>) 352 353define <16 x iXLen> @lrint_v16f32(<16 x float> %x) { 354; RV32-LABEL: lrint_v16f32: 355; RV32: # %bb.0: 356; RV32-NEXT: addi sp, sp, -192 357; RV32-NEXT: .cfi_def_cfa_offset 192 358; RV32-NEXT: sw ra, 188(sp) # 4-byte Folded Spill 359; RV32-NEXT: sw s0, 184(sp) # 4-byte Folded Spill 360; RV32-NEXT: .cfi_offset ra, -4 361; RV32-NEXT: .cfi_offset s0, -8 362; RV32-NEXT: addi s0, sp, 192 363; RV32-NEXT: .cfi_def_cfa s0, 0 364; RV32-NEXT: andi sp, sp, -64 365; RV32-NEXT: mv a0, sp 366; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma 367; RV32-NEXT: vse32.v v8, (a0) 368; RV32-NEXT: flw fa5, 60(sp) 369; RV32-NEXT: vfmv.f.s fa4, v8 370; RV32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 371; RV32-NEXT: vslidedown.vi v10, v8, 3 372; RV32-NEXT: vslidedown.vi v11, v8, 2 373; RV32-NEXT: fcvt.w.s a0, fa5 374; RV32-NEXT: sw a0, 124(sp) 375; RV32-NEXT: flw fa5, 56(sp) 376; RV32-NEXT: fcvt.w.s a0, fa4 377; RV32-NEXT: vfmv.f.s fa4, v10 378; RV32-NEXT: vslidedown.vi v10, v8, 1 379; RV32-NEXT: fcvt.w.s a1, fa5 380; RV32-NEXT: sw a1, 120(sp) 381; RV32-NEXT: flw fa5, 52(sp) 382; RV32-NEXT: fcvt.w.s a1, fa4 383; RV32-NEXT: vfmv.f.s fa4, v11 384; RV32-NEXT: fcvt.w.s a2, fa4 385; RV32-NEXT: fcvt.w.s a3, fa5 386; RV32-NEXT: sw a3, 116(sp) 387; RV32-NEXT: flw fa5, 48(sp) 388; RV32-NEXT: vfmv.f.s fa4, v10 389; RV32-NEXT: vsetivli zero, 1, e32, m2, ta, ma 390; RV32-NEXT: vslidedown.vi v10, v8, 7 391; RV32-NEXT: fcvt.w.s a3, fa4 392; RV32-NEXT: fcvt.w.s a4, fa5 393; RV32-NEXT: sw a4, 112(sp) 394; RV32-NEXT: flw fa5, 44(sp) 395; RV32-NEXT: vfmv.f.s fa4, v10 396; RV32-NEXT: vslidedown.vi v10, v8, 6 397; RV32-NEXT: fcvt.w.s a4, fa4 398; RV32-NEXT: fcvt.w.s a5, fa5 399; RV32-NEXT: sw a5, 108(sp) 400; RV32-NEXT: flw fa5, 40(sp) 401; RV32-NEXT: vfmv.f.s fa4, v10 402; RV32-NEXT: vslidedown.vi v10, v8, 5 403; RV32-NEXT: fcvt.w.s a5, fa4 404; RV32-NEXT: fcvt.w.s a6, fa5 405; RV32-NEXT: sw a6, 104(sp) 406; RV32-NEXT: flw fa5, 36(sp) 407; RV32-NEXT: vfmv.f.s fa4, v10 408; RV32-NEXT: fcvt.w.s a6, fa4 409; RV32-NEXT: vslidedown.vi v8, v8, 4 410; RV32-NEXT: fcvt.w.s a7, fa5 411; RV32-NEXT: vfmv.f.s fa5, v8 412; RV32-NEXT: sw a7, 100(sp) 413; RV32-NEXT: fcvt.w.s a7, fa5 414; RV32-NEXT: flw fa5, 32(sp) 415; RV32-NEXT: sw a0, 64(sp) 416; RV32-NEXT: sw a3, 68(sp) 417; RV32-NEXT: sw a2, 72(sp) 418; RV32-NEXT: sw a1, 76(sp) 419; RV32-NEXT: sw a7, 80(sp) 420; RV32-NEXT: sw a6, 84(sp) 421; RV32-NEXT: sw a5, 88(sp) 422; RV32-NEXT: sw a4, 92(sp) 423; RV32-NEXT: fcvt.w.s a0, fa5 424; RV32-NEXT: sw a0, 96(sp) 425; RV32-NEXT: addi a0, sp, 64 426; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma 427; RV32-NEXT: vle32.v v8, (a0) 428; RV32-NEXT: addi sp, s0, -192 429; RV32-NEXT: .cfi_def_cfa sp, 192 430; RV32-NEXT: lw ra, 188(sp) # 4-byte Folded Reload 431; RV32-NEXT: lw s0, 184(sp) # 4-byte Folded Reload 432; RV32-NEXT: .cfi_restore ra 433; RV32-NEXT: .cfi_restore s0 434; RV32-NEXT: addi sp, sp, 192 435; RV32-NEXT: .cfi_def_cfa_offset 0 436; RV32-NEXT: ret 437; 438; RV64-i32-LABEL: lrint_v16f32: 439; RV64-i32: # %bb.0: 440; RV64-i32-NEXT: addi sp, sp, -192 441; RV64-i32-NEXT: .cfi_def_cfa_offset 192 442; RV64-i32-NEXT: sd ra, 184(sp) # 8-byte Folded Spill 443; RV64-i32-NEXT: sd s0, 176(sp) # 8-byte Folded Spill 444; RV64-i32-NEXT: .cfi_offset ra, -8 445; RV64-i32-NEXT: .cfi_offset s0, -16 446; RV64-i32-NEXT: addi s0, sp, 192 447; RV64-i32-NEXT: .cfi_def_cfa s0, 0 448; RV64-i32-NEXT: andi sp, sp, -64 449; RV64-i32-NEXT: mv a0, sp 450; RV64-i32-NEXT: vsetivli zero, 16, e32, m4, ta, ma 451; RV64-i32-NEXT: vse32.v v8, (a0) 452; RV64-i32-NEXT: flw fa5, 60(sp) 453; RV64-i32-NEXT: vfmv.f.s fa4, v8 454; RV64-i32-NEXT: vsetivli zero, 1, e32, m1, ta, ma 455; RV64-i32-NEXT: vslidedown.vi v10, v8, 3 456; RV64-i32-NEXT: vslidedown.vi v11, v8, 2 457; RV64-i32-NEXT: fcvt.l.s a0, fa5 458; RV64-i32-NEXT: sw a0, 124(sp) 459; RV64-i32-NEXT: flw fa5, 56(sp) 460; RV64-i32-NEXT: fcvt.l.s a0, fa4 461; RV64-i32-NEXT: vfmv.f.s fa4, v10 462; RV64-i32-NEXT: vslidedown.vi v10, v8, 1 463; RV64-i32-NEXT: fcvt.l.s a1, fa5 464; RV64-i32-NEXT: sw a1, 120(sp) 465; RV64-i32-NEXT: flw fa5, 52(sp) 466; RV64-i32-NEXT: fcvt.l.s a1, fa4 467; RV64-i32-NEXT: vfmv.f.s fa4, v11 468; RV64-i32-NEXT: fcvt.l.s a2, fa4 469; RV64-i32-NEXT: fcvt.l.s a3, fa5 470; RV64-i32-NEXT: sw a3, 116(sp) 471; RV64-i32-NEXT: flw fa5, 48(sp) 472; RV64-i32-NEXT: vfmv.f.s fa4, v10 473; RV64-i32-NEXT: vsetivli zero, 1, e32, m2, ta, ma 474; RV64-i32-NEXT: vslidedown.vi v10, v8, 7 475; RV64-i32-NEXT: fcvt.l.s a3, fa4 476; RV64-i32-NEXT: fcvt.l.s a4, fa5 477; RV64-i32-NEXT: sw a4, 112(sp) 478; RV64-i32-NEXT: flw fa5, 44(sp) 479; RV64-i32-NEXT: vfmv.f.s fa4, v10 480; RV64-i32-NEXT: vslidedown.vi v10, v8, 6 481; RV64-i32-NEXT: fcvt.l.s a4, fa4 482; RV64-i32-NEXT: fcvt.l.s a5, fa5 483; RV64-i32-NEXT: sw a5, 108(sp) 484; RV64-i32-NEXT: flw fa5, 40(sp) 485; RV64-i32-NEXT: vfmv.f.s fa4, v10 486; RV64-i32-NEXT: vslidedown.vi v10, v8, 5 487; RV64-i32-NEXT: fcvt.l.s a5, fa4 488; RV64-i32-NEXT: fcvt.l.s a6, fa5 489; RV64-i32-NEXT: sw a6, 104(sp) 490; RV64-i32-NEXT: flw fa5, 36(sp) 491; RV64-i32-NEXT: vfmv.f.s fa4, v10 492; RV64-i32-NEXT: fcvt.l.s a6, fa4 493; RV64-i32-NEXT: vslidedown.vi v8, v8, 4 494; RV64-i32-NEXT: fcvt.l.s a7, fa5 495; RV64-i32-NEXT: vfmv.f.s fa5, v8 496; RV64-i32-NEXT: sw a7, 100(sp) 497; RV64-i32-NEXT: fcvt.l.s a7, fa5 498; RV64-i32-NEXT: flw fa5, 32(sp) 499; RV64-i32-NEXT: sw a0, 64(sp) 500; RV64-i32-NEXT: sw a3, 68(sp) 501; RV64-i32-NEXT: sw a2, 72(sp) 502; RV64-i32-NEXT: sw a1, 76(sp) 503; RV64-i32-NEXT: sw a7, 80(sp) 504; RV64-i32-NEXT: sw a6, 84(sp) 505; RV64-i32-NEXT: sw a5, 88(sp) 506; RV64-i32-NEXT: sw a4, 92(sp) 507; RV64-i32-NEXT: fcvt.l.s a0, fa5 508; RV64-i32-NEXT: sw a0, 96(sp) 509; RV64-i32-NEXT: addi a0, sp, 64 510; RV64-i32-NEXT: vsetivli zero, 16, e32, m4, ta, ma 511; RV64-i32-NEXT: vle32.v v8, (a0) 512; RV64-i32-NEXT: addi sp, s0, -192 513; RV64-i32-NEXT: .cfi_def_cfa sp, 192 514; RV64-i32-NEXT: ld ra, 184(sp) # 8-byte Folded Reload 515; RV64-i32-NEXT: ld s0, 176(sp) # 8-byte Folded Reload 516; RV64-i32-NEXT: .cfi_restore ra 517; RV64-i32-NEXT: .cfi_restore s0 518; RV64-i32-NEXT: addi sp, sp, 192 519; RV64-i32-NEXT: .cfi_def_cfa_offset 0 520; RV64-i32-NEXT: ret 521; 522; RV64-i64-LABEL: lrint_v16f32: 523; RV64-i64: # %bb.0: 524; RV64-i64-NEXT: addi sp, sp, -384 525; RV64-i64-NEXT: .cfi_def_cfa_offset 384 526; RV64-i64-NEXT: sd ra, 376(sp) # 8-byte Folded Spill 527; RV64-i64-NEXT: sd s0, 368(sp) # 8-byte Folded Spill 528; RV64-i64-NEXT: .cfi_offset ra, -8 529; RV64-i64-NEXT: .cfi_offset s0, -16 530; RV64-i64-NEXT: addi s0, sp, 384 531; RV64-i64-NEXT: .cfi_def_cfa s0, 0 532; RV64-i64-NEXT: andi sp, sp, -128 533; RV64-i64-NEXT: addi a0, sp, 64 534; RV64-i64-NEXT: vsetivli zero, 16, e32, m4, ta, ma 535; RV64-i64-NEXT: vse32.v v8, (a0) 536; RV64-i64-NEXT: flw fa5, 124(sp) 537; RV64-i64-NEXT: vfmv.f.s fa4, v8 538; RV64-i64-NEXT: vsetivli zero, 1, e32, m1, ta, ma 539; RV64-i64-NEXT: vslidedown.vi v10, v8, 3 540; RV64-i64-NEXT: vslidedown.vi v11, v8, 2 541; RV64-i64-NEXT: fcvt.l.s a0, fa5 542; RV64-i64-NEXT: sd a0, 248(sp) 543; RV64-i64-NEXT: flw fa5, 120(sp) 544; RV64-i64-NEXT: vslidedown.vi v12, v8, 1 545; RV64-i64-NEXT: fcvt.l.s a0, fa4 546; RV64-i64-NEXT: vfmv.f.s fa4, v10 547; RV64-i64-NEXT: fcvt.l.s a1, fa5 548; RV64-i64-NEXT: sd a1, 240(sp) 549; RV64-i64-NEXT: flw fa5, 116(sp) 550; RV64-i64-NEXT: vsetivli zero, 1, e32, m2, ta, ma 551; RV64-i64-NEXT: vslidedown.vi v14, v8, 7 552; RV64-i64-NEXT: fcvt.l.s a1, fa4 553; RV64-i64-NEXT: vfmv.f.s fa4, v11 554; RV64-i64-NEXT: fcvt.l.s a2, fa5 555; RV64-i64-NEXT: sd a2, 232(sp) 556; RV64-i64-NEXT: flw fa5, 112(sp) 557; RV64-i64-NEXT: fcvt.l.s a2, fa4 558; RV64-i64-NEXT: vfmv.f.s fa4, v12 559; RV64-i64-NEXT: vslidedown.vi v10, v8, 6 560; RV64-i64-NEXT: fcvt.l.s a3, fa5 561; RV64-i64-NEXT: sd a3, 224(sp) 562; RV64-i64-NEXT: flw fa5, 108(sp) 563; RV64-i64-NEXT: fcvt.l.s a3, fa4 564; RV64-i64-NEXT: vfmv.f.s fa4, v14 565; RV64-i64-NEXT: vslidedown.vi v12, v8, 5 566; RV64-i64-NEXT: fcvt.l.s a4, fa5 567; RV64-i64-NEXT: sd a4, 216(sp) 568; RV64-i64-NEXT: flw fa5, 104(sp) 569; RV64-i64-NEXT: fcvt.l.s a4, fa4 570; RV64-i64-NEXT: vfmv.f.s fa4, v10 571; RV64-i64-NEXT: fcvt.l.s a5, fa4 572; RV64-i64-NEXT: fcvt.l.s a6, fa5 573; RV64-i64-NEXT: sd a6, 208(sp) 574; RV64-i64-NEXT: flw fa5, 100(sp) 575; RV64-i64-NEXT: vfmv.f.s fa4, v12 576; RV64-i64-NEXT: fcvt.l.s a6, fa4 577; RV64-i64-NEXT: vslidedown.vi v8, v8, 4 578; RV64-i64-NEXT: fcvt.l.s a7, fa5 579; RV64-i64-NEXT: vfmv.f.s fa5, v8 580; RV64-i64-NEXT: sd a7, 200(sp) 581; RV64-i64-NEXT: fcvt.l.s a7, fa5 582; RV64-i64-NEXT: flw fa5, 96(sp) 583; RV64-i64-NEXT: sd a0, 128(sp) 584; RV64-i64-NEXT: sd a3, 136(sp) 585; RV64-i64-NEXT: sd a2, 144(sp) 586; RV64-i64-NEXT: sd a1, 152(sp) 587; RV64-i64-NEXT: sd a7, 160(sp) 588; RV64-i64-NEXT: sd a6, 168(sp) 589; RV64-i64-NEXT: sd a5, 176(sp) 590; RV64-i64-NEXT: sd a4, 184(sp) 591; RV64-i64-NEXT: fcvt.l.s a0, fa5 592; RV64-i64-NEXT: sd a0, 192(sp) 593; RV64-i64-NEXT: addi a0, sp, 128 594; RV64-i64-NEXT: vsetivli zero, 16, e64, m8, ta, ma 595; RV64-i64-NEXT: vle64.v v8, (a0) 596; RV64-i64-NEXT: addi sp, s0, -384 597; RV64-i64-NEXT: .cfi_def_cfa sp, 384 598; RV64-i64-NEXT: ld ra, 376(sp) # 8-byte Folded Reload 599; RV64-i64-NEXT: ld s0, 368(sp) # 8-byte Folded Reload 600; RV64-i64-NEXT: .cfi_restore ra 601; RV64-i64-NEXT: .cfi_restore s0 602; RV64-i64-NEXT: addi sp, sp, 384 603; RV64-i64-NEXT: .cfi_def_cfa_offset 0 604; RV64-i64-NEXT: ret 605 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float> %x) 606 ret <16 x iXLen> %a 607} 608declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float>) 609 610define <1 x iXLen> @lrint_v1f64(<1 x double> %x) { 611; RV32-LABEL: lrint_v1f64: 612; RV32: # %bb.0: 613; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 614; RV32-NEXT: vfmv.f.s fa5, v8 615; RV32-NEXT: fcvt.w.d a0, fa5 616; RV32-NEXT: vmv.s.x v8, a0 617; RV32-NEXT: ret 618; 619; RV64-i32-LABEL: lrint_v1f64: 620; RV64-i32: # %bb.0: 621; RV64-i32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 622; RV64-i32-NEXT: vfmv.f.s fa5, v8 623; RV64-i32-NEXT: fcvt.l.d a0, fa5 624; RV64-i32-NEXT: vmv.s.x v8, a0 625; RV64-i32-NEXT: ret 626; 627; RV64-i64-LABEL: lrint_v1f64: 628; RV64-i64: # %bb.0: 629; RV64-i64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 630; RV64-i64-NEXT: vfmv.f.s fa5, v8 631; RV64-i64-NEXT: fcvt.l.d a0, fa5 632; RV64-i64-NEXT: vmv.s.x v8, a0 633; RV64-i64-NEXT: ret 634 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double> %x) 635 ret <1 x iXLen> %a 636} 637declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double>) 638 639define <2 x iXLen> @lrint_v2f64(<2 x double> %x) { 640; RV32-LABEL: lrint_v2f64: 641; RV32: # %bb.0: 642; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 643; RV32-NEXT: vslidedown.vi v9, v8, 1 644; RV32-NEXT: vfmv.f.s fa5, v8 645; RV32-NEXT: fcvt.w.d a0, fa5 646; RV32-NEXT: vfmv.f.s fa5, v9 647; RV32-NEXT: fcvt.w.d a1, fa5 648; RV32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 649; RV32-NEXT: vmv.v.x v8, a0 650; RV32-NEXT: vslide1down.vx v8, v8, a1 651; RV32-NEXT: ret 652; 653; RV64-i32-LABEL: lrint_v2f64: 654; RV64-i32: # %bb.0: 655; RV64-i32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 656; RV64-i32-NEXT: vslidedown.vi v9, v8, 1 657; RV64-i32-NEXT: vfmv.f.s fa5, v8 658; RV64-i32-NEXT: fcvt.l.d a0, fa5 659; RV64-i32-NEXT: vfmv.f.s fa5, v9 660; RV64-i32-NEXT: fcvt.l.d a1, fa5 661; RV64-i32-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 662; RV64-i32-NEXT: vmv.v.x v8, a0 663; RV64-i32-NEXT: vslide1down.vx v8, v8, a1 664; RV64-i32-NEXT: ret 665; 666; RV64-i64-LABEL: lrint_v2f64: 667; RV64-i64: # %bb.0: 668; RV64-i64-NEXT: vsetivli zero, 2, e64, m1, ta, ma 669; RV64-i64-NEXT: vslidedown.vi v9, v8, 1 670; RV64-i64-NEXT: vfmv.f.s fa5, v8 671; RV64-i64-NEXT: fcvt.l.d a0, fa5 672; RV64-i64-NEXT: vfmv.f.s fa5, v9 673; RV64-i64-NEXT: fcvt.l.d a1, fa5 674; RV64-i64-NEXT: vmv.v.x v8, a0 675; RV64-i64-NEXT: vslide1down.vx v8, v8, a1 676; RV64-i64-NEXT: ret 677 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double> %x) 678 ret <2 x iXLen> %a 679} 680declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double>) 681 682define <4 x iXLen> @lrint_v4f64(<4 x double> %x) { 683; RV32-LABEL: lrint_v4f64: 684; RV32: # %bb.0: 685; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 686; RV32-NEXT: vslidedown.vi v10, v8, 1 687; RV32-NEXT: vfmv.f.s fa5, v8 688; RV32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 689; RV32-NEXT: vslidedown.vi v12, v8, 2 690; RV32-NEXT: vslidedown.vi v8, v8, 3 691; RV32-NEXT: fcvt.w.d a0, fa5 692; RV32-NEXT: vfmv.f.s fa5, v10 693; RV32-NEXT: fcvt.w.d a1, fa5 694; RV32-NEXT: vfmv.f.s fa5, v12 695; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 696; RV32-NEXT: vmv.v.x v9, a0 697; RV32-NEXT: fcvt.w.d a0, fa5 698; RV32-NEXT: vsetvli zero, zero, e64, m2, ta, ma 699; RV32-NEXT: vfmv.f.s fa5, v8 700; RV32-NEXT: vsetvli zero, zero, e32, m1, ta, ma 701; RV32-NEXT: vslide1down.vx v8, v9, a1 702; RV32-NEXT: vslide1down.vx v8, v8, a0 703; RV32-NEXT: fcvt.w.d a0, fa5 704; RV32-NEXT: vslide1down.vx v8, v8, a0 705; RV32-NEXT: ret 706; 707; RV64-i32-LABEL: lrint_v4f64: 708; RV64-i32: # %bb.0: 709; RV64-i32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 710; RV64-i32-NEXT: vslidedown.vi v10, v8, 1 711; RV64-i32-NEXT: vfmv.f.s fa5, v8 712; RV64-i32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 713; RV64-i32-NEXT: vslidedown.vi v12, v8, 2 714; RV64-i32-NEXT: vslidedown.vi v8, v8, 3 715; RV64-i32-NEXT: fcvt.l.d a0, fa5 716; RV64-i32-NEXT: vfmv.f.s fa5, v10 717; RV64-i32-NEXT: fcvt.l.d a1, fa5 718; RV64-i32-NEXT: vfmv.f.s fa5, v12 719; RV64-i32-NEXT: vsetivli zero, 4, e32, m1, ta, ma 720; RV64-i32-NEXT: vmv.v.x v9, a0 721; RV64-i32-NEXT: fcvt.l.d a0, fa5 722; RV64-i32-NEXT: vsetvli zero, zero, e64, m2, ta, ma 723; RV64-i32-NEXT: vfmv.f.s fa5, v8 724; RV64-i32-NEXT: vsetvli zero, zero, e32, m1, ta, ma 725; RV64-i32-NEXT: vslide1down.vx v8, v9, a1 726; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 727; RV64-i32-NEXT: fcvt.l.d a0, fa5 728; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 729; RV64-i32-NEXT: ret 730; 731; RV64-i64-LABEL: lrint_v4f64: 732; RV64-i64: # %bb.0: 733; RV64-i64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 734; RV64-i64-NEXT: vslidedown.vi v10, v8, 1 735; RV64-i64-NEXT: vfmv.f.s fa5, v8 736; RV64-i64-NEXT: vsetivli zero, 1, e64, m2, ta, ma 737; RV64-i64-NEXT: vslidedown.vi v12, v8, 2 738; RV64-i64-NEXT: vslidedown.vi v8, v8, 3 739; RV64-i64-NEXT: fcvt.l.d a0, fa5 740; RV64-i64-NEXT: vfmv.f.s fa5, v10 741; RV64-i64-NEXT: fcvt.l.d a1, fa5 742; RV64-i64-NEXT: vfmv.f.s fa5, v12 743; RV64-i64-NEXT: vsetivli zero, 4, e64, m2, ta, ma 744; RV64-i64-NEXT: vmv.v.x v10, a0 745; RV64-i64-NEXT: fcvt.l.d a0, fa5 746; RV64-i64-NEXT: vfmv.f.s fa5, v8 747; RV64-i64-NEXT: vslide1down.vx v8, v10, a1 748; RV64-i64-NEXT: vslide1down.vx v8, v8, a0 749; RV64-i64-NEXT: fcvt.l.d a0, fa5 750; RV64-i64-NEXT: vslide1down.vx v8, v8, a0 751; RV64-i64-NEXT: ret 752 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double> %x) 753 ret <4 x iXLen> %a 754} 755declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double>) 756 757define <8 x iXLen> @lrint_v8f64(<8 x double> %x) { 758; RV32-LABEL: lrint_v8f64: 759; RV32: # %bb.0: 760; RV32-NEXT: addi sp, sp, -128 761; RV32-NEXT: .cfi_def_cfa_offset 128 762; RV32-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 763; RV32-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 764; RV32-NEXT: .cfi_offset ra, -4 765; RV32-NEXT: .cfi_offset s0, -8 766; RV32-NEXT: addi s0, sp, 128 767; RV32-NEXT: .cfi_def_cfa s0, 0 768; RV32-NEXT: andi sp, sp, -64 769; RV32-NEXT: mv a0, sp 770; RV32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 771; RV32-NEXT: vslidedown.vi v12, v8, 1 772; RV32-NEXT: vfmv.f.s fa5, v8 773; RV32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 774; RV32-NEXT: vslidedown.vi v14, v8, 2 775; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 776; RV32-NEXT: vse64.v v8, (a0) 777; RV32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 778; RV32-NEXT: vslidedown.vi v8, v8, 3 779; RV32-NEXT: vfmv.f.s fa4, v12 780; RV32-NEXT: fcvt.w.d a0, fa5 781; RV32-NEXT: vfmv.f.s fa5, v14 782; RV32-NEXT: vfmv.f.s fa3, v8 783; RV32-NEXT: fcvt.w.d a1, fa4 784; RV32-NEXT: fcvt.w.d a2, fa5 785; RV32-NEXT: fcvt.w.d a3, fa3 786; RV32-NEXT: fld fa5, 32(sp) 787; RV32-NEXT: fld fa4, 40(sp) 788; RV32-NEXT: fld fa3, 48(sp) 789; RV32-NEXT: fld fa2, 56(sp) 790; RV32-NEXT: fcvt.w.d a4, fa5 791; RV32-NEXT: fcvt.w.d a5, fa4 792; RV32-NEXT: fcvt.w.d a6, fa3 793; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 794; RV32-NEXT: vmv.v.x v8, a0 795; RV32-NEXT: vslide1down.vx v8, v8, a1 796; RV32-NEXT: vslide1down.vx v8, v8, a2 797; RV32-NEXT: vslide1down.vx v8, v8, a3 798; RV32-NEXT: vslide1down.vx v8, v8, a4 799; RV32-NEXT: vslide1down.vx v8, v8, a5 800; RV32-NEXT: vslide1down.vx v8, v8, a6 801; RV32-NEXT: fcvt.w.d a0, fa2 802; RV32-NEXT: vslide1down.vx v8, v8, a0 803; RV32-NEXT: addi sp, s0, -128 804; RV32-NEXT: .cfi_def_cfa sp, 128 805; RV32-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 806; RV32-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 807; RV32-NEXT: .cfi_restore ra 808; RV32-NEXT: .cfi_restore s0 809; RV32-NEXT: addi sp, sp, 128 810; RV32-NEXT: .cfi_def_cfa_offset 0 811; RV32-NEXT: ret 812; 813; RV64-i32-LABEL: lrint_v8f64: 814; RV64-i32: # %bb.0: 815; RV64-i32-NEXT: addi sp, sp, -128 816; RV64-i32-NEXT: .cfi_def_cfa_offset 128 817; RV64-i32-NEXT: sd ra, 120(sp) # 8-byte Folded Spill 818; RV64-i32-NEXT: sd s0, 112(sp) # 8-byte Folded Spill 819; RV64-i32-NEXT: .cfi_offset ra, -8 820; RV64-i32-NEXT: .cfi_offset s0, -16 821; RV64-i32-NEXT: addi s0, sp, 128 822; RV64-i32-NEXT: .cfi_def_cfa s0, 0 823; RV64-i32-NEXT: andi sp, sp, -64 824; RV64-i32-NEXT: mv a0, sp 825; RV64-i32-NEXT: vsetivli zero, 1, e64, m1, ta, ma 826; RV64-i32-NEXT: vslidedown.vi v12, v8, 1 827; RV64-i32-NEXT: vfmv.f.s fa5, v8 828; RV64-i32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 829; RV64-i32-NEXT: vslidedown.vi v14, v8, 2 830; RV64-i32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 831; RV64-i32-NEXT: vse64.v v8, (a0) 832; RV64-i32-NEXT: vsetivli zero, 1, e64, m2, ta, ma 833; RV64-i32-NEXT: vslidedown.vi v8, v8, 3 834; RV64-i32-NEXT: vfmv.f.s fa4, v12 835; RV64-i32-NEXT: fcvt.l.d a0, fa5 836; RV64-i32-NEXT: vfmv.f.s fa5, v14 837; RV64-i32-NEXT: vfmv.f.s fa3, v8 838; RV64-i32-NEXT: fcvt.l.d a1, fa4 839; RV64-i32-NEXT: fcvt.l.d a2, fa5 840; RV64-i32-NEXT: fcvt.l.d a3, fa3 841; RV64-i32-NEXT: fld fa5, 32(sp) 842; RV64-i32-NEXT: fld fa4, 40(sp) 843; RV64-i32-NEXT: fld fa3, 48(sp) 844; RV64-i32-NEXT: fld fa2, 56(sp) 845; RV64-i32-NEXT: fcvt.l.d a4, fa5 846; RV64-i32-NEXT: fcvt.l.d a5, fa4 847; RV64-i32-NEXT: fcvt.l.d a6, fa3 848; RV64-i32-NEXT: vsetivli zero, 8, e32, m2, ta, ma 849; RV64-i32-NEXT: vmv.v.x v8, a0 850; RV64-i32-NEXT: vslide1down.vx v8, v8, a1 851; RV64-i32-NEXT: vslide1down.vx v8, v8, a2 852; RV64-i32-NEXT: vslide1down.vx v8, v8, a3 853; RV64-i32-NEXT: vslide1down.vx v8, v8, a4 854; RV64-i32-NEXT: vslide1down.vx v8, v8, a5 855; RV64-i32-NEXT: vslide1down.vx v8, v8, a6 856; RV64-i32-NEXT: fcvt.l.d a0, fa2 857; RV64-i32-NEXT: vslide1down.vx v8, v8, a0 858; RV64-i32-NEXT: addi sp, s0, -128 859; RV64-i32-NEXT: .cfi_def_cfa sp, 128 860; RV64-i32-NEXT: ld ra, 120(sp) # 8-byte Folded Reload 861; RV64-i32-NEXT: ld s0, 112(sp) # 8-byte Folded Reload 862; RV64-i32-NEXT: .cfi_restore ra 863; RV64-i32-NEXT: .cfi_restore s0 864; RV64-i32-NEXT: addi sp, sp, 128 865; RV64-i32-NEXT: .cfi_def_cfa_offset 0 866; RV64-i32-NEXT: ret 867; 868; RV64-i64-LABEL: lrint_v8f64: 869; RV64-i64: # %bb.0: 870; RV64-i64-NEXT: addi sp, sp, -192 871; RV64-i64-NEXT: .cfi_def_cfa_offset 192 872; RV64-i64-NEXT: sd ra, 184(sp) # 8-byte Folded Spill 873; RV64-i64-NEXT: sd s0, 176(sp) # 8-byte Folded Spill 874; RV64-i64-NEXT: .cfi_offset ra, -8 875; RV64-i64-NEXT: .cfi_offset s0, -16 876; RV64-i64-NEXT: addi s0, sp, 192 877; RV64-i64-NEXT: .cfi_def_cfa s0, 0 878; RV64-i64-NEXT: andi sp, sp, -64 879; RV64-i64-NEXT: mv a0, sp 880; RV64-i64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 881; RV64-i64-NEXT: vse64.v v8, (a0) 882; RV64-i64-NEXT: fld fa5, 56(sp) 883; RV64-i64-NEXT: vfmv.f.s fa4, v8 884; RV64-i64-NEXT: vsetivli zero, 1, e64, m1, ta, ma 885; RV64-i64-NEXT: vslidedown.vi v10, v8, 1 886; RV64-i64-NEXT: fcvt.l.d a0, fa4 887; RV64-i64-NEXT: fcvt.l.d a1, fa5 888; RV64-i64-NEXT: sd a1, 120(sp) 889; RV64-i64-NEXT: fld fa5, 48(sp) 890; RV64-i64-NEXT: vfmv.f.s fa4, v10 891; RV64-i64-NEXT: vsetivli zero, 1, e64, m2, ta, ma 892; RV64-i64-NEXT: vslidedown.vi v10, v8, 3 893; RV64-i64-NEXT: fcvt.l.d a1, fa4 894; RV64-i64-NEXT: fcvt.l.d a2, fa5 895; RV64-i64-NEXT: sd a2, 112(sp) 896; RV64-i64-NEXT: fld fa5, 40(sp) 897; RV64-i64-NEXT: vfmv.f.s fa4, v10 898; RV64-i64-NEXT: fcvt.l.d a2, fa4 899; RV64-i64-NEXT: vslidedown.vi v8, v8, 2 900; RV64-i64-NEXT: fcvt.l.d a3, fa5 901; RV64-i64-NEXT: vfmv.f.s fa5, v8 902; RV64-i64-NEXT: sd a3, 104(sp) 903; RV64-i64-NEXT: fcvt.l.d a3, fa5 904; RV64-i64-NEXT: fld fa5, 32(sp) 905; RV64-i64-NEXT: sd a0, 64(sp) 906; RV64-i64-NEXT: sd a1, 72(sp) 907; RV64-i64-NEXT: sd a3, 80(sp) 908; RV64-i64-NEXT: sd a2, 88(sp) 909; RV64-i64-NEXT: fcvt.l.d a0, fa5 910; RV64-i64-NEXT: sd a0, 96(sp) 911; RV64-i64-NEXT: addi a0, sp, 64 912; RV64-i64-NEXT: vsetivli zero, 8, e64, m4, ta, ma 913; RV64-i64-NEXT: vle64.v v8, (a0) 914; RV64-i64-NEXT: addi sp, s0, -192 915; RV64-i64-NEXT: .cfi_def_cfa sp, 192 916; RV64-i64-NEXT: ld ra, 184(sp) # 8-byte Folded Reload 917; RV64-i64-NEXT: ld s0, 176(sp) # 8-byte Folded Reload 918; RV64-i64-NEXT: .cfi_restore ra 919; RV64-i64-NEXT: .cfi_restore s0 920; RV64-i64-NEXT: addi sp, sp, 192 921; RV64-i64-NEXT: .cfi_def_cfa_offset 0 922; RV64-i64-NEXT: ret 923 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double> %x) 924 ret <8 x iXLen> %a 925} 926declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double>) 927