brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.7 KiB · 12697e8 Raw
725 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \3; RUN:   | FileCheck -check-prefix=RV32I %s4; RUN: llc -mtriple=riscv32 -mattr=+m -verify-machineinstrs < %s \5; RUN:   | FileCheck -check-prefix=RV32IM %s6; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \7; RUN:   | FileCheck -check-prefix=RV64I %s8; RUN: llc -mtriple=riscv64 -mattr=+m -verify-machineinstrs < %s \9; RUN:   | FileCheck -check-prefix=RV64IM %s10 11define i32 @urem(i32 %a, i32 %b) nounwind {12; RV32I-LABEL: urem:13; RV32I:       # %bb.0:14; RV32I-NEXT:    tail __umodsi315;16; RV32IM-LABEL: urem:17; RV32IM:       # %bb.0:18; RV32IM-NEXT:    remu a0, a0, a119; RV32IM-NEXT:    ret20;21; RV64I-LABEL: urem:22; RV64I:       # %bb.0:23; RV64I-NEXT:    addi sp, sp, -1624; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill25; RV64I-NEXT:    slli a0, a0, 3226; RV64I-NEXT:    slli a1, a1, 3227; RV64I-NEXT:    srli a0, a0, 3228; RV64I-NEXT:    srli a1, a1, 3229; RV64I-NEXT:    call __umoddi330; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload31; RV64I-NEXT:    addi sp, sp, 1632; RV64I-NEXT:    ret33;34; RV64IM-LABEL: urem:35; RV64IM:       # %bb.0:36; RV64IM-NEXT:    remuw a0, a0, a137; RV64IM-NEXT:    ret38  %1 = urem i32 %a, %b39  ret i32 %140}41 42define i32 @urem_constant_lhs(i32 %a) nounwind {43; RV32I-LABEL: urem_constant_lhs:44; RV32I:       # %bb.0:45; RV32I-NEXT:    mv a1, a046; RV32I-NEXT:    li a0, 1047; RV32I-NEXT:    tail __umodsi348;49; RV32IM-LABEL: urem_constant_lhs:50; RV32IM:       # %bb.0:51; RV32IM-NEXT:    li a1, 1052; RV32IM-NEXT:    remu a0, a1, a053; RV32IM-NEXT:    ret54;55; RV64I-LABEL: urem_constant_lhs:56; RV64I:       # %bb.0:57; RV64I-NEXT:    addi sp, sp, -1658; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill59; RV64I-NEXT:    slli a0, a0, 3260; RV64I-NEXT:    srli a1, a0, 3261; RV64I-NEXT:    li a0, 1062; RV64I-NEXT:    call __umoddi363; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload64; RV64I-NEXT:    addi sp, sp, 1665; RV64I-NEXT:    ret66;67; RV64IM-LABEL: urem_constant_lhs:68; RV64IM:       # %bb.0:69; RV64IM-NEXT:    li a1, 1070; RV64IM-NEXT:    remuw a0, a1, a071; RV64IM-NEXT:    ret72  %1 = urem i32 10, %a73  ret i32 %174}75 76define i32 @srem(i32 %a, i32 %b) nounwind {77; RV32I-LABEL: srem:78; RV32I:       # %bb.0:79; RV32I-NEXT:    tail __modsi380;81; RV32IM-LABEL: srem:82; RV32IM:       # %bb.0:83; RV32IM-NEXT:    rem a0, a0, a184; RV32IM-NEXT:    ret85;86; RV64I-LABEL: srem:87; RV64I:       # %bb.0:88; RV64I-NEXT:    addi sp, sp, -1689; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill90; RV64I-NEXT:    sext.w a0, a091; RV64I-NEXT:    sext.w a1, a192; RV64I-NEXT:    call __moddi393; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload94; RV64I-NEXT:    addi sp, sp, 1695; RV64I-NEXT:    ret96;97; RV64IM-LABEL: srem:98; RV64IM:       # %bb.0:99; RV64IM-NEXT:    remw a0, a0, a1100; RV64IM-NEXT:    ret101  %1 = srem i32 %a, %b102  ret i32 %1103}104 105define i32 @srem_pow2(i32 %a) nounwind {106; RV32I-LABEL: srem_pow2:107; RV32I:       # %bb.0:108; RV32I-NEXT:    srai a1, a0, 31109; RV32I-NEXT:    srli a1, a1, 29110; RV32I-NEXT:    add a1, a0, a1111; RV32I-NEXT:    andi a1, a1, -8112; RV32I-NEXT:    sub a0, a0, a1113; RV32I-NEXT:    ret114;115; RV32IM-LABEL: srem_pow2:116; RV32IM:       # %bb.0:117; RV32IM-NEXT:    srai a1, a0, 31118; RV32IM-NEXT:    srli a1, a1, 29119; RV32IM-NEXT:    add a1, a0, a1120; RV32IM-NEXT:    andi a1, a1, -8121; RV32IM-NEXT:    sub a0, a0, a1122; RV32IM-NEXT:    ret123;124; RV64I-LABEL: srem_pow2:125; RV64I:       # %bb.0:126; RV64I-NEXT:    sraiw a1, a0, 31127; RV64I-NEXT:    srliw a1, a1, 29128; RV64I-NEXT:    add a1, a0, a1129; RV64I-NEXT:    andi a1, a1, -8130; RV64I-NEXT:    subw a0, a0, a1131; RV64I-NEXT:    ret132;133; RV64IM-LABEL: srem_pow2:134; RV64IM:       # %bb.0:135; RV64IM-NEXT:    sraiw a1, a0, 31136; RV64IM-NEXT:    srliw a1, a1, 29137; RV64IM-NEXT:    add a1, a0, a1138; RV64IM-NEXT:    andi a1, a1, -8139; RV64IM-NEXT:    subw a0, a0, a1140; RV64IM-NEXT:    ret141  %1 = srem i32 %a, 8142  ret i32 %1143}144 145define i32 @srem_pow2_2(i32 %a) nounwind {146; RV32I-LABEL: srem_pow2_2:147; RV32I:       # %bb.0:148; RV32I-NEXT:    srai a1, a0, 31149; RV32I-NEXT:    srli a1, a1, 16150; RV32I-NEXT:    add a1, a0, a1151; RV32I-NEXT:    lui a2, 1048560152; RV32I-NEXT:    and a1, a1, a2153; RV32I-NEXT:    sub a0, a0, a1154; RV32I-NEXT:    ret155;156; RV32IM-LABEL: srem_pow2_2:157; RV32IM:       # %bb.0:158; RV32IM-NEXT:    srai a1, a0, 31159; RV32IM-NEXT:    srli a1, a1, 16160; RV32IM-NEXT:    add a1, a0, a1161; RV32IM-NEXT:    lui a2, 1048560162; RV32IM-NEXT:    and a1, a1, a2163; RV32IM-NEXT:    sub a0, a0, a1164; RV32IM-NEXT:    ret165;166; RV64I-LABEL: srem_pow2_2:167; RV64I:       # %bb.0:168; RV64I-NEXT:    sraiw a1, a0, 31169; RV64I-NEXT:    srliw a1, a1, 16170; RV64I-NEXT:    add a1, a0, a1171; RV64I-NEXT:    lui a2, 1048560172; RV64I-NEXT:    and a1, a1, a2173; RV64I-NEXT:    subw a0, a0, a1174; RV64I-NEXT:    ret175;176; RV64IM-LABEL: srem_pow2_2:177; RV64IM:       # %bb.0:178; RV64IM-NEXT:    sraiw a1, a0, 31179; RV64IM-NEXT:    srliw a1, a1, 16180; RV64IM-NEXT:    add a1, a0, a1181; RV64IM-NEXT:    lui a2, 1048560182; RV64IM-NEXT:    and a1, a1, a2183; RV64IM-NEXT:    subw a0, a0, a1184; RV64IM-NEXT:    ret185  %1 = srem i32 %a, 65536186  ret i32 %1187}188 189define i32 @srem_constant_lhs(i32 %a) nounwind {190; RV32I-LABEL: srem_constant_lhs:191; RV32I:       # %bb.0:192; RV32I-NEXT:    mv a1, a0193; RV32I-NEXT:    li a0, -10194; RV32I-NEXT:    tail __modsi3195;196; RV32IM-LABEL: srem_constant_lhs:197; RV32IM:       # %bb.0:198; RV32IM-NEXT:    li a1, -10199; RV32IM-NEXT:    rem a0, a1, a0200; RV32IM-NEXT:    ret201;202; RV64I-LABEL: srem_constant_lhs:203; RV64I:       # %bb.0:204; RV64I-NEXT:    addi sp, sp, -16205; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill206; RV64I-NEXT:    sext.w a1, a0207; RV64I-NEXT:    li a0, -10208; RV64I-NEXT:    call __moddi3209; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload210; RV64I-NEXT:    addi sp, sp, 16211; RV64I-NEXT:    ret212;213; RV64IM-LABEL: srem_constant_lhs:214; RV64IM:       # %bb.0:215; RV64IM-NEXT:    li a1, -10216; RV64IM-NEXT:    remw a0, a1, a0217; RV64IM-NEXT:    ret218  %1 = srem i32 -10, %a219  ret i32 %1220}221 222define i64 @urem64(i64 %a, i64 %b) nounwind {223; RV32I-LABEL: urem64:224; RV32I:       # %bb.0:225; RV32I-NEXT:    addi sp, sp, -16226; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill227; RV32I-NEXT:    call __umoddi3228; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload229; RV32I-NEXT:    addi sp, sp, 16230; RV32I-NEXT:    ret231;232; RV32IM-LABEL: urem64:233; RV32IM:       # %bb.0:234; RV32IM-NEXT:    addi sp, sp, -16235; RV32IM-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill236; RV32IM-NEXT:    call __umoddi3237; RV32IM-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload238; RV32IM-NEXT:    addi sp, sp, 16239; RV32IM-NEXT:    ret240;241; RV64I-LABEL: urem64:242; RV64I:       # %bb.0:243; RV64I-NEXT:    tail __umoddi3244;245; RV64IM-LABEL: urem64:246; RV64IM:       # %bb.0:247; RV64IM-NEXT:    remu a0, a0, a1248; RV64IM-NEXT:    ret249  %1 = urem i64 %a, %b250  ret i64 %1251}252 253define i64 @urem64_constant_lhs(i64 %a) nounwind {254; RV32I-LABEL: urem64_constant_lhs:255; RV32I:       # %bb.0:256; RV32I-NEXT:    addi sp, sp, -16257; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill258; RV32I-NEXT:    mv a3, a1259; RV32I-NEXT:    mv a2, a0260; RV32I-NEXT:    li a0, 10261; RV32I-NEXT:    li a1, 0262; RV32I-NEXT:    call __umoddi3263; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload264; RV32I-NEXT:    addi sp, sp, 16265; RV32I-NEXT:    ret266;267; RV32IM-LABEL: urem64_constant_lhs:268; RV32IM:       # %bb.0:269; RV32IM-NEXT:    addi sp, sp, -16270; RV32IM-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill271; RV32IM-NEXT:    mv a3, a1272; RV32IM-NEXT:    mv a2, a0273; RV32IM-NEXT:    li a0, 10274; RV32IM-NEXT:    li a1, 0275; RV32IM-NEXT:    call __umoddi3276; RV32IM-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload277; RV32IM-NEXT:    addi sp, sp, 16278; RV32IM-NEXT:    ret279;280; RV64I-LABEL: urem64_constant_lhs:281; RV64I:       # %bb.0:282; RV64I-NEXT:    mv a1, a0283; RV64I-NEXT:    li a0, 10284; RV64I-NEXT:    tail __umoddi3285;286; RV64IM-LABEL: urem64_constant_lhs:287; RV64IM:       # %bb.0:288; RV64IM-NEXT:    li a1, 10289; RV64IM-NEXT:    remu a0, a1, a0290; RV64IM-NEXT:    ret291  %1 = urem i64 10, %a292  ret i64 %1293}294 295define i64 @srem64(i64 %a, i64 %b) nounwind {296; RV32I-LABEL: srem64:297; RV32I:       # %bb.0:298; RV32I-NEXT:    addi sp, sp, -16299; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill300; RV32I-NEXT:    call __moddi3301; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload302; RV32I-NEXT:    addi sp, sp, 16303; RV32I-NEXT:    ret304;305; RV32IM-LABEL: srem64:306; RV32IM:       # %bb.0:307; RV32IM-NEXT:    addi sp, sp, -16308; RV32IM-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill309; RV32IM-NEXT:    call __moddi3310; RV32IM-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload311; RV32IM-NEXT:    addi sp, sp, 16312; RV32IM-NEXT:    ret313;314; RV64I-LABEL: srem64:315; RV64I:       # %bb.0:316; RV64I-NEXT:    tail __moddi3317;318; RV64IM-LABEL: srem64:319; RV64IM:       # %bb.0:320; RV64IM-NEXT:    rem a0, a0, a1321; RV64IM-NEXT:    ret322  %1 = srem i64 %a, %b323  ret i64 %1324}325 326define i64 @srem64_constant_lhs(i64 %a) nounwind {327; RV32I-LABEL: srem64_constant_lhs:328; RV32I:       # %bb.0:329; RV32I-NEXT:    addi sp, sp, -16330; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill331; RV32I-NEXT:    mv a3, a1332; RV32I-NEXT:    mv a2, a0333; RV32I-NEXT:    li a0, -10334; RV32I-NEXT:    li a1, -1335; RV32I-NEXT:    call __moddi3336; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload337; RV32I-NEXT:    addi sp, sp, 16338; RV32I-NEXT:    ret339;340; RV32IM-LABEL: srem64_constant_lhs:341; RV32IM:       # %bb.0:342; RV32IM-NEXT:    addi sp, sp, -16343; RV32IM-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill344; RV32IM-NEXT:    mv a3, a1345; RV32IM-NEXT:    mv a2, a0346; RV32IM-NEXT:    li a0, -10347; RV32IM-NEXT:    li a1, -1348; RV32IM-NEXT:    call __moddi3349; RV32IM-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload350; RV32IM-NEXT:    addi sp, sp, 16351; RV32IM-NEXT:    ret352;353; RV64I-LABEL: srem64_constant_lhs:354; RV64I:       # %bb.0:355; RV64I-NEXT:    mv a1, a0356; RV64I-NEXT:    li a0, -10357; RV64I-NEXT:    tail __moddi3358;359; RV64IM-LABEL: srem64_constant_lhs:360; RV64IM:       # %bb.0:361; RV64IM-NEXT:    li a1, -10362; RV64IM-NEXT:    rem a0, a1, a0363; RV64IM-NEXT:    ret364  %1 = srem i64 -10, %a365  ret i64 %1366}367 368define i8 @urem8(i8 %a, i8 %b) nounwind {369; RV32I-LABEL: urem8:370; RV32I:       # %bb.0:371; RV32I-NEXT:    addi sp, sp, -16372; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill373; RV32I-NEXT:    zext.b a0, a0374; RV32I-NEXT:    zext.b a1, a1375; RV32I-NEXT:    call __umodsi3376; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload377; RV32I-NEXT:    addi sp, sp, 16378; RV32I-NEXT:    ret379;380; RV32IM-LABEL: urem8:381; RV32IM:       # %bb.0:382; RV32IM-NEXT:    zext.b a1, a1383; RV32IM-NEXT:    zext.b a0, a0384; RV32IM-NEXT:    remu a0, a0, a1385; RV32IM-NEXT:    ret386;387; RV64I-LABEL: urem8:388; RV64I:       # %bb.0:389; RV64I-NEXT:    addi sp, sp, -16390; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill391; RV64I-NEXT:    zext.b a0, a0392; RV64I-NEXT:    zext.b a1, a1393; RV64I-NEXT:    call __umoddi3394; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload395; RV64I-NEXT:    addi sp, sp, 16396; RV64I-NEXT:    ret397;398; RV64IM-LABEL: urem8:399; RV64IM:       # %bb.0:400; RV64IM-NEXT:    zext.b a1, a1401; RV64IM-NEXT:    zext.b a0, a0402; RV64IM-NEXT:    remuw a0, a0, a1403; RV64IM-NEXT:    ret404  %1 = urem i8 %a, %b405  ret i8 %1406}407 408define i8 @urem8_constant_lhs(i8 %a) nounwind {409; RV32I-LABEL: urem8_constant_lhs:410; RV32I:       # %bb.0:411; RV32I-NEXT:    addi sp, sp, -16412; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill413; RV32I-NEXT:    zext.b a1, a0414; RV32I-NEXT:    li a0, 10415; RV32I-NEXT:    call __umodsi3416; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload417; RV32I-NEXT:    addi sp, sp, 16418; RV32I-NEXT:    ret419;420; RV32IM-LABEL: urem8_constant_lhs:421; RV32IM:       # %bb.0:422; RV32IM-NEXT:    zext.b a0, a0423; RV32IM-NEXT:    li a1, 10424; RV32IM-NEXT:    remu a0, a1, a0425; RV32IM-NEXT:    ret426;427; RV64I-LABEL: urem8_constant_lhs:428; RV64I:       # %bb.0:429; RV64I-NEXT:    addi sp, sp, -16430; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill431; RV64I-NEXT:    zext.b a1, a0432; RV64I-NEXT:    li a0, 10433; RV64I-NEXT:    call __umoddi3434; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload435; RV64I-NEXT:    addi sp, sp, 16436; RV64I-NEXT:    ret437;438; RV64IM-LABEL: urem8_constant_lhs:439; RV64IM:       # %bb.0:440; RV64IM-NEXT:    zext.b a0, a0441; RV64IM-NEXT:    li a1, 10442; RV64IM-NEXT:    remuw a0, a1, a0443; RV64IM-NEXT:    ret444  %1 = urem i8 10, %a445  ret i8 %1446}447 448 449define i8 @srem8(i8 %a, i8 %b) nounwind {450; RV32I-LABEL: srem8:451; RV32I:       # %bb.0:452; RV32I-NEXT:    addi sp, sp, -16453; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill454; RV32I-NEXT:    slli a0, a0, 24455; RV32I-NEXT:    slli a1, a1, 24456; RV32I-NEXT:    srai a0, a0, 24457; RV32I-NEXT:    srai a1, a1, 24458; RV32I-NEXT:    call __modsi3459; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload460; RV32I-NEXT:    addi sp, sp, 16461; RV32I-NEXT:    ret462;463; RV32IM-LABEL: srem8:464; RV32IM:       # %bb.0:465; RV32IM-NEXT:    slli a1, a1, 24466; RV32IM-NEXT:    slli a0, a0, 24467; RV32IM-NEXT:    srai a1, a1, 24468; RV32IM-NEXT:    srai a0, a0, 24469; RV32IM-NEXT:    rem a0, a0, a1470; RV32IM-NEXT:    ret471;472; RV64I-LABEL: srem8:473; RV64I:       # %bb.0:474; RV64I-NEXT:    addi sp, sp, -16475; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill476; RV64I-NEXT:    slli a0, a0, 56477; RV64I-NEXT:    slli a1, a1, 56478; RV64I-NEXT:    srai a0, a0, 56479; RV64I-NEXT:    srai a1, a1, 56480; RV64I-NEXT:    call __moddi3481; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload482; RV64I-NEXT:    addi sp, sp, 16483; RV64I-NEXT:    ret484;485; RV64IM-LABEL: srem8:486; RV64IM:       # %bb.0:487; RV64IM-NEXT:    slli a1, a1, 56488; RV64IM-NEXT:    slli a0, a0, 56489; RV64IM-NEXT:    srai a1, a1, 56490; RV64IM-NEXT:    srai a0, a0, 56491; RV64IM-NEXT:    remw a0, a0, a1492; RV64IM-NEXT:    ret493  %1 = srem i8 %a, %b494  ret i8 %1495}496 497define i8 @srem8_constant_lhs(i8 %a) nounwind {498; RV32I-LABEL: srem8_constant_lhs:499; RV32I:       # %bb.0:500; RV32I-NEXT:    addi sp, sp, -16501; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill502; RV32I-NEXT:    slli a0, a0, 24503; RV32I-NEXT:    srai a1, a0, 24504; RV32I-NEXT:    li a0, -10505; RV32I-NEXT:    call __modsi3506; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload507; RV32I-NEXT:    addi sp, sp, 16508; RV32I-NEXT:    ret509;510; RV32IM-LABEL: srem8_constant_lhs:511; RV32IM:       # %bb.0:512; RV32IM-NEXT:    slli a0, a0, 24513; RV32IM-NEXT:    srai a0, a0, 24514; RV32IM-NEXT:    li a1, -10515; RV32IM-NEXT:    rem a0, a1, a0516; RV32IM-NEXT:    ret517;518; RV64I-LABEL: srem8_constant_lhs:519; RV64I:       # %bb.0:520; RV64I-NEXT:    addi sp, sp, -16521; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill522; RV64I-NEXT:    slli a0, a0, 56523; RV64I-NEXT:    srai a1, a0, 56524; RV64I-NEXT:    li a0, -10525; RV64I-NEXT:    call __moddi3526; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload527; RV64I-NEXT:    addi sp, sp, 16528; RV64I-NEXT:    ret529;530; RV64IM-LABEL: srem8_constant_lhs:531; RV64IM:       # %bb.0:532; RV64IM-NEXT:    slli a0, a0, 56533; RV64IM-NEXT:    srai a0, a0, 56534; RV64IM-NEXT:    li a1, -10535; RV64IM-NEXT:    remw a0, a1, a0536; RV64IM-NEXT:    ret537  %1 = srem i8 -10, %a538  ret i8 %1539}540 541 542define i16 @urem16(i16 %a, i16 %b) nounwind {543; RV32I-LABEL: urem16:544; RV32I:       # %bb.0:545; RV32I-NEXT:    addi sp, sp, -16546; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill547; RV32I-NEXT:    lui a2, 16548; RV32I-NEXT:    addi a2, a2, -1549; RV32I-NEXT:    and a0, a0, a2550; RV32I-NEXT:    and a1, a1, a2551; RV32I-NEXT:    call __umodsi3552; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload553; RV32I-NEXT:    addi sp, sp, 16554; RV32I-NEXT:    ret555;556; RV32IM-LABEL: urem16:557; RV32IM:       # %bb.0:558; RV32IM-NEXT:    lui a2, 16559; RV32IM-NEXT:    addi a2, a2, -1560; RV32IM-NEXT:    and a1, a1, a2561; RV32IM-NEXT:    and a0, a0, a2562; RV32IM-NEXT:    remu a0, a0, a1563; RV32IM-NEXT:    ret564;565; RV64I-LABEL: urem16:566; RV64I:       # %bb.0:567; RV64I-NEXT:    addi sp, sp, -16568; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill569; RV64I-NEXT:    lui a2, 16570; RV64I-NEXT:    addi a2, a2, -1571; RV64I-NEXT:    and a0, a0, a2572; RV64I-NEXT:    and a1, a1, a2573; RV64I-NEXT:    call __umoddi3574; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload575; RV64I-NEXT:    addi sp, sp, 16576; RV64I-NEXT:    ret577;578; RV64IM-LABEL: urem16:579; RV64IM:       # %bb.0:580; RV64IM-NEXT:    lui a2, 16581; RV64IM-NEXT:    addi a2, a2, -1582; RV64IM-NEXT:    and a1, a1, a2583; RV64IM-NEXT:    and a0, a0, a2584; RV64IM-NEXT:    remuw a0, a0, a1585; RV64IM-NEXT:    ret586  %1 = urem i16 %a, %b587  ret i16 %1588}589 590define i16 @urem16_constant_lhs(i16 %a) nounwind {591; RV32I-LABEL: urem16_constant_lhs:592; RV32I:       # %bb.0:593; RV32I-NEXT:    addi sp, sp, -16594; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill595; RV32I-NEXT:    slli a0, a0, 16596; RV32I-NEXT:    srli a1, a0, 16597; RV32I-NEXT:    li a0, 10598; RV32I-NEXT:    call __umodsi3599; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload600; RV32I-NEXT:    addi sp, sp, 16601; RV32I-NEXT:    ret602;603; RV32IM-LABEL: urem16_constant_lhs:604; RV32IM:       # %bb.0:605; RV32IM-NEXT:    slli a0, a0, 16606; RV32IM-NEXT:    srli a0, a0, 16607; RV32IM-NEXT:    li a1, 10608; RV32IM-NEXT:    remu a0, a1, a0609; RV32IM-NEXT:    ret610;611; RV64I-LABEL: urem16_constant_lhs:612; RV64I:       # %bb.0:613; RV64I-NEXT:    addi sp, sp, -16614; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill615; RV64I-NEXT:    slli a0, a0, 48616; RV64I-NEXT:    srli a1, a0, 48617; RV64I-NEXT:    li a0, 10618; RV64I-NEXT:    call __umoddi3619; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload620; RV64I-NEXT:    addi sp, sp, 16621; RV64I-NEXT:    ret622;623; RV64IM-LABEL: urem16_constant_lhs:624; RV64IM:       # %bb.0:625; RV64IM-NEXT:    slli a0, a0, 48626; RV64IM-NEXT:    srli a0, a0, 48627; RV64IM-NEXT:    li a1, 10628; RV64IM-NEXT:    remuw a0, a1, a0629; RV64IM-NEXT:    ret630  %1 = urem i16 10, %a631  ret i16 %1632}633 634define i16 @srem16(i16 %a, i16 %b) nounwind {635; RV32I-LABEL: srem16:636; RV32I:       # %bb.0:637; RV32I-NEXT:    addi sp, sp, -16638; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill639; RV32I-NEXT:    slli a0, a0, 16640; RV32I-NEXT:    slli a1, a1, 16641; RV32I-NEXT:    srai a0, a0, 16642; RV32I-NEXT:    srai a1, a1, 16643; RV32I-NEXT:    call __modsi3644; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload645; RV32I-NEXT:    addi sp, sp, 16646; RV32I-NEXT:    ret647;648; RV32IM-LABEL: srem16:649; RV32IM:       # %bb.0:650; RV32IM-NEXT:    slli a1, a1, 16651; RV32IM-NEXT:    slli a0, a0, 16652; RV32IM-NEXT:    srai a1, a1, 16653; RV32IM-NEXT:    srai a0, a0, 16654; RV32IM-NEXT:    rem a0, a0, a1655; RV32IM-NEXT:    ret656;657; RV64I-LABEL: srem16:658; RV64I:       # %bb.0:659; RV64I-NEXT:    addi sp, sp, -16660; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill661; RV64I-NEXT:    slli a0, a0, 48662; RV64I-NEXT:    slli a1, a1, 48663; RV64I-NEXT:    srai a0, a0, 48664; RV64I-NEXT:    srai a1, a1, 48665; RV64I-NEXT:    call __moddi3666; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload667; RV64I-NEXT:    addi sp, sp, 16668; RV64I-NEXT:    ret669;670; RV64IM-LABEL: srem16:671; RV64IM:       # %bb.0:672; RV64IM-NEXT:    slli a1, a1, 48673; RV64IM-NEXT:    slli a0, a0, 48674; RV64IM-NEXT:    srai a1, a1, 48675; RV64IM-NEXT:    srai a0, a0, 48676; RV64IM-NEXT:    remw a0, a0, a1677; RV64IM-NEXT:    ret678  %1 = srem i16 %a, %b679  ret i16 %1680}681 682define i16 @srem16_constant_lhs(i16 %a) nounwind {683; RV32I-LABEL: srem16_constant_lhs:684; RV32I:       # %bb.0:685; RV32I-NEXT:    addi sp, sp, -16686; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill687; RV32I-NEXT:    slli a0, a0, 16688; RV32I-NEXT:    srai a1, a0, 16689; RV32I-NEXT:    li a0, -10690; RV32I-NEXT:    call __modsi3691; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload692; RV32I-NEXT:    addi sp, sp, 16693; RV32I-NEXT:    ret694;695; RV32IM-LABEL: srem16_constant_lhs:696; RV32IM:       # %bb.0:697; RV32IM-NEXT:    slli a0, a0, 16698; RV32IM-NEXT:    srai a0, a0, 16699; RV32IM-NEXT:    li a1, -10700; RV32IM-NEXT:    rem a0, a1, a0701; RV32IM-NEXT:    ret702;703; RV64I-LABEL: srem16_constant_lhs:704; RV64I:       # %bb.0:705; RV64I-NEXT:    addi sp, sp, -16706; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill707; RV64I-NEXT:    slli a0, a0, 48708; RV64I-NEXT:    srai a1, a0, 48709; RV64I-NEXT:    li a0, -10710; RV64I-NEXT:    call __moddi3711; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload712; RV64I-NEXT:    addi sp, sp, 16713; RV64I-NEXT:    ret714;715; RV64IM-LABEL: srem16_constant_lhs:716; RV64IM:       # %bb.0:717; RV64IM-NEXT:    slli a0, a0, 48718; RV64IM-NEXT:    srai a0, a0, 48719; RV64IM-NEXT:    li a1, -10720; RV64IM-NEXT:    remw a0, a1, a0721; RV64IM-NEXT:    ret722  %1 = srem i16 -10, %a723  ret i16 %1724}725