brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · fcbbb82 Raw
280 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -target-abi=lp64 -verify-machineinstrs < %s \3; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64I4; RUN: llc -mtriple=riscv64 -mattr=+f -target-abi=lp64f -verify-machineinstrs < %s \5; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64IF6; RUN: llc -mtriple=riscv64 -mattr=+zfinx -target-abi=lp64 -verify-machineinstrs < %s \7; RUN:   | FileCheck %s -check-prefixes=CHECK,RV64IZFINX8 9define i128 @fptosi_f32_to_i128(float %a) nounwind {10; CHECK-LABEL: fptosi_f32_to_i128:11; CHECK:       # %bb.0:12; CHECK-NEXT:    addi sp, sp, -1613; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill14; CHECK-NEXT:    call __fixsfti15; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload16; CHECK-NEXT:    addi sp, sp, 1617; CHECK-NEXT:    ret18  %1 = fptosi float %a to i12819  ret i128 %120}21 22define i128 @fptoui_f32_to_i128(float %a) nounwind {23; CHECK-LABEL: fptoui_f32_to_i128:24; CHECK:       # %bb.0:25; CHECK-NEXT:    addi sp, sp, -1626; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill27; CHECK-NEXT:    call __fixunssfti28; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload29; CHECK-NEXT:    addi sp, sp, 1630; CHECK-NEXT:    ret31  %1 = fptoui float %a to i12832  ret i128 %133}34 35define float @sitofp_i128_to_f32(i128 %a) nounwind {36; CHECK-LABEL: sitofp_i128_to_f32:37; CHECK:       # %bb.0:38; CHECK-NEXT:    addi sp, sp, -1639; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill40; CHECK-NEXT:    call __floattisf41; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload42; CHECK-NEXT:    addi sp, sp, 1643; CHECK-NEXT:    ret44  %1 = sitofp i128 %a to float45  ret float %146}47 48define float @uitofp_i128_to_f32(i128 %a) nounwind {49; CHECK-LABEL: uitofp_i128_to_f32:50; CHECK:       # %bb.0:51; CHECK-NEXT:    addi sp, sp, -1652; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill53; CHECK-NEXT:    call __floatuntisf54; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload55; CHECK-NEXT:    addi sp, sp, 1656; CHECK-NEXT:    ret57  %1 = uitofp i128 %a to float58  ret float %159}60 61define i128 @fptosi_sat_f32_to_i128(float %a) nounwind {62; RV64I-LABEL: fptosi_sat_f32_to_i128:63; RV64I:       # %bb.0:64; RV64I-NEXT:    addi sp, sp, -6465; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill66; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill67; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill68; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill69; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill70; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill71; RV64I-NEXT:    sd s5, 8(sp) # 8-byte Folded Spill72; RV64I-NEXT:    mv s1, a073; RV64I-NEXT:    lui a1, 104448074; RV64I-NEXT:    call __gesf275; RV64I-NEXT:    mv s2, a076; RV64I-NEXT:    mv a0, s177; RV64I-NEXT:    call __fixsfti78; RV64I-NEXT:    mv s0, a079; RV64I-NEXT:    mv s3, a180; RV64I-NEXT:    li s5, -181; RV64I-NEXT:    bgez s2, .LBB4_282; RV64I-NEXT:  # %bb.1:83; RV64I-NEXT:    slli s3, s5, 6384; RV64I-NEXT:  .LBB4_2:85; RV64I-NEXT:    lui a1, 52019286; RV64I-NEXT:    addi a1, a1, -187; RV64I-NEXT:    mv a0, s188; RV64I-NEXT:    call __gtsf289; RV64I-NEXT:    mv s4, a090; RV64I-NEXT:    blez a0, .LBB4_491; RV64I-NEXT:  # %bb.3:92; RV64I-NEXT:    srli s3, s5, 193; RV64I-NEXT:  .LBB4_4:94; RV64I-NEXT:    mv a0, s195; RV64I-NEXT:    mv a1, s196; RV64I-NEXT:    call __unordsf297; RV64I-NEXT:    snez a0, a098; RV64I-NEXT:    srli a1, s2, 6399; RV64I-NEXT:    sgtz a2, s4100; RV64I-NEXT:    addi a0, a0, -1101; RV64I-NEXT:    addi a3, a1, -1102; RV64I-NEXT:    and a1, a0, s3103; RV64I-NEXT:    and a3, a3, s0104; RV64I-NEXT:    neg a2, a2105; RV64I-NEXT:    or a2, a2, a3106; RV64I-NEXT:    and a0, a0, a2107; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload108; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload109; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload110; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload111; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload112; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload113; RV64I-NEXT:    ld s5, 8(sp) # 8-byte Folded Reload114; RV64I-NEXT:    addi sp, sp, 64115; RV64I-NEXT:    ret116;117; RV64IF-LABEL: fptosi_sat_f32_to_i128:118; RV64IF:       # %bb.0:119; RV64IF-NEXT:    addi sp, sp, -32120; RV64IF-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill121; RV64IF-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill122; RV64IF-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill123; RV64IF-NEXT:    fmv.s fs0, fa0124; RV64IF-NEXT:    lui a0, 1044480125; RV64IF-NEXT:    fmv.w.x fa5, a0126; RV64IF-NEXT:    fle.s s0, fa5, fa0127; RV64IF-NEXT:    call __fixsfti128; RV64IF-NEXT:    li a2, -1129; RV64IF-NEXT:    bnez s0, .LBB4_2130; RV64IF-NEXT:  # %bb.1:131; RV64IF-NEXT:    slli a1, a2, 63132; RV64IF-NEXT:  .LBB4_2:133; RV64IF-NEXT:    lui a3, 520192134; RV64IF-NEXT:    addi a3, a3, -1135; RV64IF-NEXT:    fmv.w.x fa5, a3136; RV64IF-NEXT:    flt.s a3, fa5, fs0137; RV64IF-NEXT:    beqz a3, .LBB4_4138; RV64IF-NEXT:  # %bb.3:139; RV64IF-NEXT:    srli a1, a2, 1140; RV64IF-NEXT:  .LBB4_4:141; RV64IF-NEXT:    feq.s a2, fs0, fs0142; RV64IF-NEXT:    neg a4, s0143; RV64IF-NEXT:    neg a3, a3144; RV64IF-NEXT:    neg a2, a2145; RV64IF-NEXT:    and a0, a4, a0146; RV64IF-NEXT:    and a1, a2, a1147; RV64IF-NEXT:    or a0, a3, a0148; RV64IF-NEXT:    and a0, a2, a0149; RV64IF-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload150; RV64IF-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload151; RV64IF-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload152; RV64IF-NEXT:    addi sp, sp, 32153; RV64IF-NEXT:    ret154;155; RV64IZFINX-LABEL: fptosi_sat_f32_to_i128:156; RV64IZFINX:       # %bb.0:157; RV64IZFINX-NEXT:    addi sp, sp, -32158; RV64IZFINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill159; RV64IZFINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill160; RV64IZFINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill161; RV64IZFINX-NEXT:    mv s0, a0162; RV64IZFINX-NEXT:    lui a0, 1044480163; RV64IZFINX-NEXT:    fle.s s1, a0, s0164; RV64IZFINX-NEXT:    mv a0, s0165; RV64IZFINX-NEXT:    call __fixsfti166; RV64IZFINX-NEXT:    li a2, -1167; RV64IZFINX-NEXT:    bnez s1, .LBB4_2168; RV64IZFINX-NEXT:  # %bb.1:169; RV64IZFINX-NEXT:    slli a1, a2, 63170; RV64IZFINX-NEXT:  .LBB4_2:171; RV64IZFINX-NEXT:    lui a3, 520192172; RV64IZFINX-NEXT:    addi a3, a3, -1173; RV64IZFINX-NEXT:    flt.s a3, a3, s0174; RV64IZFINX-NEXT:    beqz a3, .LBB4_4175; RV64IZFINX-NEXT:  # %bb.3:176; RV64IZFINX-NEXT:    srli a1, a2, 1177; RV64IZFINX-NEXT:  .LBB4_4:178; RV64IZFINX-NEXT:    feq.s a2, s0, s0179; RV64IZFINX-NEXT:    neg a4, s1180; RV64IZFINX-NEXT:    neg a3, a3181; RV64IZFINX-NEXT:    neg a2, a2182; RV64IZFINX-NEXT:    and a0, a4, a0183; RV64IZFINX-NEXT:    and a1, a2, a1184; RV64IZFINX-NEXT:    or a0, a3, a0185; RV64IZFINX-NEXT:    and a0, a2, a0186; RV64IZFINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload187; RV64IZFINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload188; RV64IZFINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload189; RV64IZFINX-NEXT:    addi sp, sp, 32190; RV64IZFINX-NEXT:    ret191  %1 = tail call i128 @llvm.fptosi.sat.i128.f32(float %a)192  ret i128 %1193}194 195define i128 @fptoui_sat_f32_to_i128(float %a) nounwind {196; RV64I-LABEL: fptoui_sat_f32_to_i128:197; RV64I:       # %bb.0:198; RV64I-NEXT:    addi sp, sp, -32199; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill200; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill201; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill202; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill203; RV64I-NEXT:    mv s0, a0204; RV64I-NEXT:    lui a1, 522240205; RV64I-NEXT:    addi a1, a1, -1206; RV64I-NEXT:    call __gtsf2207; RV64I-NEXT:    sgtz a0, a0208; RV64I-NEXT:    neg s1, a0209; RV64I-NEXT:    mv a0, s0210; RV64I-NEXT:    li a1, 0211; RV64I-NEXT:    call __gesf2212; RV64I-NEXT:    srli a0, a0, 63213; RV64I-NEXT:    addi s2, a0, -1214; RV64I-NEXT:    mv a0, s0215; RV64I-NEXT:    call __fixunssfti216; RV64I-NEXT:    and a0, s2, a0217; RV64I-NEXT:    and a1, s2, a1218; RV64I-NEXT:    or a0, s1, a0219; RV64I-NEXT:    or a1, s1, a1220; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload221; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload222; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload223; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload224; RV64I-NEXT:    addi sp, sp, 32225; RV64I-NEXT:    ret226;227; RV64IF-LABEL: fptoui_sat_f32_to_i128:228; RV64IF:       # %bb.0:229; RV64IF-NEXT:    addi sp, sp, -32230; RV64IF-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill231; RV64IF-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill232; RV64IF-NEXT:    fsw fs0, 12(sp) # 4-byte Folded Spill233; RV64IF-NEXT:    fmv.s fs0, fa0234; RV64IF-NEXT:    fmv.w.x fa5, zero235; RV64IF-NEXT:    fle.s a0, fa5, fa0236; RV64IF-NEXT:    neg s0, a0237; RV64IF-NEXT:    call __fixunssfti238; RV64IF-NEXT:    and a0, s0, a0239; RV64IF-NEXT:    lui a2, 522240240; RV64IF-NEXT:    and a1, s0, a1241; RV64IF-NEXT:    addi a2, a2, -1242; RV64IF-NEXT:    fmv.w.x fa5, a2243; RV64IF-NEXT:    flt.s a2, fa5, fs0244; RV64IF-NEXT:    neg a2, a2245; RV64IF-NEXT:    or a0, a2, a0246; RV64IF-NEXT:    or a1, a2, a1247; RV64IF-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload248; RV64IF-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload249; RV64IF-NEXT:    flw fs0, 12(sp) # 4-byte Folded Reload250; RV64IF-NEXT:    addi sp, sp, 32251; RV64IF-NEXT:    ret252;253; RV64IZFINX-LABEL: fptoui_sat_f32_to_i128:254; RV64IZFINX:       # %bb.0:255; RV64IZFINX-NEXT:    addi sp, sp, -32256; RV64IZFINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill257; RV64IZFINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill258; RV64IZFINX-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill259; RV64IZFINX-NEXT:    mv s0, a0260; RV64IZFINX-NEXT:    fle.s a0, zero, a0261; RV64IZFINX-NEXT:    neg s1, a0262; RV64IZFINX-NEXT:    mv a0, s0263; RV64IZFINX-NEXT:    call __fixunssfti264; RV64IZFINX-NEXT:    and a0, s1, a0265; RV64IZFINX-NEXT:    lui a2, 522240266; RV64IZFINX-NEXT:    and a1, s1, a1267; RV64IZFINX-NEXT:    addi a2, a2, -1268; RV64IZFINX-NEXT:    flt.s a2, a2, s0269; RV64IZFINX-NEXT:    neg a2, a2270; RV64IZFINX-NEXT:    or a0, a2, a0271; RV64IZFINX-NEXT:    or a1, a2, a1272; RV64IZFINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload273; RV64IZFINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload274; RV64IZFINX-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload275; RV64IZFINX-NEXT:    addi sp, sp, 32276; RV64IZFINX-NEXT:    ret277  %1 = tail call i128 @llvm.fptoui.sat.i128.f32(float %a)278  ret i128 %1279}280