brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · 968c061 Raw
347 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5define zeroext i1 @smuloi64(i64 %v1, i64 %v2, ptr %res) {6; LA32-LABEL: smuloi64:7; LA32:       # %bb.0:8; LA32-NEXT:    mulh.wu $a5, $a0, $a29; LA32-NEXT:    mul.w $a6, $a1, $a210; LA32-NEXT:    add.w $a5, $a6, $a511; LA32-NEXT:    sltu $a6, $a5, $a612; LA32-NEXT:    mulh.wu $a7, $a1, $a213; LA32-NEXT:    srai.w $t0, $a1, 3114; LA32-NEXT:    mul.w $t0, $t0, $a215; LA32-NEXT:    add.w $a7, $a7, $t016; LA32-NEXT:    add.w $a6, $a7, $a617; LA32-NEXT:    mulh.wu $a7, $a0, $a318; LA32-NEXT:    srai.w $t0, $a3, 3119; LA32-NEXT:    mul.w $t0, $a0, $t020; LA32-NEXT:    add.w $a7, $a7, $t021; LA32-NEXT:    mul.w $t0, $a0, $a322; LA32-NEXT:    add.w $a5, $t0, $a523; LA32-NEXT:    sltu $t0, $a5, $t024; LA32-NEXT:    add.w $a7, $a7, $t025; LA32-NEXT:    add.w $t0, $a6, $a726; LA32-NEXT:    sltu $t1, $t0, $a627; LA32-NEXT:    srai.w $a6, $a6, 3128; LA32-NEXT:    srai.w $a7, $a7, 3129; LA32-NEXT:    add.w $a6, $a6, $a730; LA32-NEXT:    add.w $a6, $a6, $t131; LA32-NEXT:    mulh.w $a7, $a1, $a332; LA32-NEXT:    add.w $a6, $a7, $a633; LA32-NEXT:    mul.w $a1, $a1, $a334; LA32-NEXT:    add.w $a3, $a1, $t035; LA32-NEXT:    sltu $a1, $a3, $a136; LA32-NEXT:    add.w $a1, $a6, $a137; LA32-NEXT:    srai.w $a6, $a5, 3138; LA32-NEXT:    xor $a1, $a1, $a639; LA32-NEXT:    xor $a3, $a3, $a640; LA32-NEXT:    or $a1, $a3, $a141; LA32-NEXT:    sltu $a1, $zero, $a142; LA32-NEXT:    mul.w $a0, $a0, $a243; LA32-NEXT:    st.w $a0, $a4, 044; LA32-NEXT:    st.w $a5, $a4, 445; LA32-NEXT:    move $a0, $a146; LA32-NEXT:    ret47;48; LA64-LABEL: smuloi64:49; LA64:       # %bb.0:50; LA64-NEXT:    mulh.d $a3, $a0, $a151; LA64-NEXT:    mul.d $a1, $a0, $a152; LA64-NEXT:    srai.d $a0, $a1, 6353; LA64-NEXT:    xor $a0, $a3, $a054; LA64-NEXT:    sltu $a0, $zero, $a055; LA64-NEXT:    st.d $a1, $a2, 056; LA64-NEXT:    ret57  %t = call {i64, i1} @llvm.smul.with.overflow.i64(i64 %v1, i64 %v2)58  %val = extractvalue {i64, i1} %t, 059  %obit = extractvalue {i64, i1} %t, 160  store i64 %val, ptr %res61  ret i1 %obit62}63 64define zeroext i1 @smuloi128(i128 %v1, i128 %v2, ptr %res) {65; LA32-LABEL: smuloi128:66; LA32:       # %bb.0:67; LA32-NEXT:    addi.w $sp, $sp, -4868; LA32-NEXT:    .cfi_def_cfa_offset 4869; LA32-NEXT:    st.w $ra, $sp, 44 # 4-byte Folded Spill70; LA32-NEXT:    st.w $fp, $sp, 40 # 4-byte Folded Spill71; LA32-NEXT:    st.w $s0, $sp, 36 # 4-byte Folded Spill72; LA32-NEXT:    st.w $s1, $sp, 32 # 4-byte Folded Spill73; LA32-NEXT:    st.w $s2, $sp, 28 # 4-byte Folded Spill74; LA32-NEXT:    st.w $s3, $sp, 24 # 4-byte Folded Spill75; LA32-NEXT:    st.w $s4, $sp, 20 # 4-byte Folded Spill76; LA32-NEXT:    st.w $s5, $sp, 16 # 4-byte Folded Spill77; LA32-NEXT:    st.w $s6, $sp, 12 # 4-byte Folded Spill78; LA32-NEXT:    st.w $s7, $sp, 8 # 4-byte Folded Spill79; LA32-NEXT:    st.w $s8, $sp, 4 # 4-byte Folded Spill80; LA32-NEXT:    .cfi_offset 1, -481; LA32-NEXT:    .cfi_offset 22, -882; LA32-NEXT:    .cfi_offset 23, -1283; LA32-NEXT:    .cfi_offset 24, -1684; LA32-NEXT:    .cfi_offset 25, -2085; LA32-NEXT:    .cfi_offset 26, -2486; LA32-NEXT:    .cfi_offset 27, -2887; LA32-NEXT:    .cfi_offset 28, -3288; LA32-NEXT:    .cfi_offset 29, -3689; LA32-NEXT:    .cfi_offset 30, -4090; LA32-NEXT:    .cfi_offset 31, -4491; LA32-NEXT:    ld.w $a5, $a1, 1292; LA32-NEXT:    ld.w $a6, $a1, 893; LA32-NEXT:    ld.w $t1, $a0, 494; LA32-NEXT:    ld.w $a3, $a1, 095; LA32-NEXT:    ld.w $a7, $a0, 896; LA32-NEXT:    ld.w $t0, $a0, 1297; LA32-NEXT:    ld.w $a4, $a0, 098; LA32-NEXT:    ld.w $t4, $a1, 499; LA32-NEXT:    mulh.wu $a0, $a7, $a3100; LA32-NEXT:    mul.w $a1, $t0, $a3101; LA32-NEXT:    add.w $a0, $a1, $a0102; LA32-NEXT:    sltu $a1, $a0, $a1103; LA32-NEXT:    mulh.wu $t2, $t0, $a3104; LA32-NEXT:    add.w $a1, $t2, $a1105; LA32-NEXT:    mul.w $t3, $a7, $t4106; LA32-NEXT:    add.w $t2, $t3, $a0107; LA32-NEXT:    sltu $a0, $t2, $t3108; LA32-NEXT:    mulh.wu $t3, $a7, $t4109; LA32-NEXT:    add.w $a0, $t3, $a0110; LA32-NEXT:    add.w $t5, $a1, $a0111; LA32-NEXT:    mul.w $t6, $t0, $t4112; LA32-NEXT:    add.w $t7, $t6, $t5113; LA32-NEXT:    srai.w $a0, $t0, 31114; LA32-NEXT:    mul.w $t8, $a3, $a0115; LA32-NEXT:    add.w $t3, $t7, $t8116; LA32-NEXT:    sltu $fp, $t3, $t7117; LA32-NEXT:    sltu $t6, $t7, $t6118; LA32-NEXT:    sltu $a1, $t5, $a1119; LA32-NEXT:    mulh.wu $t5, $t0, $t4120; LA32-NEXT:    add.w $a1, $t5, $a1121; LA32-NEXT:    add.w $a1, $a1, $t6122; LA32-NEXT:    mulh.wu $t5, $a3, $a0123; LA32-NEXT:    add.w $t5, $t5, $t8124; LA32-NEXT:    mul.w $t6, $t4, $a0125; LA32-NEXT:    add.w $t5, $t5, $t6126; LA32-NEXT:    add.w $t8, $a1, $t5127; LA32-NEXT:    mulh.wu $a1, $a4, $a3128; LA32-NEXT:    mul.w $t5, $t1, $a3129; LA32-NEXT:    add.w $a1, $t5, $a1130; LA32-NEXT:    sltu $t5, $a1, $t5131; LA32-NEXT:    mulh.wu $t6, $t1, $a3132; LA32-NEXT:    add.w $t5, $t6, $t5133; LA32-NEXT:    mul.w $t6, $a4, $t4134; LA32-NEXT:    add.w $a1, $t6, $a1135; LA32-NEXT:    sltu $t6, $a1, $t6136; LA32-NEXT:    mulh.wu $t7, $a4, $t4137; LA32-NEXT:    add.w $t6, $t7, $t6138; LA32-NEXT:    add.w $t6, $t5, $t6139; LA32-NEXT:    mul.w $t7, $t1, $t4140; LA32-NEXT:    sltu $t5, $t6, $t5141; LA32-NEXT:    add.w $t6, $t7, $t6142; LA32-NEXT:    sltu $t7, $t6, $t7143; LA32-NEXT:    mulh.wu $t4, $t1, $t4144; LA32-NEXT:    add.w $t4, $t4, $t5145; LA32-NEXT:    add.w $t4, $t4, $t7146; LA32-NEXT:    add.w $t4, $t2, $t4147; LA32-NEXT:    mul.w $t5, $a7, $a3148; LA32-NEXT:    add.w $t6, $t5, $t6149; LA32-NEXT:    sltu $t5, $t6, $t5150; LA32-NEXT:    add.w $t7, $t4, $t5151; LA32-NEXT:    add.w $t4, $t8, $fp152; LA32-NEXT:    beq $t7, $t2, .LBB1_2153; LA32-NEXT:  # %bb.1:154; LA32-NEXT:    sltu $t5, $t7, $t2155; LA32-NEXT:  .LBB1_2:156; LA32-NEXT:    add.w $t5, $t3, $t5157; LA32-NEXT:    sltu $t2, $t5, $t3158; LA32-NEXT:    add.w $t4, $t4, $t2159; LA32-NEXT:    mulh.wu $t2, $a4, $a6160; LA32-NEXT:    mul.w $t3, $t1, $a6161; LA32-NEXT:    add.w $t2, $t3, $t2162; LA32-NEXT:    sltu $t3, $t2, $t3163; LA32-NEXT:    mulh.wu $t8, $t1, $a6164; LA32-NEXT:    add.w $s0, $t8, $t3165; LA32-NEXT:    mul.w $t3, $a4, $a5166; LA32-NEXT:    add.w $t8, $t3, $t2167; LA32-NEXT:    sltu $t2, $t8, $t3168; LA32-NEXT:    mulh.wu $t3, $a4, $a5169; LA32-NEXT:    add.w $t2, $t3, $t2170; LA32-NEXT:    add.w $t2, $s0, $t2171; LA32-NEXT:    mul.w $s1, $t1, $a5172; LA32-NEXT:    add.w $s2, $s1, $t2173; LA32-NEXT:    srai.w $t3, $a5, 31174; LA32-NEXT:    mul.w $s3, $t3, $a4175; LA32-NEXT:    add.w $fp, $s2, $s3176; LA32-NEXT:    sltu $s4, $fp, $s2177; LA32-NEXT:    sltu $s1, $s2, $s1178; LA32-NEXT:    sltu $t2, $t2, $s0179; LA32-NEXT:    mulh.wu $s0, $t1, $a5180; LA32-NEXT:    add.w $t2, $s0, $t2181; LA32-NEXT:    add.w $t2, $t2, $s1182; LA32-NEXT:    mul.w $t1, $t3, $t1183; LA32-NEXT:    mulh.wu $s0, $t3, $a4184; LA32-NEXT:    add.w $t1, $s0, $t1185; LA32-NEXT:    add.w $t1, $t1, $s3186; LA32-NEXT:    add.w $s0, $t2, $t1187; LA32-NEXT:    add.w $t2, $t8, $t7188; LA32-NEXT:    mul.w $t7, $a4, $a6189; LA32-NEXT:    add.w $t1, $t7, $t6190; LA32-NEXT:    sltu $t7, $t1, $t7191; LA32-NEXT:    add.w $t2, $t2, $t7192; LA32-NEXT:    add.w $t6, $s0, $s4193; LA32-NEXT:    beq $t2, $t8, .LBB1_4194; LA32-NEXT:  # %bb.3:195; LA32-NEXT:    sltu $t7, $t2, $t8196; LA32-NEXT:  .LBB1_4:197; LA32-NEXT:    add.w $t7, $fp, $t7198; LA32-NEXT:    sltu $t8, $t7, $fp199; LA32-NEXT:    add.w $t8, $t6, $t8200; LA32-NEXT:    add.w $t6, $t4, $t8201; LA32-NEXT:    add.w $t7, $t5, $t7202; LA32-NEXT:    sltu $s0, $t7, $t5203; LA32-NEXT:    add.w $s4, $t6, $s0204; LA32-NEXT:    mulh.wu $t5, $a7, $a6205; LA32-NEXT:    mul.w $s1, $t0, $a6206; LA32-NEXT:    add.w $s3, $s1, $t5207; LA32-NEXT:    mul.w $fp, $a7, $a5208; LA32-NEXT:    add.w $s2, $fp, $s3209; LA32-NEXT:    add.w $t6, $s2, $s4210; LA32-NEXT:    mul.w $s5, $a7, $a6211; LA32-NEXT:    add.w $t5, $s5, $t7212; LA32-NEXT:    sltu $t7, $t5, $s5213; LA32-NEXT:    add.w $t6, $t6, $t7214; LA32-NEXT:    beq $t6, $s2, .LBB1_6215; LA32-NEXT:  # %bb.5:216; LA32-NEXT:    sltu $t7, $t6, $s2217; LA32-NEXT:  .LBB1_6:218; LA32-NEXT:    beq $s4, $t4, .LBB1_8219; LA32-NEXT:  # %bb.7:220; LA32-NEXT:    sltu $s0, $s4, $t4221; LA32-NEXT:  .LBB1_8:222; LA32-NEXT:    srai.w $t4, $t4, 31223; LA32-NEXT:    srai.w $t8, $t8, 31224; LA32-NEXT:    add.w $t8, $t4, $t8225; LA32-NEXT:    add.w $s0, $t8, $s0226; LA32-NEXT:    sltu $s1, $s3, $s1227; LA32-NEXT:    mulh.wu $s3, $t0, $a6228; LA32-NEXT:    add.w $s1, $s3, $s1229; LA32-NEXT:    sltu $fp, $s2, $fp230; LA32-NEXT:    mulh.wu $s2, $a7, $a5231; LA32-NEXT:    add.w $fp, $s2, $fp232; LA32-NEXT:    add.w $fp, $s1, $fp233; LA32-NEXT:    mul.w $s2, $t0, $a5234; LA32-NEXT:    add.w $s3, $s2, $fp235; LA32-NEXT:    mul.w $s4, $a6, $a0236; LA32-NEXT:    mul.w $s5, $t3, $a7237; LA32-NEXT:    add.w $s6, $s5, $s4238; LA32-NEXT:    add.w $s7, $s3, $s6239; LA32-NEXT:    add.w $s8, $s7, $s0240; LA32-NEXT:    add.w $t7, $s8, $t7241; LA32-NEXT:    sltu $ra, $t7, $s8242; LA32-NEXT:    sltu $t4, $t8, $t4243; LA32-NEXT:    add.w $t4, $t8, $t4244; LA32-NEXT:    sltu $t8, $s0, $t8245; LA32-NEXT:    add.w $t4, $t4, $t8246; LA32-NEXT:    sltu $t8, $s7, $s3247; LA32-NEXT:    sltu $s0, $s3, $s2248; LA32-NEXT:    sltu $fp, $fp, $s1249; LA32-NEXT:    mulh.wu $s1, $t0, $a5250; LA32-NEXT:    add.w $fp, $s1, $fp251; LA32-NEXT:    add.w $fp, $fp, $s0252; LA32-NEXT:    mulh.wu $a6, $a6, $a0253; LA32-NEXT:    add.w $a6, $a6, $s4254; LA32-NEXT:    mul.w $a0, $a5, $a0255; LA32-NEXT:    add.w $a0, $a6, $a0256; LA32-NEXT:    mul.w $a5, $t3, $t0257; LA32-NEXT:    mulh.wu $a6, $t3, $a7258; LA32-NEXT:    add.w $a5, $a6, $a5259; LA32-NEXT:    add.w $a5, $a5, $s5260; LA32-NEXT:    add.w $a0, $a5, $a0261; LA32-NEXT:    sltu $a5, $s6, $s5262; LA32-NEXT:    add.w $a0, $a0, $a5263; LA32-NEXT:    add.w $a0, $fp, $a0264; LA32-NEXT:    add.w $a0, $a0, $t8265; LA32-NEXT:    add.w $a0, $a0, $t4266; LA32-NEXT:    sltu $a5, $s8, $s7267; LA32-NEXT:    add.w $a0, $a0, $a5268; LA32-NEXT:    add.w $a0, $a0, $ra269; LA32-NEXT:    srai.w $a5, $t2, 31270; LA32-NEXT:    xor $a0, $a0, $a5271; LA32-NEXT:    xor $a6, $t6, $a5272; LA32-NEXT:    or $a0, $a6, $a0273; LA32-NEXT:    xor $a6, $t7, $a5274; LA32-NEXT:    xor $a5, $t5, $a5275; LA32-NEXT:    or $a5, $a5, $a6276; LA32-NEXT:    or $a0, $a5, $a0277; LA32-NEXT:    sltu $a0, $zero, $a0278; LA32-NEXT:    mul.w $a3, $a4, $a3279; LA32-NEXT:    st.w $a3, $a2, 0280; LA32-NEXT:    st.w $a1, $a2, 4281; LA32-NEXT:    st.w $t1, $a2, 8282; LA32-NEXT:    st.w $t2, $a2, 12283; LA32-NEXT:    ld.w $s8, $sp, 4 # 4-byte Folded Reload284; LA32-NEXT:    ld.w $s7, $sp, 8 # 4-byte Folded Reload285; LA32-NEXT:    ld.w $s6, $sp, 12 # 4-byte Folded Reload286; LA32-NEXT:    ld.w $s5, $sp, 16 # 4-byte Folded Reload287; LA32-NEXT:    ld.w $s4, $sp, 20 # 4-byte Folded Reload288; LA32-NEXT:    ld.w $s3, $sp, 24 # 4-byte Folded Reload289; LA32-NEXT:    ld.w $s2, $sp, 28 # 4-byte Folded Reload290; LA32-NEXT:    ld.w $s1, $sp, 32 # 4-byte Folded Reload291; LA32-NEXT:    ld.w $s0, $sp, 36 # 4-byte Folded Reload292; LA32-NEXT:    ld.w $fp, $sp, 40 # 4-byte Folded Reload293; LA32-NEXT:    ld.w $ra, $sp, 44 # 4-byte Folded Reload294; LA32-NEXT:    addi.w $sp, $sp, 48295; LA32-NEXT:    ret296;297; LA64-LABEL: smuloi128:298; LA64:       # %bb.0:299; LA64-NEXT:    mulh.du $a5, $a0, $a2300; LA64-NEXT:    mul.d $a6, $a1, $a2301; LA64-NEXT:    add.d $a5, $a6, $a5302; LA64-NEXT:    sltu $a6, $a5, $a6303; LA64-NEXT:    mulh.du $a7, $a1, $a2304; LA64-NEXT:    srai.d $t0, $a1, 63305; LA64-NEXT:    mul.d $t0, $t0, $a2306; LA64-NEXT:    add.d $a7, $a7, $t0307; LA64-NEXT:    add.d $a6, $a7, $a6308; LA64-NEXT:    mulh.du $a7, $a0, $a3309; LA64-NEXT:    srai.d $t0, $a3, 63310; LA64-NEXT:    mul.d $t0, $a0, $t0311; LA64-NEXT:    add.d $a7, $a7, $t0312; LA64-NEXT:    mul.d $t0, $a0, $a3313; LA64-NEXT:    add.d $a5, $t0, $a5314; LA64-NEXT:    sltu $t0, $a5, $t0315; LA64-NEXT:    add.d $a7, $a7, $t0316; LA64-NEXT:    add.d $t0, $a6, $a7317; LA64-NEXT:    sltu $t1, $t0, $a6318; LA64-NEXT:    srai.d $a6, $a6, 63319; LA64-NEXT:    srai.d $a7, $a7, 63320; LA64-NEXT:    add.d $a6, $a6, $a7321; LA64-NEXT:    add.d $a6, $a6, $t1322; LA64-NEXT:    mulh.d $a7, $a1, $a3323; LA64-NEXT:    add.d $a6, $a7, $a6324; LA64-NEXT:    mul.d $a1, $a1, $a3325; LA64-NEXT:    add.d $a3, $a1, $t0326; LA64-NEXT:    sltu $a1, $a3, $a1327; LA64-NEXT:    add.d $a1, $a6, $a1328; LA64-NEXT:    srai.d $a6, $a5, 63329; LA64-NEXT:    xor $a1, $a1, $a6330; LA64-NEXT:    xor $a3, $a3, $a6331; LA64-NEXT:    or $a1, $a3, $a1332; LA64-NEXT:    sltu $a1, $zero, $a1333; LA64-NEXT:    mul.d $a0, $a0, $a2334; LA64-NEXT:    st.d $a0, $a4, 0335; LA64-NEXT:    st.d $a5, $a4, 8336; LA64-NEXT:    move $a0, $a1337; LA64-NEXT:    ret338  %t = call {i128, i1} @llvm.smul.with.overflow.i128(i128 %v1, i128 %v2)339  %val = extractvalue {i128, i1} %t, 0340  %obit = extractvalue {i128, i1} %t, 1341  store i128 %val, ptr %res342  ret i1 %obit343}344 345declare {i64, i1} @llvm.smul.with.overflow.i64(i64, i64) nounwind readnone346declare {i128, i1} @llvm.smul.with.overflow.i128(i128, i128) nounwind readnone347