brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.8 KiB · 7ff1d76 Raw
362 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -verify-machineinstrs \3; RUN:   -target-abi lp64 < %s | FileCheck %s -check-prefixes=CHECK,RV64I4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \5; RUN:   -target-abi lp64f < %s | FileCheck %s -check-prefixes=CHECK,RV64IZFH6; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \7; RUN:   -target-abi lp64 < %s | FileCheck %s -check-prefixes=CHECK,RV64IZHINX8 9define half @sitofp_i128_to_f16(i128 %a) nounwind {10; RV64I-LABEL: sitofp_i128_to_f16:11; RV64I:       # %bb.0:12; RV64I-NEXT:    addi sp, sp, -1613; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill14; RV64I-NEXT:    call __floattisf15; RV64I-NEXT:    call __truncsfhf216; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload17; RV64I-NEXT:    addi sp, sp, 1618; RV64I-NEXT:    ret19;20; RV64IZFH-LABEL: sitofp_i128_to_f16:21; RV64IZFH:       # %bb.0:22; RV64IZFH-NEXT:    addi sp, sp, -1623; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill24; RV64IZFH-NEXT:    call __floattihf25; RV64IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload26; RV64IZFH-NEXT:    addi sp, sp, 1627; RV64IZFH-NEXT:    ret28;29; RV64IZHINX-LABEL: sitofp_i128_to_f16:30; RV64IZHINX:       # %bb.0:31; RV64IZHINX-NEXT:    addi sp, sp, -1632; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill33; RV64IZHINX-NEXT:    call __floattihf34; RV64IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload35; RV64IZHINX-NEXT:    addi sp, sp, 1636; RV64IZHINX-NEXT:    ret37  %1 = sitofp i128 %a to half38  ret half %139}40 41define half @uitofp_i128_to_f16(i128 %a) nounwind {42; RV64I-LABEL: uitofp_i128_to_f16:43; RV64I:       # %bb.0:44; RV64I-NEXT:    addi sp, sp, -1645; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill46; RV64I-NEXT:    call __floatuntisf47; RV64I-NEXT:    call __truncsfhf248; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload49; RV64I-NEXT:    addi sp, sp, 1650; RV64I-NEXT:    ret51;52; RV64IZFH-LABEL: uitofp_i128_to_f16:53; RV64IZFH:       # %bb.0:54; RV64IZFH-NEXT:    addi sp, sp, -1655; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill56; RV64IZFH-NEXT:    call __floatuntihf57; RV64IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload58; RV64IZFH-NEXT:    addi sp, sp, 1659; RV64IZFH-NEXT:    ret60;61; RV64IZHINX-LABEL: uitofp_i128_to_f16:62; RV64IZHINX:       # %bb.0:63; RV64IZHINX-NEXT:    addi sp, sp, -1664; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill65; RV64IZHINX-NEXT:    call __floatuntihf66; RV64IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload67; RV64IZHINX-NEXT:    addi sp, sp, 1668; RV64IZHINX-NEXT:    ret69  %1 = uitofp i128 %a to half70  ret half %171}72 73define i128 @fptosi_f16_to_i128(half %a) nounwind {74; RV64I-LABEL: fptosi_f16_to_i128:75; RV64I:       # %bb.0:76; RV64I-NEXT:    addi sp, sp, -1677; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill78; RV64I-NEXT:    call __extendhfsf279; RV64I-NEXT:    call __fixsfti80; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload81; RV64I-NEXT:    addi sp, sp, 1682; RV64I-NEXT:    ret83;84; RV64IZFH-LABEL: fptosi_f16_to_i128:85; RV64IZFH:       # %bb.0:86; RV64IZFH-NEXT:    addi sp, sp, -1687; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill88; RV64IZFH-NEXT:    call __fixhfti89; RV64IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload90; RV64IZFH-NEXT:    addi sp, sp, 1691; RV64IZFH-NEXT:    ret92;93; RV64IZHINX-LABEL: fptosi_f16_to_i128:94; RV64IZHINX:       # %bb.0:95; RV64IZHINX-NEXT:    addi sp, sp, -1696; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill97; RV64IZHINX-NEXT:    call __fixhfti98; RV64IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload99; RV64IZHINX-NEXT:    addi sp, sp, 16100; RV64IZHINX-NEXT:    ret101  %1 = fptosi half %a to i128102  ret i128 %1103}104 105define i128 @fptoui_f16_to_i128(half %a) nounwind {106; RV64I-LABEL: fptoui_f16_to_i128:107; RV64I:       # %bb.0:108; RV64I-NEXT:    addi sp, sp, -16109; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill110; RV64I-NEXT:    call __extendhfsf2111; RV64I-NEXT:    call __fixunssfti112; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload113; RV64I-NEXT:    addi sp, sp, 16114; RV64I-NEXT:    ret115;116; RV64IZFH-LABEL: fptoui_f16_to_i128:117; RV64IZFH:       # %bb.0:118; RV64IZFH-NEXT:    addi sp, sp, -16119; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill120; RV64IZFH-NEXT:    call __fixunshfti121; RV64IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload122; RV64IZFH-NEXT:    addi sp, sp, 16123; RV64IZFH-NEXT:    ret124;125; RV64IZHINX-LABEL: fptoui_f16_to_i128:126; RV64IZHINX:       # %bb.0:127; RV64IZHINX-NEXT:    addi sp, sp, -16128; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill129; RV64IZHINX-NEXT:    call __fixunshfti130; RV64IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload131; RV64IZHINX-NEXT:    addi sp, sp, 16132; RV64IZHINX-NEXT:    ret133  %1 = fptoui half %a to i128134  ret i128 %1135}136 137define i128 @fptosi_sat_f16_to_i128(half %a) nounwind {138; RV64I-LABEL: fptosi_sat_f16_to_i128:139; RV64I:       # %bb.0:140; RV64I-NEXT:    addi sp, sp, -64141; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill142; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill143; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill144; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill145; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill146; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill147; RV64I-NEXT:    sd s5, 8(sp) # 8-byte Folded Spill148; RV64I-NEXT:    call __extendhfsf2149; RV64I-NEXT:    mv s2, a0150; RV64I-NEXT:    lui a1, 1044480151; RV64I-NEXT:    call __gesf2152; RV64I-NEXT:    mv s0, a0153; RV64I-NEXT:    mv a0, s2154; RV64I-NEXT:    call __fixsfti155; RV64I-NEXT:    mv s1, a0156; RV64I-NEXT:    mv s3, a1157; RV64I-NEXT:    li s5, -1158; RV64I-NEXT:    bgez s0, .LBB4_2159; RV64I-NEXT:  # %bb.1:160; RV64I-NEXT:    slli s3, s5, 63161; RV64I-NEXT:  .LBB4_2:162; RV64I-NEXT:    lui a1, 520192163; RV64I-NEXT:    addi a1, a1, -1164; RV64I-NEXT:    mv a0, s2165; RV64I-NEXT:    call __gtsf2166; RV64I-NEXT:    mv s4, a0167; RV64I-NEXT:    blez a0, .LBB4_4168; RV64I-NEXT:  # %bb.3:169; RV64I-NEXT:    srli s3, s5, 1170; RV64I-NEXT:  .LBB4_4:171; RV64I-NEXT:    mv a0, s2172; RV64I-NEXT:    mv a1, s2173; RV64I-NEXT:    call __unordsf2174; RV64I-NEXT:    snez a0, a0175; RV64I-NEXT:    sgtz a1, s4176; RV64I-NEXT:    srli s0, s0, 63177; RV64I-NEXT:    addi a0, a0, -1178; RV64I-NEXT:    neg a2, a1179; RV64I-NEXT:    addi s0, s0, -1180; RV64I-NEXT:    and a1, a0, s3181; RV64I-NEXT:    and s0, s0, s1182; RV64I-NEXT:    or a2, a2, s0183; RV64I-NEXT:    and a0, a0, a2184; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload185; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload186; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload187; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload188; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload189; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload190; RV64I-NEXT:    ld s5, 8(sp) # 8-byte Folded Reload191; RV64I-NEXT:    addi sp, sp, 64192; RV64I-NEXT:    ret193;194; RV64IZFH-LABEL: fptosi_sat_f16_to_i128:195; RV64IZFH:       # %bb.0:196; RV64IZFH-NEXT:    addi sp, sp, -32197; RV64IZFH-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill198; RV64IZFH-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill199; RV64IZFH-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill200; RV64IZFH-NEXT:    fcvt.s.h fs0, fa0201; RV64IZFH-NEXT:    lui a0, 1044480202; RV64IZFH-NEXT:    fmv.w.x fa5, a0203; RV64IZFH-NEXT:    fle.s s0, fa5, fs0204; RV64IZFH-NEXT:    fmv.s fa0, fs0205; RV64IZFH-NEXT:    call __fixsfti206; RV64IZFH-NEXT:    li a2, -1207; RV64IZFH-NEXT:    bnez s0, .LBB4_2208; RV64IZFH-NEXT:  # %bb.1:209; RV64IZFH-NEXT:    slli a1, a2, 63210; RV64IZFH-NEXT:  .LBB4_2:211; RV64IZFH-NEXT:    lui a3, 520192212; RV64IZFH-NEXT:    addi a3, a3, -1213; RV64IZFH-NEXT:    fmv.w.x fa5, a3214; RV64IZFH-NEXT:    flt.s a3, fa5, fs0215; RV64IZFH-NEXT:    beqz a3, .LBB4_4216; RV64IZFH-NEXT:  # %bb.3:217; RV64IZFH-NEXT:    srli a1, a2, 1218; RV64IZFH-NEXT:  .LBB4_4:219; RV64IZFH-NEXT:    feq.s a2, fs0, fs0220; RV64IZFH-NEXT:    neg a4, s0221; RV64IZFH-NEXT:    neg a3, a3222; RV64IZFH-NEXT:    neg a2, a2223; RV64IZFH-NEXT:    and a0, a4, a0224; RV64IZFH-NEXT:    and a1, a2, a1225; RV64IZFH-NEXT:    or a0, a3, a0226; RV64IZFH-NEXT:    and a0, a2, a0227; RV64IZFH-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload228; RV64IZFH-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload229; RV64IZFH-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload230; RV64IZFH-NEXT:    addi sp, sp, 32231; RV64IZFH-NEXT:    ret232;233; RV64IZHINX-LABEL: fptosi_sat_f16_to_i128:234; RV64IZHINX:       # %bb.0:235; RV64IZHINX-NEXT:    addi sp, sp, -32236; RV64IZHINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill237; RV64IZHINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill238; RV64IZHINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill239; RV64IZHINX-NEXT:    fcvt.s.h s0, a0240; RV64IZHINX-NEXT:    lui a0, 1044480241; RV64IZHINX-NEXT:    fle.s s1, a0, s0242; RV64IZHINX-NEXT:    mv a0, s0243; RV64IZHINX-NEXT:    call __fixsfti244; RV64IZHINX-NEXT:    li a2, -1245; RV64IZHINX-NEXT:    bnez s1, .LBB4_2246; RV64IZHINX-NEXT:  # %bb.1:247; RV64IZHINX-NEXT:    slli a1, a2, 63248; RV64IZHINX-NEXT:  .LBB4_2:249; RV64IZHINX-NEXT:    lui a3, 520192250; RV64IZHINX-NEXT:    addi a3, a3, -1251; RV64IZHINX-NEXT:    flt.s a3, a3, s0252; RV64IZHINX-NEXT:    beqz a3, .LBB4_4253; RV64IZHINX-NEXT:  # %bb.3:254; RV64IZHINX-NEXT:    srli a1, a2, 1255; RV64IZHINX-NEXT:  .LBB4_4:256; RV64IZHINX-NEXT:    feq.s a2, s0, s0257; RV64IZHINX-NEXT:    neg a4, s1258; RV64IZHINX-NEXT:    neg a3, a3259; RV64IZHINX-NEXT:    neg a2, a2260; RV64IZHINX-NEXT:    and a0, a4, a0261; RV64IZHINX-NEXT:    and a1, a2, a1262; RV64IZHINX-NEXT:    or a0, a3, a0263; RV64IZHINX-NEXT:    and a0, a2, a0264; RV64IZHINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload265; RV64IZHINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload266; RV64IZHINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload267; RV64IZHINX-NEXT:    addi sp, sp, 32268; RV64IZHINX-NEXT:    ret269  %1 = tail call i128 @llvm.fptosi.sat.i128.f16(half %a)270  ret i128 %1271}272 273define i128 @fptoui_sat_f16_to_i128(half %a) nounwind {274; RV64I-LABEL: fptoui_sat_f16_to_i128:275; RV64I:       # %bb.0:276; RV64I-NEXT:    addi sp, sp, -32277; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill278; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill279; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill280; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill281; RV64I-NEXT:    call __extendhfsf2282; RV64I-NEXT:    mv s0, a0283; RV64I-NEXT:    lui a1, 522240284; RV64I-NEXT:    addi a1, a1, -1285; RV64I-NEXT:    call __gtsf2286; RV64I-NEXT:    sgtz a0, a0287; RV64I-NEXT:    neg s1, a0288; RV64I-NEXT:    mv a0, s0289; RV64I-NEXT:    li a1, 0290; RV64I-NEXT:    call __gesf2291; RV64I-NEXT:    srli a0, a0, 63292; RV64I-NEXT:    addi s2, a0, -1293; RV64I-NEXT:    mv a0, s0294; RV64I-NEXT:    call __fixunssfti295; RV64I-NEXT:    and a0, s2, a0296; RV64I-NEXT:    and a1, s2, a1297; RV64I-NEXT:    or a0, s1, a0298; RV64I-NEXT:    or a1, s1, a1299; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload300; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload301; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload302; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload303; RV64I-NEXT:    addi sp, sp, 32304; RV64I-NEXT:    ret305;306; RV64IZFH-LABEL: fptoui_sat_f16_to_i128:307; RV64IZFH:       # %bb.0:308; RV64IZFH-NEXT:    addi sp, sp, -32309; RV64IZFH-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill310; RV64IZFH-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill311; RV64IZFH-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill312; RV64IZFH-NEXT:    fcvt.s.h fs0, fa0313; RV64IZFH-NEXT:    fmv.w.x fa5, zero314; RV64IZFH-NEXT:    fle.s a0, fa5, fs0315; RV64IZFH-NEXT:    neg s0, a0316; RV64IZFH-NEXT:    fmv.s fa0, fs0317; RV64IZFH-NEXT:    call __fixunssfti318; RV64IZFH-NEXT:    and a0, s0, a0319; RV64IZFH-NEXT:    lui a2, 522240320; RV64IZFH-NEXT:    and a1, s0, a1321; RV64IZFH-NEXT:    addi a2, a2, -1322; RV64IZFH-NEXT:    fmv.w.x fa5, a2323; RV64IZFH-NEXT:    flt.s a2, fa5, fs0324; RV64IZFH-NEXT:    neg a2, a2325; RV64IZFH-NEXT:    or a0, a2, a0326; RV64IZFH-NEXT:    or a1, a2, a1327; RV64IZFH-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload328; RV64IZFH-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload329; RV64IZFH-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload330; RV64IZFH-NEXT:    addi sp, sp, 32331; RV64IZFH-NEXT:    ret332;333; RV64IZHINX-LABEL: fptoui_sat_f16_to_i128:334; RV64IZHINX:       # %bb.0:335; RV64IZHINX-NEXT:    addi sp, sp, -32336; RV64IZHINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill337; RV64IZHINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill338; RV64IZHINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill339; RV64IZHINX-NEXT:    fcvt.s.h s0, a0340; RV64IZHINX-NEXT:    fle.s a0, zero, s0341; RV64IZHINX-NEXT:    neg s1, a0342; RV64IZHINX-NEXT:    mv a0, s0343; RV64IZHINX-NEXT:    call __fixunssfti344; RV64IZHINX-NEXT:    and a0, s1, a0345; RV64IZHINX-NEXT:    lui a2, 522240346; RV64IZHINX-NEXT:    and a1, s1, a1347; RV64IZHINX-NEXT:    addi a2, a2, -1348; RV64IZHINX-NEXT:    flt.s a2, a2, s0349; RV64IZHINX-NEXT:    neg a2, a2350; RV64IZHINX-NEXT:    or a0, a2, a0351; RV64IZHINX-NEXT:    or a1, a2, a1352; RV64IZHINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload353; RV64IZHINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload354; RV64IZHINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload355; RV64IZHINX-NEXT:    addi sp, sp, 32356; RV64IZHINX-NEXT:    ret357  %1 = tail call i128 @llvm.fptoui.sat.i128.f16(half %a)358  ret i128 %1359}360;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:361; CHECK: {{.*}}362