925 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=riscv32 -mattr=+d \3; RUN: -verify-machineinstrs -target-abi=ilp32d < %s \4; RUN: | FileCheck -check-prefixes=CHECK,RV32IFD %s5; RUN: llc -mtriple=riscv64 -mattr=+d \6; RUN: -verify-machineinstrs -target-abi=lp64d < %s \7; RUN: | FileCheck -check-prefixes=CHECK,RV64IFD %s8 9define <1 x half> @exp10_v1f16(<1 x half> %x) {10; RV32IFD-LABEL: exp10_v1f16:11; RV32IFD: # %bb.0:12; RV32IFD-NEXT: addi sp, sp, -1613; RV32IFD-NEXT: .cfi_def_cfa_offset 1614; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill15; RV32IFD-NEXT: .cfi_offset ra, -416; RV32IFD-NEXT: fmv.w.x fa0, a017; RV32IFD-NEXT: call __extendhfsf218; RV32IFD-NEXT: call exp10f19; RV32IFD-NEXT: call __truncsfhf220; RV32IFD-NEXT: fmv.x.w a0, fa021; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload22; RV32IFD-NEXT: .cfi_restore ra23; RV32IFD-NEXT: addi sp, sp, 1624; RV32IFD-NEXT: .cfi_def_cfa_offset 025; RV32IFD-NEXT: ret26;27; RV64IFD-LABEL: exp10_v1f16:28; RV64IFD: # %bb.0:29; RV64IFD-NEXT: addi sp, sp, -1630; RV64IFD-NEXT: .cfi_def_cfa_offset 1631; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill32; RV64IFD-NEXT: .cfi_offset ra, -833; RV64IFD-NEXT: fmv.w.x fa0, a034; RV64IFD-NEXT: call __extendhfsf235; RV64IFD-NEXT: call exp10f36; RV64IFD-NEXT: call __truncsfhf237; RV64IFD-NEXT: fmv.x.w a0, fa038; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload39; RV64IFD-NEXT: .cfi_restore ra40; RV64IFD-NEXT: addi sp, sp, 1641; RV64IFD-NEXT: .cfi_def_cfa_offset 042; RV64IFD-NEXT: ret43 %r = call <1 x half> @llvm.exp10.v1f16(<1 x half> %x)44 ret <1 x half> %r45}46 47define <2 x half> @exp10_v2f16(<2 x half> %x) {48; RV32IFD-LABEL: exp10_v2f16:49; RV32IFD: # %bb.0:50; RV32IFD-NEXT: addi sp, sp, -1651; RV32IFD-NEXT: .cfi_def_cfa_offset 1652; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill53; RV32IFD-NEXT: sw s0, 8(sp) # 4-byte Folded Spill54; RV32IFD-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill55; RV32IFD-NEXT: .cfi_offset ra, -456; RV32IFD-NEXT: .cfi_offset s0, -857; RV32IFD-NEXT: .cfi_offset fs0, -1658; RV32IFD-NEXT: fmv.w.x fs0, a159; RV32IFD-NEXT: fmv.w.x fa0, a060; RV32IFD-NEXT: call __extendhfsf261; RV32IFD-NEXT: call exp10f62; RV32IFD-NEXT: call __truncsfhf263; RV32IFD-NEXT: fmv.x.w s0, fa064; RV32IFD-NEXT: fmv.s fa0, fs065; RV32IFD-NEXT: call __extendhfsf266; RV32IFD-NEXT: call exp10f67; RV32IFD-NEXT: call __truncsfhf268; RV32IFD-NEXT: fmv.x.w a1, fa069; RV32IFD-NEXT: mv a0, s070; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload71; RV32IFD-NEXT: lw s0, 8(sp) # 4-byte Folded Reload72; RV32IFD-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload73; RV32IFD-NEXT: .cfi_restore ra74; RV32IFD-NEXT: .cfi_restore s075; RV32IFD-NEXT: .cfi_restore fs076; RV32IFD-NEXT: addi sp, sp, 1677; RV32IFD-NEXT: .cfi_def_cfa_offset 078; RV32IFD-NEXT: ret79;80; RV64IFD-LABEL: exp10_v2f16:81; RV64IFD: # %bb.0:82; RV64IFD-NEXT: addi sp, sp, -3283; RV64IFD-NEXT: .cfi_def_cfa_offset 3284; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill85; RV64IFD-NEXT: sd s0, 16(sp) # 8-byte Folded Spill86; RV64IFD-NEXT: sd s1, 8(sp) # 8-byte Folded Spill87; RV64IFD-NEXT: .cfi_offset ra, -888; RV64IFD-NEXT: .cfi_offset s0, -1689; RV64IFD-NEXT: .cfi_offset s1, -2490; RV64IFD-NEXT: mv s0, a191; RV64IFD-NEXT: fmv.w.x fa0, a092; RV64IFD-NEXT: call __extendhfsf293; RV64IFD-NEXT: call exp10f94; RV64IFD-NEXT: call __truncsfhf295; RV64IFD-NEXT: fmv.x.w s1, fa096; RV64IFD-NEXT: fmv.w.x fa0, s097; RV64IFD-NEXT: call __extendhfsf298; RV64IFD-NEXT: call exp10f99; RV64IFD-NEXT: call __truncsfhf2100; RV64IFD-NEXT: fmv.x.w a1, fa0101; RV64IFD-NEXT: mv a0, s1102; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload103; RV64IFD-NEXT: ld s0, 16(sp) # 8-byte Folded Reload104; RV64IFD-NEXT: ld s1, 8(sp) # 8-byte Folded Reload105; RV64IFD-NEXT: .cfi_restore ra106; RV64IFD-NEXT: .cfi_restore s0107; RV64IFD-NEXT: .cfi_restore s1108; RV64IFD-NEXT: addi sp, sp, 32109; RV64IFD-NEXT: .cfi_def_cfa_offset 0110; RV64IFD-NEXT: ret111 %r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)112 ret <2 x half> %r113}114 115define <3 x half> @exp10_v3f16(<3 x half> %x) {116; RV32IFD-LABEL: exp10_v3f16:117; RV32IFD: # %bb.0:118; RV32IFD-NEXT: addi sp, sp, -48119; RV32IFD-NEXT: .cfi_def_cfa_offset 48120; RV32IFD-NEXT: sw ra, 44(sp) # 4-byte Folded Spill121; RV32IFD-NEXT: sw s0, 40(sp) # 4-byte Folded Spill122; RV32IFD-NEXT: sw s1, 36(sp) # 4-byte Folded Spill123; RV32IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill124; RV32IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill125; RV32IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill126; RV32IFD-NEXT: .cfi_offset ra, -4127; RV32IFD-NEXT: .cfi_offset s0, -8128; RV32IFD-NEXT: .cfi_offset s1, -12129; RV32IFD-NEXT: .cfi_offset fs0, -24130; RV32IFD-NEXT: .cfi_offset fs1, -32131; RV32IFD-NEXT: .cfi_offset fs2, -40132; RV32IFD-NEXT: mv s0, a0133; RV32IFD-NEXT: lhu a0, 8(a1)134; RV32IFD-NEXT: lhu a2, 0(a1)135; RV32IFD-NEXT: lhu a1, 4(a1)136; RV32IFD-NEXT: fmv.w.x fs0, a0137; RV32IFD-NEXT: fmv.w.x fs1, a2138; RV32IFD-NEXT: fmv.w.x fa0, a1139; RV32IFD-NEXT: call __extendhfsf2140; RV32IFD-NEXT: call exp10f141; RV32IFD-NEXT: call __truncsfhf2142; RV32IFD-NEXT: fmv.s fs2, fa0143; RV32IFD-NEXT: fmv.s fa0, fs1144; RV32IFD-NEXT: call __extendhfsf2145; RV32IFD-NEXT: call exp10f146; RV32IFD-NEXT: fmv.x.w a0, fs2147; RV32IFD-NEXT: slli s1, a0, 16148; RV32IFD-NEXT: call __truncsfhf2149; RV32IFD-NEXT: fmv.x.w a0, fa0150; RV32IFD-NEXT: slli a0, a0, 16151; RV32IFD-NEXT: srli a0, a0, 16152; RV32IFD-NEXT: or s1, a0, s1153; RV32IFD-NEXT: fmv.s fa0, fs0154; RV32IFD-NEXT: call __extendhfsf2155; RV32IFD-NEXT: call exp10f156; RV32IFD-NEXT: call __truncsfhf2157; RV32IFD-NEXT: fmv.x.w a0, fa0158; RV32IFD-NEXT: sw s1, 0(s0)159; RV32IFD-NEXT: sh a0, 4(s0)160; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload161; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload162; RV32IFD-NEXT: lw s1, 36(sp) # 4-byte Folded Reload163; RV32IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload164; RV32IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload165; RV32IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload166; RV32IFD-NEXT: .cfi_restore ra167; RV32IFD-NEXT: .cfi_restore s0168; RV32IFD-NEXT: .cfi_restore s1169; RV32IFD-NEXT: .cfi_restore fs0170; RV32IFD-NEXT: .cfi_restore fs1171; RV32IFD-NEXT: .cfi_restore fs2172; RV32IFD-NEXT: addi sp, sp, 48173; RV32IFD-NEXT: .cfi_def_cfa_offset 0174; RV32IFD-NEXT: ret175;176; RV64IFD-LABEL: exp10_v3f16:177; RV64IFD: # %bb.0:178; RV64IFD-NEXT: addi sp, sp, -48179; RV64IFD-NEXT: .cfi_def_cfa_offset 48180; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill181; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill182; RV64IFD-NEXT: sd s1, 24(sp) # 8-byte Folded Spill183; RV64IFD-NEXT: sd s2, 16(sp) # 8-byte Folded Spill184; RV64IFD-NEXT: fsd fs0, 8(sp) # 8-byte Folded Spill185; RV64IFD-NEXT: .cfi_offset ra, -8186; RV64IFD-NEXT: .cfi_offset s0, -16187; RV64IFD-NEXT: .cfi_offset s1, -24188; RV64IFD-NEXT: .cfi_offset s2, -32189; RV64IFD-NEXT: .cfi_offset fs0, -40190; RV64IFD-NEXT: lhu s1, 0(a1)191; RV64IFD-NEXT: lhu a2, 8(a1)192; RV64IFD-NEXT: lhu s2, 16(a1)193; RV64IFD-NEXT: mv s0, a0194; RV64IFD-NEXT: fmv.w.x fa0, a2195; RV64IFD-NEXT: call __extendhfsf2196; RV64IFD-NEXT: call exp10f197; RV64IFD-NEXT: call __truncsfhf2198; RV64IFD-NEXT: fmv.s fs0, fa0199; RV64IFD-NEXT: fmv.w.x fa0, s1200; RV64IFD-NEXT: call __extendhfsf2201; RV64IFD-NEXT: call exp10f202; RV64IFD-NEXT: fmv.x.w a0, fs0203; RV64IFD-NEXT: slli s1, a0, 16204; RV64IFD-NEXT: call __truncsfhf2205; RV64IFD-NEXT: fmv.x.w a0, fa0206; RV64IFD-NEXT: slli a0, a0, 48207; RV64IFD-NEXT: srli a0, a0, 48208; RV64IFD-NEXT: or s1, a0, s1209; RV64IFD-NEXT: fmv.w.x fa0, s2210; RV64IFD-NEXT: call __extendhfsf2211; RV64IFD-NEXT: call exp10f212; RV64IFD-NEXT: call __truncsfhf2213; RV64IFD-NEXT: fmv.x.w a0, fa0214; RV64IFD-NEXT: sw s1, 0(s0)215; RV64IFD-NEXT: sh a0, 4(s0)216; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload217; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload218; RV64IFD-NEXT: ld s1, 24(sp) # 8-byte Folded Reload219; RV64IFD-NEXT: ld s2, 16(sp) # 8-byte Folded Reload220; RV64IFD-NEXT: fld fs0, 8(sp) # 8-byte Folded Reload221; RV64IFD-NEXT: .cfi_restore ra222; RV64IFD-NEXT: .cfi_restore s0223; RV64IFD-NEXT: .cfi_restore s1224; RV64IFD-NEXT: .cfi_restore s2225; RV64IFD-NEXT: .cfi_restore fs0226; RV64IFD-NEXT: addi sp, sp, 48227; RV64IFD-NEXT: .cfi_def_cfa_offset 0228; RV64IFD-NEXT: ret229 %r = call <3 x half> @llvm.exp10.v3f16(<3 x half> %x)230 ret <3 x half> %r231}232 233define <4 x half> @exp10_v4f16(<4 x half> %x) {234; RV32IFD-LABEL: exp10_v4f16:235; RV32IFD: # %bb.0:236; RV32IFD-NEXT: addi sp, sp, -64237; RV32IFD-NEXT: .cfi_def_cfa_offset 64238; RV32IFD-NEXT: sw ra, 60(sp) # 4-byte Folded Spill239; RV32IFD-NEXT: sw s0, 56(sp) # 4-byte Folded Spill240; RV32IFD-NEXT: sw s1, 52(sp) # 4-byte Folded Spill241; RV32IFD-NEXT: sw s2, 48(sp) # 4-byte Folded Spill242; RV32IFD-NEXT: sw s3, 44(sp) # 4-byte Folded Spill243; RV32IFD-NEXT: fsd fs0, 32(sp) # 8-byte Folded Spill244; RV32IFD-NEXT: fsd fs1, 24(sp) # 8-byte Folded Spill245; RV32IFD-NEXT: fsd fs2, 16(sp) # 8-byte Folded Spill246; RV32IFD-NEXT: fsd fs3, 8(sp) # 8-byte Folded Spill247; RV32IFD-NEXT: .cfi_offset ra, -4248; RV32IFD-NEXT: .cfi_offset s0, -8249; RV32IFD-NEXT: .cfi_offset s1, -12250; RV32IFD-NEXT: .cfi_offset s2, -16251; RV32IFD-NEXT: .cfi_offset s3, -20252; RV32IFD-NEXT: .cfi_offset fs0, -32253; RV32IFD-NEXT: .cfi_offset fs1, -40254; RV32IFD-NEXT: .cfi_offset fs2, -48255; RV32IFD-NEXT: .cfi_offset fs3, -56256; RV32IFD-NEXT: mv s0, a0257; RV32IFD-NEXT: lhu a0, 12(a1)258; RV32IFD-NEXT: lhu a2, 0(a1)259; RV32IFD-NEXT: lhu a3, 4(a1)260; RV32IFD-NEXT: lhu a1, 8(a1)261; RV32IFD-NEXT: fmv.w.x fs0, a0262; RV32IFD-NEXT: fmv.w.x fs1, a2263; RV32IFD-NEXT: fmv.w.x fs2, a3264; RV32IFD-NEXT: fmv.w.x fa0, a1265; RV32IFD-NEXT: call __extendhfsf2266; RV32IFD-NEXT: call exp10f267; RV32IFD-NEXT: call __truncsfhf2268; RV32IFD-NEXT: fmv.s fs3, fa0269; RV32IFD-NEXT: fmv.s fa0, fs2270; RV32IFD-NEXT: call __extendhfsf2271; RV32IFD-NEXT: call exp10f272; RV32IFD-NEXT: call __truncsfhf2273; RV32IFD-NEXT: fmv.s fs2, fa0274; RV32IFD-NEXT: fmv.s fa0, fs1275; RV32IFD-NEXT: call __extendhfsf2276; RV32IFD-NEXT: call exp10f277; RV32IFD-NEXT: call __truncsfhf2278; RV32IFD-NEXT: fmv.s fs1, fa0279; RV32IFD-NEXT: fmv.s fa0, fs0280; RV32IFD-NEXT: call __extendhfsf2281; RV32IFD-NEXT: call exp10f282; RV32IFD-NEXT: fmv.x.w s1, fs1283; RV32IFD-NEXT: fmv.x.w s2, fs2284; RV32IFD-NEXT: fmv.x.w s3, fs3285; RV32IFD-NEXT: call __truncsfhf2286; RV32IFD-NEXT: fmv.x.w a0, fa0287; RV32IFD-NEXT: sh s1, 0(s0)288; RV32IFD-NEXT: sh s2, 2(s0)289; RV32IFD-NEXT: sh s3, 4(s0)290; RV32IFD-NEXT: sh a0, 6(s0)291; RV32IFD-NEXT: lw ra, 60(sp) # 4-byte Folded Reload292; RV32IFD-NEXT: lw s0, 56(sp) # 4-byte Folded Reload293; RV32IFD-NEXT: lw s1, 52(sp) # 4-byte Folded Reload294; RV32IFD-NEXT: lw s2, 48(sp) # 4-byte Folded Reload295; RV32IFD-NEXT: lw s3, 44(sp) # 4-byte Folded Reload296; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload297; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload298; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload299; RV32IFD-NEXT: fld fs3, 8(sp) # 8-byte Folded Reload300; RV32IFD-NEXT: .cfi_restore ra301; RV32IFD-NEXT: .cfi_restore s0302; RV32IFD-NEXT: .cfi_restore s1303; RV32IFD-NEXT: .cfi_restore s2304; RV32IFD-NEXT: .cfi_restore s3305; RV32IFD-NEXT: .cfi_restore fs0306; RV32IFD-NEXT: .cfi_restore fs1307; RV32IFD-NEXT: .cfi_restore fs2308; RV32IFD-NEXT: .cfi_restore fs3309; RV32IFD-NEXT: addi sp, sp, 64310; RV32IFD-NEXT: .cfi_def_cfa_offset 0311; RV32IFD-NEXT: ret312;313; RV64IFD-LABEL: exp10_v4f16:314; RV64IFD: # %bb.0:315; RV64IFD-NEXT: addi sp, sp, -64316; RV64IFD-NEXT: .cfi_def_cfa_offset 64317; RV64IFD-NEXT: sd ra, 56(sp) # 8-byte Folded Spill318; RV64IFD-NEXT: sd s0, 48(sp) # 8-byte Folded Spill319; RV64IFD-NEXT: sd s1, 40(sp) # 8-byte Folded Spill320; RV64IFD-NEXT: sd s2, 32(sp) # 8-byte Folded Spill321; RV64IFD-NEXT: sd s3, 24(sp) # 8-byte Folded Spill322; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill323; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill324; RV64IFD-NEXT: fsd fs2, 0(sp) # 8-byte Folded Spill325; RV64IFD-NEXT: .cfi_offset ra, -8326; RV64IFD-NEXT: .cfi_offset s0, -16327; RV64IFD-NEXT: .cfi_offset s1, -24328; RV64IFD-NEXT: .cfi_offset s2, -32329; RV64IFD-NEXT: .cfi_offset s3, -40330; RV64IFD-NEXT: .cfi_offset fs0, -48331; RV64IFD-NEXT: .cfi_offset fs1, -56332; RV64IFD-NEXT: .cfi_offset fs2, -64333; RV64IFD-NEXT: lhu s1, 0(a1)334; RV64IFD-NEXT: lhu s2, 8(a1)335; RV64IFD-NEXT: lhu a2, 16(a1)336; RV64IFD-NEXT: lhu s3, 24(a1)337; RV64IFD-NEXT: mv s0, a0338; RV64IFD-NEXT: fmv.w.x fa0, a2339; RV64IFD-NEXT: call __extendhfsf2340; RV64IFD-NEXT: call exp10f341; RV64IFD-NEXT: call __truncsfhf2342; RV64IFD-NEXT: fmv.s fs0, fa0343; RV64IFD-NEXT: fmv.w.x fa0, s2344; RV64IFD-NEXT: call __extendhfsf2345; RV64IFD-NEXT: call exp10f346; RV64IFD-NEXT: call __truncsfhf2347; RV64IFD-NEXT: fmv.s fs1, fa0348; RV64IFD-NEXT: fmv.w.x fa0, s1349; RV64IFD-NEXT: call __extendhfsf2350; RV64IFD-NEXT: call exp10f351; RV64IFD-NEXT: call __truncsfhf2352; RV64IFD-NEXT: fmv.s fs2, fa0353; RV64IFD-NEXT: fmv.w.x fa0, s3354; RV64IFD-NEXT: call __extendhfsf2355; RV64IFD-NEXT: call exp10f356; RV64IFD-NEXT: fmv.x.w s1, fs2357; RV64IFD-NEXT: fmv.x.w s2, fs1358; RV64IFD-NEXT: fmv.x.w s3, fs0359; RV64IFD-NEXT: call __truncsfhf2360; RV64IFD-NEXT: fmv.x.w a0, fa0361; RV64IFD-NEXT: sh s1, 0(s0)362; RV64IFD-NEXT: sh s2, 2(s0)363; RV64IFD-NEXT: sh s3, 4(s0)364; RV64IFD-NEXT: sh a0, 6(s0)365; RV64IFD-NEXT: ld ra, 56(sp) # 8-byte Folded Reload366; RV64IFD-NEXT: ld s0, 48(sp) # 8-byte Folded Reload367; RV64IFD-NEXT: ld s1, 40(sp) # 8-byte Folded Reload368; RV64IFD-NEXT: ld s2, 32(sp) # 8-byte Folded Reload369; RV64IFD-NEXT: ld s3, 24(sp) # 8-byte Folded Reload370; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload371; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload372; RV64IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload373; RV64IFD-NEXT: .cfi_restore ra374; RV64IFD-NEXT: .cfi_restore s0375; RV64IFD-NEXT: .cfi_restore s1376; RV64IFD-NEXT: .cfi_restore s2377; RV64IFD-NEXT: .cfi_restore s3378; RV64IFD-NEXT: .cfi_restore fs0379; RV64IFD-NEXT: .cfi_restore fs1380; RV64IFD-NEXT: .cfi_restore fs2381; RV64IFD-NEXT: addi sp, sp, 64382; RV64IFD-NEXT: .cfi_def_cfa_offset 0383; RV64IFD-NEXT: ret384 %r = call <4 x half> @llvm.exp10.v4f16(<4 x half> %x)385 ret <4 x half> %r386}387 388define <1 x float> @exp10_v1f32(<1 x float> %x) {389; RV32IFD-LABEL: exp10_v1f32:390; RV32IFD: # %bb.0:391; RV32IFD-NEXT: addi sp, sp, -16392; RV32IFD-NEXT: .cfi_def_cfa_offset 16393; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill394; RV32IFD-NEXT: .cfi_offset ra, -4395; RV32IFD-NEXT: call exp10f396; RV32IFD-NEXT: lw ra, 12(sp) # 4-byte Folded Reload397; RV32IFD-NEXT: .cfi_restore ra398; RV32IFD-NEXT: addi sp, sp, 16399; RV32IFD-NEXT: .cfi_def_cfa_offset 0400; RV32IFD-NEXT: ret401;402; RV64IFD-LABEL: exp10_v1f32:403; RV64IFD: # %bb.0:404; RV64IFD-NEXT: addi sp, sp, -16405; RV64IFD-NEXT: .cfi_def_cfa_offset 16406; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill407; RV64IFD-NEXT: .cfi_offset ra, -8408; RV64IFD-NEXT: call exp10f409; RV64IFD-NEXT: ld ra, 8(sp) # 8-byte Folded Reload410; RV64IFD-NEXT: .cfi_restore ra411; RV64IFD-NEXT: addi sp, sp, 16412; RV64IFD-NEXT: .cfi_def_cfa_offset 0413; RV64IFD-NEXT: ret414 %r = call <1 x float> @llvm.exp10.v1f32(<1 x float> %x)415 ret <1 x float> %r416}417 418define <2 x float> @exp10_v2f32(<2 x float> %x) {419; RV32IFD-LABEL: exp10_v2f32:420; RV32IFD: # %bb.0:421; RV32IFD-NEXT: addi sp, sp, -32422; RV32IFD-NEXT: .cfi_def_cfa_offset 32423; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill424; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill425; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill426; RV32IFD-NEXT: .cfi_offset ra, -4427; RV32IFD-NEXT: .cfi_offset fs0, -16428; RV32IFD-NEXT: .cfi_offset fs1, -24429; RV32IFD-NEXT: fmv.s fs0, fa1430; RV32IFD-NEXT: call exp10f431; RV32IFD-NEXT: fmv.s fs1, fa0432; RV32IFD-NEXT: fmv.s fa0, fs0433; RV32IFD-NEXT: call exp10f434; RV32IFD-NEXT: fmv.s fa1, fa0435; RV32IFD-NEXT: fmv.s fa0, fs1436; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload437; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload438; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload439; RV32IFD-NEXT: .cfi_restore ra440; RV32IFD-NEXT: .cfi_restore fs0441; RV32IFD-NEXT: .cfi_restore fs1442; RV32IFD-NEXT: addi sp, sp, 32443; RV32IFD-NEXT: .cfi_def_cfa_offset 0444; RV32IFD-NEXT: ret445;446; RV64IFD-LABEL: exp10_v2f32:447; RV64IFD: # %bb.0:448; RV64IFD-NEXT: addi sp, sp, -32449; RV64IFD-NEXT: .cfi_def_cfa_offset 32450; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill451; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill452; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill453; RV64IFD-NEXT: .cfi_offset ra, -8454; RV64IFD-NEXT: .cfi_offset fs0, -16455; RV64IFD-NEXT: .cfi_offset fs1, -24456; RV64IFD-NEXT: fmv.s fs0, fa1457; RV64IFD-NEXT: call exp10f458; RV64IFD-NEXT: fmv.s fs1, fa0459; RV64IFD-NEXT: fmv.s fa0, fs0460; RV64IFD-NEXT: call exp10f461; RV64IFD-NEXT: fmv.s fa1, fa0462; RV64IFD-NEXT: fmv.s fa0, fs1463; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload464; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload465; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload466; RV64IFD-NEXT: .cfi_restore ra467; RV64IFD-NEXT: .cfi_restore fs0468; RV64IFD-NEXT: .cfi_restore fs1469; RV64IFD-NEXT: addi sp, sp, 32470; RV64IFD-NEXT: .cfi_def_cfa_offset 0471; RV64IFD-NEXT: ret472 %r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)473 ret <2 x float> %r474}475 476define <3 x float> @exp10_v3f32(<3 x float> %x) {477; RV32IFD-LABEL: exp10_v3f32:478; RV32IFD: # %bb.0:479; RV32IFD-NEXT: addi sp, sp, -32480; RV32IFD-NEXT: .cfi_def_cfa_offset 32481; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill482; RV32IFD-NEXT: sw s0, 24(sp) # 4-byte Folded Spill483; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill484; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill485; RV32IFD-NEXT: fsd fs2, 0(sp) # 8-byte Folded Spill486; RV32IFD-NEXT: .cfi_offset ra, -4487; RV32IFD-NEXT: .cfi_offset s0, -8488; RV32IFD-NEXT: .cfi_offset fs0, -16489; RV32IFD-NEXT: .cfi_offset fs1, -24490; RV32IFD-NEXT: .cfi_offset fs2, -32491; RV32IFD-NEXT: fmv.s fs0, fa2492; RV32IFD-NEXT: fmv.s fs1, fa1493; RV32IFD-NEXT: mv s0, a0494; RV32IFD-NEXT: call exp10f495; RV32IFD-NEXT: fmv.s fs2, fa0496; RV32IFD-NEXT: fmv.s fa0, fs1497; RV32IFD-NEXT: call exp10f498; RV32IFD-NEXT: fmv.s fs1, fa0499; RV32IFD-NEXT: fmv.s fa0, fs0500; RV32IFD-NEXT: call exp10f501; RV32IFD-NEXT: fsw fs2, 0(s0)502; RV32IFD-NEXT: fsw fs1, 4(s0)503; RV32IFD-NEXT: fsw fa0, 8(s0)504; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload505; RV32IFD-NEXT: lw s0, 24(sp) # 4-byte Folded Reload506; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload507; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload508; RV32IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload509; RV32IFD-NEXT: .cfi_restore ra510; RV32IFD-NEXT: .cfi_restore s0511; RV32IFD-NEXT: .cfi_restore fs0512; RV32IFD-NEXT: .cfi_restore fs1513; RV32IFD-NEXT: .cfi_restore fs2514; RV32IFD-NEXT: addi sp, sp, 32515; RV32IFD-NEXT: .cfi_def_cfa_offset 0516; RV32IFD-NEXT: ret517;518; RV64IFD-LABEL: exp10_v3f32:519; RV64IFD: # %bb.0:520; RV64IFD-NEXT: addi sp, sp, -48521; RV64IFD-NEXT: .cfi_def_cfa_offset 48522; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill523; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill524; RV64IFD-NEXT: sd s1, 24(sp) # 8-byte Folded Spill525; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill526; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill527; RV64IFD-NEXT: .cfi_offset ra, -8528; RV64IFD-NEXT: .cfi_offset s0, -16529; RV64IFD-NEXT: .cfi_offset s1, -24530; RV64IFD-NEXT: .cfi_offset fs0, -32531; RV64IFD-NEXT: .cfi_offset fs1, -40532; RV64IFD-NEXT: fmv.s fs0, fa2533; RV64IFD-NEXT: fmv.s fs1, fa0534; RV64IFD-NEXT: mv s0, a0535; RV64IFD-NEXT: fmv.s fa0, fa1536; RV64IFD-NEXT: call exp10f537; RV64IFD-NEXT: fmv.x.w a0, fa0538; RV64IFD-NEXT: slli s1, a0, 32539; RV64IFD-NEXT: fmv.s fa0, fs1540; RV64IFD-NEXT: call exp10f541; RV64IFD-NEXT: fmv.x.w a0, fa0542; RV64IFD-NEXT: slli a0, a0, 32543; RV64IFD-NEXT: srli a0, a0, 32544; RV64IFD-NEXT: or s1, a0, s1545; RV64IFD-NEXT: fmv.s fa0, fs0546; RV64IFD-NEXT: call exp10f547; RV64IFD-NEXT: sd s1, 0(s0)548; RV64IFD-NEXT: fsw fa0, 8(s0)549; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload550; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload551; RV64IFD-NEXT: ld s1, 24(sp) # 8-byte Folded Reload552; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload553; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload554; RV64IFD-NEXT: .cfi_restore ra555; RV64IFD-NEXT: .cfi_restore s0556; RV64IFD-NEXT: .cfi_restore s1557; RV64IFD-NEXT: .cfi_restore fs0558; RV64IFD-NEXT: .cfi_restore fs1559; RV64IFD-NEXT: addi sp, sp, 48560; RV64IFD-NEXT: .cfi_def_cfa_offset 0561; RV64IFD-NEXT: ret562 %r = call <3 x float> @llvm.exp10.v3f32(<3 x float> %x)563 ret <3 x float> %r564}565 566define <4 x float> @exp10_v4f32(<4 x float> %x) {567; RV32IFD-LABEL: exp10_v4f32:568; RV32IFD: # %bb.0:569; RV32IFD-NEXT: addi sp, sp, -48570; RV32IFD-NEXT: .cfi_def_cfa_offset 48571; RV32IFD-NEXT: sw ra, 44(sp) # 4-byte Folded Spill572; RV32IFD-NEXT: sw s0, 40(sp) # 4-byte Folded Spill573; RV32IFD-NEXT: fsd fs0, 32(sp) # 8-byte Folded Spill574; RV32IFD-NEXT: fsd fs1, 24(sp) # 8-byte Folded Spill575; RV32IFD-NEXT: fsd fs2, 16(sp) # 8-byte Folded Spill576; RV32IFD-NEXT: fsd fs3, 8(sp) # 8-byte Folded Spill577; RV32IFD-NEXT: .cfi_offset ra, -4578; RV32IFD-NEXT: .cfi_offset s0, -8579; RV32IFD-NEXT: .cfi_offset fs0, -16580; RV32IFD-NEXT: .cfi_offset fs1, -24581; RV32IFD-NEXT: .cfi_offset fs2, -32582; RV32IFD-NEXT: .cfi_offset fs3, -40583; RV32IFD-NEXT: fmv.s fs0, fa3584; RV32IFD-NEXT: fmv.s fs1, fa2585; RV32IFD-NEXT: fmv.s fs2, fa1586; RV32IFD-NEXT: mv s0, a0587; RV32IFD-NEXT: call exp10f588; RV32IFD-NEXT: fmv.s fs3, fa0589; RV32IFD-NEXT: fmv.s fa0, fs2590; RV32IFD-NEXT: call exp10f591; RV32IFD-NEXT: fmv.s fs2, fa0592; RV32IFD-NEXT: fmv.s fa0, fs1593; RV32IFD-NEXT: call exp10f594; RV32IFD-NEXT: fmv.s fs1, fa0595; RV32IFD-NEXT: fmv.s fa0, fs0596; RV32IFD-NEXT: call exp10f597; RV32IFD-NEXT: fsw fs3, 0(s0)598; RV32IFD-NEXT: fsw fs2, 4(s0)599; RV32IFD-NEXT: fsw fs1, 8(s0)600; RV32IFD-NEXT: fsw fa0, 12(s0)601; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload602; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload603; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload604; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload605; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload606; RV32IFD-NEXT: fld fs3, 8(sp) # 8-byte Folded Reload607; RV32IFD-NEXT: .cfi_restore ra608; RV32IFD-NEXT: .cfi_restore s0609; RV32IFD-NEXT: .cfi_restore fs0610; RV32IFD-NEXT: .cfi_restore fs1611; RV32IFD-NEXT: .cfi_restore fs2612; RV32IFD-NEXT: .cfi_restore fs3613; RV32IFD-NEXT: addi sp, sp, 48614; RV32IFD-NEXT: .cfi_def_cfa_offset 0615; RV32IFD-NEXT: ret616;617; RV64IFD-LABEL: exp10_v4f32:618; RV64IFD: # %bb.0:619; RV64IFD-NEXT: addi sp, sp, -48620; RV64IFD-NEXT: .cfi_def_cfa_offset 48621; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill622; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill623; RV64IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill624; RV64IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill625; RV64IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill626; RV64IFD-NEXT: fsd fs3, 0(sp) # 8-byte Folded Spill627; RV64IFD-NEXT: .cfi_offset ra, -8628; RV64IFD-NEXT: .cfi_offset s0, -16629; RV64IFD-NEXT: .cfi_offset fs0, -24630; RV64IFD-NEXT: .cfi_offset fs1, -32631; RV64IFD-NEXT: .cfi_offset fs2, -40632; RV64IFD-NEXT: .cfi_offset fs3, -48633; RV64IFD-NEXT: fmv.s fs0, fa3634; RV64IFD-NEXT: fmv.s fs1, fa2635; RV64IFD-NEXT: fmv.s fs2, fa1636; RV64IFD-NEXT: mv s0, a0637; RV64IFD-NEXT: call exp10f638; RV64IFD-NEXT: fmv.s fs3, fa0639; RV64IFD-NEXT: fmv.s fa0, fs2640; RV64IFD-NEXT: call exp10f641; RV64IFD-NEXT: fmv.s fs2, fa0642; RV64IFD-NEXT: fmv.s fa0, fs1643; RV64IFD-NEXT: call exp10f644; RV64IFD-NEXT: fmv.s fs1, fa0645; RV64IFD-NEXT: fmv.s fa0, fs0646; RV64IFD-NEXT: call exp10f647; RV64IFD-NEXT: fsw fs3, 0(s0)648; RV64IFD-NEXT: fsw fs2, 4(s0)649; RV64IFD-NEXT: fsw fs1, 8(s0)650; RV64IFD-NEXT: fsw fa0, 12(s0)651; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload652; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload653; RV64IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload654; RV64IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload655; RV64IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload656; RV64IFD-NEXT: fld fs3, 0(sp) # 8-byte Folded Reload657; RV64IFD-NEXT: .cfi_restore ra658; RV64IFD-NEXT: .cfi_restore s0659; RV64IFD-NEXT: .cfi_restore fs0660; RV64IFD-NEXT: .cfi_restore fs1661; RV64IFD-NEXT: .cfi_restore fs2662; RV64IFD-NEXT: .cfi_restore fs3663; RV64IFD-NEXT: addi sp, sp, 48664; RV64IFD-NEXT: .cfi_def_cfa_offset 0665; RV64IFD-NEXT: ret666 %r = call <4 x float> @llvm.exp10.v4f32(<4 x float> %x)667 ret <4 x float> %r668}669 670; FIXME: Broken671; define <1 x double> @exp10_v1f64(<1 x double> %x) {672; %r = call <1 x double> @llvm.exp10.v1f64(<1 x double> %x)673; ret <1 x double> %r674; }675 676define <2 x double> @exp10_v2f64(<2 x double> %x) {677; RV32IFD-LABEL: exp10_v2f64:678; RV32IFD: # %bb.0:679; RV32IFD-NEXT: addi sp, sp, -32680; RV32IFD-NEXT: .cfi_def_cfa_offset 32681; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill682; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill683; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill684; RV32IFD-NEXT: .cfi_offset ra, -4685; RV32IFD-NEXT: .cfi_offset fs0, -16686; RV32IFD-NEXT: .cfi_offset fs1, -24687; RV32IFD-NEXT: fmv.d fs0, fa1688; RV32IFD-NEXT: call exp10689; RV32IFD-NEXT: fmv.d fs1, fa0690; RV32IFD-NEXT: fmv.d fa0, fs0691; RV32IFD-NEXT: call exp10692; RV32IFD-NEXT: fmv.d fa1, fa0693; RV32IFD-NEXT: fmv.d fa0, fs1694; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload695; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload696; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload697; RV32IFD-NEXT: .cfi_restore ra698; RV32IFD-NEXT: .cfi_restore fs0699; RV32IFD-NEXT: .cfi_restore fs1700; RV32IFD-NEXT: addi sp, sp, 32701; RV32IFD-NEXT: .cfi_def_cfa_offset 0702; RV32IFD-NEXT: ret703;704; RV64IFD-LABEL: exp10_v2f64:705; RV64IFD: # %bb.0:706; RV64IFD-NEXT: addi sp, sp, -32707; RV64IFD-NEXT: .cfi_def_cfa_offset 32708; RV64IFD-NEXT: sd ra, 24(sp) # 8-byte Folded Spill709; RV64IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill710; RV64IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill711; RV64IFD-NEXT: .cfi_offset ra, -8712; RV64IFD-NEXT: .cfi_offset fs0, -16713; RV64IFD-NEXT: .cfi_offset fs1, -24714; RV64IFD-NEXT: fmv.d fs0, fa1715; RV64IFD-NEXT: call exp10716; RV64IFD-NEXT: fmv.d fs1, fa0717; RV64IFD-NEXT: fmv.d fa0, fs0718; RV64IFD-NEXT: call exp10719; RV64IFD-NEXT: fmv.d fa1, fa0720; RV64IFD-NEXT: fmv.d fa0, fs1721; RV64IFD-NEXT: ld ra, 24(sp) # 8-byte Folded Reload722; RV64IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload723; RV64IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload724; RV64IFD-NEXT: .cfi_restore ra725; RV64IFD-NEXT: .cfi_restore fs0726; RV64IFD-NEXT: .cfi_restore fs1727; RV64IFD-NEXT: addi sp, sp, 32728; RV64IFD-NEXT: .cfi_def_cfa_offset 0729; RV64IFD-NEXT: ret730 %r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)731 ret <2 x double> %r732}733 734define <3 x double> @exp10_v3f64(<3 x double> %x) {735; RV32IFD-LABEL: exp10_v3f64:736; RV32IFD: # %bb.0:737; RV32IFD-NEXT: addi sp, sp, -32738; RV32IFD-NEXT: .cfi_def_cfa_offset 32739; RV32IFD-NEXT: sw ra, 28(sp) # 4-byte Folded Spill740; RV32IFD-NEXT: sw s0, 24(sp) # 4-byte Folded Spill741; RV32IFD-NEXT: fsd fs0, 16(sp) # 8-byte Folded Spill742; RV32IFD-NEXT: fsd fs1, 8(sp) # 8-byte Folded Spill743; RV32IFD-NEXT: fsd fs2, 0(sp) # 8-byte Folded Spill744; RV32IFD-NEXT: .cfi_offset ra, -4745; RV32IFD-NEXT: .cfi_offset s0, -8746; RV32IFD-NEXT: .cfi_offset fs0, -16747; RV32IFD-NEXT: .cfi_offset fs1, -24748; RV32IFD-NEXT: .cfi_offset fs2, -32749; RV32IFD-NEXT: fmv.d fs0, fa2750; RV32IFD-NEXT: fmv.d fs1, fa1751; RV32IFD-NEXT: mv s0, a0752; RV32IFD-NEXT: call exp10753; RV32IFD-NEXT: fmv.d fs2, fa0754; RV32IFD-NEXT: fmv.d fa0, fs1755; RV32IFD-NEXT: call exp10756; RV32IFD-NEXT: fmv.d fs1, fa0757; RV32IFD-NEXT: fmv.d fa0, fs0758; RV32IFD-NEXT: call exp10759; RV32IFD-NEXT: fsd fs2, 0(s0)760; RV32IFD-NEXT: fsd fs1, 8(s0)761; RV32IFD-NEXT: fsd fa0, 16(s0)762; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload763; RV32IFD-NEXT: lw s0, 24(sp) # 4-byte Folded Reload764; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload765; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload766; RV32IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload767; RV32IFD-NEXT: .cfi_restore ra768; RV32IFD-NEXT: .cfi_restore s0769; RV32IFD-NEXT: .cfi_restore fs0770; RV32IFD-NEXT: .cfi_restore fs1771; RV32IFD-NEXT: .cfi_restore fs2772; RV32IFD-NEXT: addi sp, sp, 32773; RV32IFD-NEXT: .cfi_def_cfa_offset 0774; RV32IFD-NEXT: ret775;776; RV64IFD-LABEL: exp10_v3f64:777; RV64IFD: # %bb.0:778; RV64IFD-NEXT: addi sp, sp, -48779; RV64IFD-NEXT: .cfi_def_cfa_offset 48780; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill781; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill782; RV64IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill783; RV64IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill784; RV64IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill785; RV64IFD-NEXT: .cfi_offset ra, -8786; RV64IFD-NEXT: .cfi_offset s0, -16787; RV64IFD-NEXT: .cfi_offset fs0, -24788; RV64IFD-NEXT: .cfi_offset fs1, -32789; RV64IFD-NEXT: .cfi_offset fs2, -40790; RV64IFD-NEXT: fmv.d fs0, fa2791; RV64IFD-NEXT: fmv.d fs1, fa1792; RV64IFD-NEXT: mv s0, a0793; RV64IFD-NEXT: call exp10794; RV64IFD-NEXT: fmv.d fs2, fa0795; RV64IFD-NEXT: fmv.d fa0, fs1796; RV64IFD-NEXT: call exp10797; RV64IFD-NEXT: fmv.d fs1, fa0798; RV64IFD-NEXT: fmv.d fa0, fs0799; RV64IFD-NEXT: call exp10800; RV64IFD-NEXT: fsd fs2, 0(s0)801; RV64IFD-NEXT: fsd fs1, 8(s0)802; RV64IFD-NEXT: fsd fa0, 16(s0)803; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload804; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload805; RV64IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload806; RV64IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload807; RV64IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload808; RV64IFD-NEXT: .cfi_restore ra809; RV64IFD-NEXT: .cfi_restore s0810; RV64IFD-NEXT: .cfi_restore fs0811; RV64IFD-NEXT: .cfi_restore fs1812; RV64IFD-NEXT: .cfi_restore fs2813; RV64IFD-NEXT: addi sp, sp, 48814; RV64IFD-NEXT: .cfi_def_cfa_offset 0815; RV64IFD-NEXT: ret816 %r = call <3 x double> @llvm.exp10.v3f64(<3 x double> %x)817 ret <3 x double> %r818}819 820define <4 x double> @exp10_v4f64(<4 x double> %x) {821; RV32IFD-LABEL: exp10_v4f64:822; RV32IFD: # %bb.0:823; RV32IFD-NEXT: addi sp, sp, -48824; RV32IFD-NEXT: .cfi_def_cfa_offset 48825; RV32IFD-NEXT: sw ra, 44(sp) # 4-byte Folded Spill826; RV32IFD-NEXT: sw s0, 40(sp) # 4-byte Folded Spill827; RV32IFD-NEXT: fsd fs0, 32(sp) # 8-byte Folded Spill828; RV32IFD-NEXT: fsd fs1, 24(sp) # 8-byte Folded Spill829; RV32IFD-NEXT: fsd fs2, 16(sp) # 8-byte Folded Spill830; RV32IFD-NEXT: fsd fs3, 8(sp) # 8-byte Folded Spill831; RV32IFD-NEXT: .cfi_offset ra, -4832; RV32IFD-NEXT: .cfi_offset s0, -8833; RV32IFD-NEXT: .cfi_offset fs0, -16834; RV32IFD-NEXT: .cfi_offset fs1, -24835; RV32IFD-NEXT: .cfi_offset fs2, -32836; RV32IFD-NEXT: .cfi_offset fs3, -40837; RV32IFD-NEXT: fmv.d fs0, fa3838; RV32IFD-NEXT: fmv.d fs1, fa2839; RV32IFD-NEXT: fmv.d fs2, fa1840; RV32IFD-NEXT: mv s0, a0841; RV32IFD-NEXT: call exp10842; RV32IFD-NEXT: fmv.d fs3, fa0843; RV32IFD-NEXT: fmv.d fa0, fs2844; RV32IFD-NEXT: call exp10845; RV32IFD-NEXT: fmv.d fs2, fa0846; RV32IFD-NEXT: fmv.d fa0, fs1847; RV32IFD-NEXT: call exp10848; RV32IFD-NEXT: fmv.d fs1, fa0849; RV32IFD-NEXT: fmv.d fa0, fs0850; RV32IFD-NEXT: call exp10851; RV32IFD-NEXT: fsd fs3, 0(s0)852; RV32IFD-NEXT: fsd fs2, 8(s0)853; RV32IFD-NEXT: fsd fs1, 16(s0)854; RV32IFD-NEXT: fsd fa0, 24(s0)855; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload856; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload857; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload858; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload859; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload860; RV32IFD-NEXT: fld fs3, 8(sp) # 8-byte Folded Reload861; RV32IFD-NEXT: .cfi_restore ra862; RV32IFD-NEXT: .cfi_restore s0863; RV32IFD-NEXT: .cfi_restore fs0864; RV32IFD-NEXT: .cfi_restore fs1865; RV32IFD-NEXT: .cfi_restore fs2866; RV32IFD-NEXT: .cfi_restore fs3867; RV32IFD-NEXT: addi sp, sp, 48868; RV32IFD-NEXT: .cfi_def_cfa_offset 0869; RV32IFD-NEXT: ret870;871; RV64IFD-LABEL: exp10_v4f64:872; RV64IFD: # %bb.0:873; RV64IFD-NEXT: addi sp, sp, -48874; RV64IFD-NEXT: .cfi_def_cfa_offset 48875; RV64IFD-NEXT: sd ra, 40(sp) # 8-byte Folded Spill876; RV64IFD-NEXT: sd s0, 32(sp) # 8-byte Folded Spill877; RV64IFD-NEXT: fsd fs0, 24(sp) # 8-byte Folded Spill878; RV64IFD-NEXT: fsd fs1, 16(sp) # 8-byte Folded Spill879; RV64IFD-NEXT: fsd fs2, 8(sp) # 8-byte Folded Spill880; RV64IFD-NEXT: fsd fs3, 0(sp) # 8-byte Folded Spill881; RV64IFD-NEXT: .cfi_offset ra, -8882; RV64IFD-NEXT: .cfi_offset s0, -16883; RV64IFD-NEXT: .cfi_offset fs0, -24884; RV64IFD-NEXT: .cfi_offset fs1, -32885; RV64IFD-NEXT: .cfi_offset fs2, -40886; RV64IFD-NEXT: .cfi_offset fs3, -48887; RV64IFD-NEXT: fmv.d fs0, fa3888; RV64IFD-NEXT: fmv.d fs1, fa2889; RV64IFD-NEXT: fmv.d fs2, fa1890; RV64IFD-NEXT: mv s0, a0891; RV64IFD-NEXT: call exp10892; RV64IFD-NEXT: fmv.d fs3, fa0893; RV64IFD-NEXT: fmv.d fa0, fs2894; RV64IFD-NEXT: call exp10895; RV64IFD-NEXT: fmv.d fs2, fa0896; RV64IFD-NEXT: fmv.d fa0, fs1897; RV64IFD-NEXT: call exp10898; RV64IFD-NEXT: fmv.d fs1, fa0899; RV64IFD-NEXT: fmv.d fa0, fs0900; RV64IFD-NEXT: call exp10901; RV64IFD-NEXT: fsd fs3, 0(s0)902; RV64IFD-NEXT: fsd fs2, 8(s0)903; RV64IFD-NEXT: fsd fs1, 16(s0)904; RV64IFD-NEXT: fsd fa0, 24(s0)905; RV64IFD-NEXT: ld ra, 40(sp) # 8-byte Folded Reload906; RV64IFD-NEXT: ld s0, 32(sp) # 8-byte Folded Reload907; RV64IFD-NEXT: fld fs0, 24(sp) # 8-byte Folded Reload908; RV64IFD-NEXT: fld fs1, 16(sp) # 8-byte Folded Reload909; RV64IFD-NEXT: fld fs2, 8(sp) # 8-byte Folded Reload910; RV64IFD-NEXT: fld fs3, 0(sp) # 8-byte Folded Reload911; RV64IFD-NEXT: .cfi_restore ra912; RV64IFD-NEXT: .cfi_restore s0913; RV64IFD-NEXT: .cfi_restore fs0914; RV64IFD-NEXT: .cfi_restore fs1915; RV64IFD-NEXT: .cfi_restore fs2916; RV64IFD-NEXT: .cfi_restore fs3917; RV64IFD-NEXT: addi sp, sp, 48918; RV64IFD-NEXT: .cfi_def_cfa_offset 0919; RV64IFD-NEXT: ret920 %r = call <4 x double> @llvm.exp10.v4f64(<4 x double> %x)921 ret <4 x double> %r922}923;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:924; CHECK: {{.*}}925