brintos

brintos / llvm-project-archived public Read only

0
0
Text · 43.2 KiB · 7548885 Raw
1293 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 <4 x i16> @fold_srem_vec_1(<4 x i16> %x) nounwind {12; RV32I-LABEL: fold_srem_vec_1:13; RV32I:       # %bb.0:14; RV32I-NEXT:    addi sp, sp, -3215; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill16; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill17; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill18; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill19; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill20; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill21; RV32I-NEXT:    lh a2, 0(a1)22; RV32I-NEXT:    lh s0, 4(a1)23; RV32I-NEXT:    lh s1, 8(a1)24; RV32I-NEXT:    lh s2, 12(a1)25; RV32I-NEXT:    mv s3, a026; RV32I-NEXT:    li a1, 9527; RV32I-NEXT:    mv a0, a228; RV32I-NEXT:    call __modsi329; RV32I-NEXT:    mv s4, a030; RV32I-NEXT:    li a1, -12431; RV32I-NEXT:    mv a0, s032; RV32I-NEXT:    call __modsi333; RV32I-NEXT:    mv s0, a034; RV32I-NEXT:    li a1, 9835; RV32I-NEXT:    mv a0, s136; RV32I-NEXT:    call __modsi337; RV32I-NEXT:    mv s1, a038; RV32I-NEXT:    li a1, -100339; RV32I-NEXT:    mv a0, s240; RV32I-NEXT:    call __modsi341; RV32I-NEXT:    sh s4, 0(s3)42; RV32I-NEXT:    sh s0, 2(s3)43; RV32I-NEXT:    sh s1, 4(s3)44; RV32I-NEXT:    sh a0, 6(s3)45; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload46; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload47; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload48; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload49; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload50; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload51; RV32I-NEXT:    addi sp, sp, 3252; RV32I-NEXT:    ret53;54; RV32IM-LABEL: fold_srem_vec_1:55; RV32IM:       # %bb.0:56; RV32IM-NEXT:    lh a3, 0(a1)57; RV32IM-NEXT:    lh a2, 4(a1)58; RV32IM-NEXT:    lh a4, 8(a1)59; RV32IM-NEXT:    lh a1, 12(a1)60; RV32IM-NEXT:    lui a5, 70640961; RV32IM-NEXT:    lui a6, 50737562; RV32IM-NEXT:    lui a7, 34239263; RV32IM-NEXT:    lui t0, 78094364; RV32IM-NEXT:    addi a5, a5, 38965; RV32IM-NEXT:    addi a6, a6, 198166; RV32IM-NEXT:    addi a7, a7, 66967; RV32IM-NEXT:    addi t0, t0, 180968; RV32IM-NEXT:    mulh a5, a3, a569; RV32IM-NEXT:    mulh a6, a2, a670; RV32IM-NEXT:    mulh a7, a4, a771; RV32IM-NEXT:    mulh t0, a1, t072; RV32IM-NEXT:    add a5, a5, a373; RV32IM-NEXT:    sub a6, a6, a274; RV32IM-NEXT:    srli t1, a7, 3175; RV32IM-NEXT:    srli a7, a7, 576; RV32IM-NEXT:    add a7, a7, t177; RV32IM-NEXT:    srli t1, t0, 3178; RV32IM-NEXT:    srli t0, t0, 879; RV32IM-NEXT:    add t0, t0, t180; RV32IM-NEXT:    srli t1, a5, 3181; RV32IM-NEXT:    srli a5, a5, 682; RV32IM-NEXT:    add a5, a5, t183; RV32IM-NEXT:    srli t1, a6, 3184; RV32IM-NEXT:    srli a6, a6, 685; RV32IM-NEXT:    add a6, a6, t186; RV32IM-NEXT:    li t1, 9887; RV32IM-NEXT:    mul a7, a7, t188; RV32IM-NEXT:    li t1, -100389; RV32IM-NEXT:    mul t0, t0, t190; RV32IM-NEXT:    li t1, 9591; RV32IM-NEXT:    mul a5, a5, t192; RV32IM-NEXT:    li t1, -12493; RV32IM-NEXT:    mul a6, a6, t194; RV32IM-NEXT:    sub a4, a4, a795; RV32IM-NEXT:    sub a1, a1, t096; RV32IM-NEXT:    sub a3, a3, a597; RV32IM-NEXT:    sub a2, a2, a698; RV32IM-NEXT:    sh a3, 0(a0)99; RV32IM-NEXT:    sh a2, 2(a0)100; RV32IM-NEXT:    sh a4, 4(a0)101; RV32IM-NEXT:    sh a1, 6(a0)102; RV32IM-NEXT:    ret103;104; RV64I-LABEL: fold_srem_vec_1:105; RV64I:       # %bb.0:106; RV64I-NEXT:    addi sp, sp, -48107; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill108; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill109; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill110; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill111; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill112; RV64I-NEXT:    sd s4, 0(sp) # 8-byte Folded Spill113; RV64I-NEXT:    lh a2, 0(a1)114; RV64I-NEXT:    lh s0, 8(a1)115; RV64I-NEXT:    lh s1, 16(a1)116; RV64I-NEXT:    lh s2, 24(a1)117; RV64I-NEXT:    mv s3, a0118; RV64I-NEXT:    li a1, 95119; RV64I-NEXT:    mv a0, a2120; RV64I-NEXT:    call __moddi3121; RV64I-NEXT:    mv s4, a0122; RV64I-NEXT:    li a1, -124123; RV64I-NEXT:    mv a0, s0124; RV64I-NEXT:    call __moddi3125; RV64I-NEXT:    mv s0, a0126; RV64I-NEXT:    li a1, 98127; RV64I-NEXT:    mv a0, s1128; RV64I-NEXT:    call __moddi3129; RV64I-NEXT:    mv s1, a0130; RV64I-NEXT:    li a1, -1003131; RV64I-NEXT:    mv a0, s2132; RV64I-NEXT:    call __moddi3133; RV64I-NEXT:    sh s4, 0(s3)134; RV64I-NEXT:    sh s0, 2(s3)135; RV64I-NEXT:    sh s1, 4(s3)136; RV64I-NEXT:    sh a0, 6(s3)137; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload138; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload139; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload140; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload141; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload142; RV64I-NEXT:    ld s4, 0(sp) # 8-byte Folded Reload143; RV64I-NEXT:    addi sp, sp, 48144; RV64I-NEXT:    ret145;146; RV64IM-LABEL: fold_srem_vec_1:147; RV64IM:       # %bb.0:148; RV64IM-NEXT:    lh a3, 0(a1)149; RV64IM-NEXT:    lh a2, 8(a1)150; RV64IM-NEXT:    lh a4, 16(a1)151; RV64IM-NEXT:    lh a1, 24(a1)152; RV64IM-NEXT:    lui a5, %hi(.LCPI0_0)153; RV64IM-NEXT:    lui a6, %hi(.LCPI0_1)154; RV64IM-NEXT:    lui a7, %hi(.LCPI0_2)155; RV64IM-NEXT:    lui t0, %hi(.LCPI0_3)156; RV64IM-NEXT:    ld a5, %lo(.LCPI0_0)(a5)157; RV64IM-NEXT:    ld a6, %lo(.LCPI0_1)(a6)158; RV64IM-NEXT:    ld a7, %lo(.LCPI0_2)(a7)159; RV64IM-NEXT:    ld t0, %lo(.LCPI0_3)(t0)160; RV64IM-NEXT:    mulh a5, a3, a5161; RV64IM-NEXT:    mulh a6, a2, a6162; RV64IM-NEXT:    mulh a7, a4, a7163; RV64IM-NEXT:    mulh t0, a1, t0164; RV64IM-NEXT:    add a5, a5, a3165; RV64IM-NEXT:    sub a6, a6, a2166; RV64IM-NEXT:    srli t1, a7, 63167; RV64IM-NEXT:    srli a7, a7, 5168; RV64IM-NEXT:    add a7, a7, t1169; RV64IM-NEXT:    srli t1, t0, 63170; RV64IM-NEXT:    srli t0, t0, 7171; RV64IM-NEXT:    add t0, t0, t1172; RV64IM-NEXT:    srli t1, a5, 63173; RV64IM-NEXT:    srli a5, a5, 6174; RV64IM-NEXT:    add a5, a5, t1175; RV64IM-NEXT:    srli t1, a6, 63176; RV64IM-NEXT:    srli a6, a6, 6177; RV64IM-NEXT:    add a6, a6, t1178; RV64IM-NEXT:    li t1, 98179; RV64IM-NEXT:    mul a7, a7, t1180; RV64IM-NEXT:    li t1, -1003181; RV64IM-NEXT:    mul t0, t0, t1182; RV64IM-NEXT:    li t1, 95183; RV64IM-NEXT:    mul a5, a5, t1184; RV64IM-NEXT:    li t1, -124185; RV64IM-NEXT:    mul a6, a6, t1186; RV64IM-NEXT:    sub a4, a4, a7187; RV64IM-NEXT:    sub a1, a1, t0188; RV64IM-NEXT:    sub a3, a3, a5189; RV64IM-NEXT:    sub a2, a2, a6190; RV64IM-NEXT:    sh a3, 0(a0)191; RV64IM-NEXT:    sh a2, 2(a0)192; RV64IM-NEXT:    sh a4, 4(a0)193; RV64IM-NEXT:    sh a1, 6(a0)194; RV64IM-NEXT:    ret195  %1 = srem <4 x i16> %x, <i16 95, i16 -124, i16 98, i16 -1003>196  ret <4 x i16> %1197}198 199define <4 x i16> @fold_srem_vec_2(<4 x i16> %x) nounwind {200; RV32I-LABEL: fold_srem_vec_2:201; RV32I:       # %bb.0:202; RV32I-NEXT:    addi sp, sp, -32203; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill204; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill205; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill206; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill207; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill208; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill209; RV32I-NEXT:    lh a2, 0(a1)210; RV32I-NEXT:    lh s0, 4(a1)211; RV32I-NEXT:    lh s1, 8(a1)212; RV32I-NEXT:    lh s2, 12(a1)213; RV32I-NEXT:    mv s3, a0214; RV32I-NEXT:    li a1, 95215; RV32I-NEXT:    mv a0, a2216; RV32I-NEXT:    call __modsi3217; RV32I-NEXT:    mv s4, a0218; RV32I-NEXT:    li a1, 95219; RV32I-NEXT:    mv a0, s0220; RV32I-NEXT:    call __modsi3221; RV32I-NEXT:    mv s0, a0222; RV32I-NEXT:    li a1, 95223; RV32I-NEXT:    mv a0, s1224; RV32I-NEXT:    call __modsi3225; RV32I-NEXT:    mv s1, a0226; RV32I-NEXT:    li a1, 95227; RV32I-NEXT:    mv a0, s2228; RV32I-NEXT:    call __modsi3229; RV32I-NEXT:    sh s4, 0(s3)230; RV32I-NEXT:    sh s0, 2(s3)231; RV32I-NEXT:    sh s1, 4(s3)232; RV32I-NEXT:    sh a0, 6(s3)233; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload234; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload235; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload236; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload237; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload238; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload239; RV32I-NEXT:    addi sp, sp, 32240; RV32I-NEXT:    ret241;242; RV32IM-LABEL: fold_srem_vec_2:243; RV32IM:       # %bb.0:244; RV32IM-NEXT:    lh a2, 0(a1)245; RV32IM-NEXT:    lh a3, 4(a1)246; RV32IM-NEXT:    lh a4, 8(a1)247; RV32IM-NEXT:    lh a1, 12(a1)248; RV32IM-NEXT:    lui a5, 706409249; RV32IM-NEXT:    addi a5, a5, 389250; RV32IM-NEXT:    mulh a6, a2, a5251; RV32IM-NEXT:    mulh a7, a3, a5252; RV32IM-NEXT:    mulh t0, a4, a5253; RV32IM-NEXT:    mulh a5, a1, a5254; RV32IM-NEXT:    add a6, a6, a2255; RV32IM-NEXT:    add a7, a7, a3256; RV32IM-NEXT:    add t0, t0, a4257; RV32IM-NEXT:    add a5, a5, a1258; RV32IM-NEXT:    srli t1, a6, 31259; RV32IM-NEXT:    srli a6, a6, 6260; RV32IM-NEXT:    add a6, a6, t1261; RV32IM-NEXT:    srli t1, a7, 31262; RV32IM-NEXT:    srli a7, a7, 6263; RV32IM-NEXT:    add a7, a7, t1264; RV32IM-NEXT:    srli t1, t0, 31265; RV32IM-NEXT:    srli t0, t0, 6266; RV32IM-NEXT:    add t0, t0, t1267; RV32IM-NEXT:    srli t1, a5, 31268; RV32IM-NEXT:    srli a5, a5, 6269; RV32IM-NEXT:    add a5, a5, t1270; RV32IM-NEXT:    li t1, 95271; RV32IM-NEXT:    mul a6, a6, t1272; RV32IM-NEXT:    mul a7, a7, t1273; RV32IM-NEXT:    mul t0, t0, t1274; RV32IM-NEXT:    mul a5, a5, t1275; RV32IM-NEXT:    sub a2, a2, a6276; RV32IM-NEXT:    sub a3, a3, a7277; RV32IM-NEXT:    sub a4, a4, t0278; RV32IM-NEXT:    sub a1, a1, a5279; RV32IM-NEXT:    sh a2, 0(a0)280; RV32IM-NEXT:    sh a3, 2(a0)281; RV32IM-NEXT:    sh a4, 4(a0)282; RV32IM-NEXT:    sh a1, 6(a0)283; RV32IM-NEXT:    ret284;285; RV64I-LABEL: fold_srem_vec_2:286; RV64I:       # %bb.0:287; RV64I-NEXT:    addi sp, sp, -48288; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill289; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill290; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill291; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill292; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill293; RV64I-NEXT:    sd s4, 0(sp) # 8-byte Folded Spill294; RV64I-NEXT:    lh a2, 0(a1)295; RV64I-NEXT:    lh s0, 8(a1)296; RV64I-NEXT:    lh s1, 16(a1)297; RV64I-NEXT:    lh s2, 24(a1)298; RV64I-NEXT:    mv s3, a0299; RV64I-NEXT:    li a1, 95300; RV64I-NEXT:    mv a0, a2301; RV64I-NEXT:    call __moddi3302; RV64I-NEXT:    mv s4, a0303; RV64I-NEXT:    li a1, 95304; RV64I-NEXT:    mv a0, s0305; RV64I-NEXT:    call __moddi3306; RV64I-NEXT:    mv s0, a0307; RV64I-NEXT:    li a1, 95308; RV64I-NEXT:    mv a0, s1309; RV64I-NEXT:    call __moddi3310; RV64I-NEXT:    mv s1, a0311; RV64I-NEXT:    li a1, 95312; RV64I-NEXT:    mv a0, s2313; RV64I-NEXT:    call __moddi3314; RV64I-NEXT:    sh s4, 0(s3)315; RV64I-NEXT:    sh s0, 2(s3)316; RV64I-NEXT:    sh s1, 4(s3)317; RV64I-NEXT:    sh a0, 6(s3)318; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload319; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload320; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload321; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload322; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload323; RV64I-NEXT:    ld s4, 0(sp) # 8-byte Folded Reload324; RV64I-NEXT:    addi sp, sp, 48325; RV64I-NEXT:    ret326;327; RV64IM-LABEL: fold_srem_vec_2:328; RV64IM:       # %bb.0:329; RV64IM-NEXT:    lui a2, %hi(.LCPI1_0)330; RV64IM-NEXT:    ld a2, %lo(.LCPI1_0)(a2)331; RV64IM-NEXT:    lh a3, 0(a1)332; RV64IM-NEXT:    lh a4, 8(a1)333; RV64IM-NEXT:    lh a5, 16(a1)334; RV64IM-NEXT:    lh a1, 24(a1)335; RV64IM-NEXT:    mulh a6, a3, a2336; RV64IM-NEXT:    mulh a7, a4, a2337; RV64IM-NEXT:    mulh t0, a5, a2338; RV64IM-NEXT:    mulh a2, a1, a2339; RV64IM-NEXT:    add a6, a6, a3340; RV64IM-NEXT:    add a7, a7, a4341; RV64IM-NEXT:    add t0, t0, a5342; RV64IM-NEXT:    add a2, a2, a1343; RV64IM-NEXT:    srli t1, a6, 63344; RV64IM-NEXT:    srli a6, a6, 6345; RV64IM-NEXT:    add a6, a6, t1346; RV64IM-NEXT:    srli t1, a7, 63347; RV64IM-NEXT:    srli a7, a7, 6348; RV64IM-NEXT:    add a7, a7, t1349; RV64IM-NEXT:    srli t1, t0, 63350; RV64IM-NEXT:    srli t0, t0, 6351; RV64IM-NEXT:    add t0, t0, t1352; RV64IM-NEXT:    srli t1, a2, 63353; RV64IM-NEXT:    srli a2, a2, 6354; RV64IM-NEXT:    add a2, a2, t1355; RV64IM-NEXT:    li t1, 95356; RV64IM-NEXT:    mul a6, a6, t1357; RV64IM-NEXT:    mul a7, a7, t1358; RV64IM-NEXT:    mul t0, t0, t1359; RV64IM-NEXT:    mul a2, a2, t1360; RV64IM-NEXT:    sub a3, a3, a6361; RV64IM-NEXT:    sub a4, a4, a7362; RV64IM-NEXT:    sub a5, a5, t0363; RV64IM-NEXT:    sub a1, a1, a2364; RV64IM-NEXT:    sh a3, 0(a0)365; RV64IM-NEXT:    sh a4, 2(a0)366; RV64IM-NEXT:    sh a5, 4(a0)367; RV64IM-NEXT:    sh a1, 6(a0)368; RV64IM-NEXT:    ret369  %1 = srem <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>370  ret <4 x i16> %1371}372 373 374; Don't fold if we can combine srem with sdiv.375define <4 x i16> @combine_srem_sdiv(<4 x i16> %x) nounwind {376; RV32I-LABEL: combine_srem_sdiv:377; RV32I:       # %bb.0:378; RV32I-NEXT:    addi sp, sp, -48379; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill380; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill381; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill382; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill383; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill384; RV32I-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill385; RV32I-NEXT:    sw s5, 20(sp) # 4-byte Folded Spill386; RV32I-NEXT:    sw s6, 16(sp) # 4-byte Folded Spill387; RV32I-NEXT:    sw s7, 12(sp) # 4-byte Folded Spill388; RV32I-NEXT:    sw s8, 8(sp) # 4-byte Folded Spill389; RV32I-NEXT:    lh s1, 0(a1)390; RV32I-NEXT:    lh s2, 4(a1)391; RV32I-NEXT:    lh s3, 8(a1)392; RV32I-NEXT:    lh s4, 12(a1)393; RV32I-NEXT:    mv s0, a0394; RV32I-NEXT:    li a1, 95395; RV32I-NEXT:    mv a0, s4396; RV32I-NEXT:    call __modsi3397; RV32I-NEXT:    mv s5, a0398; RV32I-NEXT:    li a1, 95399; RV32I-NEXT:    mv a0, s3400; RV32I-NEXT:    call __modsi3401; RV32I-NEXT:    mv s6, a0402; RV32I-NEXT:    li a1, 95403; RV32I-NEXT:    mv a0, s2404; RV32I-NEXT:    call __modsi3405; RV32I-NEXT:    mv s7, a0406; RV32I-NEXT:    li a1, 95407; RV32I-NEXT:    mv a0, s1408; RV32I-NEXT:    call __modsi3409; RV32I-NEXT:    mv s8, a0410; RV32I-NEXT:    li a1, 95411; RV32I-NEXT:    mv a0, s4412; RV32I-NEXT:    call __divsi3413; RV32I-NEXT:    mv s4, a0414; RV32I-NEXT:    li a1, 95415; RV32I-NEXT:    mv a0, s3416; RV32I-NEXT:    call __divsi3417; RV32I-NEXT:    mv s3, a0418; RV32I-NEXT:    li a1, 95419; RV32I-NEXT:    mv a0, s2420; RV32I-NEXT:    call __divsi3421; RV32I-NEXT:    mv s2, a0422; RV32I-NEXT:    li a1, 95423; RV32I-NEXT:    mv a0, s1424; RV32I-NEXT:    call __divsi3425; RV32I-NEXT:    add a0, s8, a0426; RV32I-NEXT:    add s2, s7, s2427; RV32I-NEXT:    add s3, s6, s3428; RV32I-NEXT:    add s4, s5, s4429; RV32I-NEXT:    sh a0, 0(s0)430; RV32I-NEXT:    sh s2, 2(s0)431; RV32I-NEXT:    sh s3, 4(s0)432; RV32I-NEXT:    sh s4, 6(s0)433; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload434; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload435; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload436; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload437; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload438; RV32I-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload439; RV32I-NEXT:    lw s5, 20(sp) # 4-byte Folded Reload440; RV32I-NEXT:    lw s6, 16(sp) # 4-byte Folded Reload441; RV32I-NEXT:    lw s7, 12(sp) # 4-byte Folded Reload442; RV32I-NEXT:    lw s8, 8(sp) # 4-byte Folded Reload443; RV32I-NEXT:    addi sp, sp, 48444; RV32I-NEXT:    ret445;446; RV32IM-LABEL: combine_srem_sdiv:447; RV32IM:       # %bb.0:448; RV32IM-NEXT:    lh a2, 0(a1)449; RV32IM-NEXT:    lh a3, 4(a1)450; RV32IM-NEXT:    lh a4, 8(a1)451; RV32IM-NEXT:    lh a1, 12(a1)452; RV32IM-NEXT:    lui a5, 706409453; RV32IM-NEXT:    li a6, 95454; RV32IM-NEXT:    addi a5, a5, 389455; RV32IM-NEXT:    mulh a7, a1, a5456; RV32IM-NEXT:    mulh t0, a4, a5457; RV32IM-NEXT:    mulh t1, a3, a5458; RV32IM-NEXT:    mulh a5, a2, a5459; RV32IM-NEXT:    add a7, a7, a1460; RV32IM-NEXT:    add t0, t0, a4461; RV32IM-NEXT:    add t1, t1, a3462; RV32IM-NEXT:    add a5, a5, a2463; RV32IM-NEXT:    srli t2, a7, 31464; RV32IM-NEXT:    srai a7, a7, 6465; RV32IM-NEXT:    srli t3, t0, 31466; RV32IM-NEXT:    srai t0, t0, 6467; RV32IM-NEXT:    srli t4, t1, 31468; RV32IM-NEXT:    srai t1, t1, 6469; RV32IM-NEXT:    srli t5, a5, 31470; RV32IM-NEXT:    srai a5, a5, 6471; RV32IM-NEXT:    add a7, a7, t2472; RV32IM-NEXT:    add t0, t0, t3473; RV32IM-NEXT:    add t1, t1, t4474; RV32IM-NEXT:    add a5, a5, t5475; RV32IM-NEXT:    mul t2, a7, a6476; RV32IM-NEXT:    mul t3, t0, a6477; RV32IM-NEXT:    mul t4, t1, a6478; RV32IM-NEXT:    mul a6, a5, a6479; RV32IM-NEXT:    add a2, a2, a5480; RV32IM-NEXT:    add a3, a3, t1481; RV32IM-NEXT:    add a4, a4, t0482; RV32IM-NEXT:    add a1, a1, a7483; RV32IM-NEXT:    sub a2, a2, a6484; RV32IM-NEXT:    sub a3, a3, t4485; RV32IM-NEXT:    sub a4, a4, t3486; RV32IM-NEXT:    sub a1, a1, t2487; RV32IM-NEXT:    sh a2, 0(a0)488; RV32IM-NEXT:    sh a3, 2(a0)489; RV32IM-NEXT:    sh a4, 4(a0)490; RV32IM-NEXT:    sh a1, 6(a0)491; RV32IM-NEXT:    ret492;493; RV64I-LABEL: combine_srem_sdiv:494; RV64I:       # %bb.0:495; RV64I-NEXT:    addi sp, sp, -80496; RV64I-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill497; RV64I-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill498; RV64I-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill499; RV64I-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill500; RV64I-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill501; RV64I-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill502; RV64I-NEXT:    sd s5, 24(sp) # 8-byte Folded Spill503; RV64I-NEXT:    sd s6, 16(sp) # 8-byte Folded Spill504; RV64I-NEXT:    sd s7, 8(sp) # 8-byte Folded Spill505; RV64I-NEXT:    sd s8, 0(sp) # 8-byte Folded Spill506; RV64I-NEXT:    lh s1, 0(a1)507; RV64I-NEXT:    lh s2, 8(a1)508; RV64I-NEXT:    lh s3, 16(a1)509; RV64I-NEXT:    lh s4, 24(a1)510; RV64I-NEXT:    mv s0, a0511; RV64I-NEXT:    li a1, 95512; RV64I-NEXT:    mv a0, s4513; RV64I-NEXT:    call __moddi3514; RV64I-NEXT:    mv s5, a0515; RV64I-NEXT:    li a1, 95516; RV64I-NEXT:    mv a0, s3517; RV64I-NEXT:    call __moddi3518; RV64I-NEXT:    mv s6, a0519; RV64I-NEXT:    li a1, 95520; RV64I-NEXT:    mv a0, s2521; RV64I-NEXT:    call __moddi3522; RV64I-NEXT:    mv s7, a0523; RV64I-NEXT:    li a1, 95524; RV64I-NEXT:    mv a0, s1525; RV64I-NEXT:    call __moddi3526; RV64I-NEXT:    mv s8, a0527; RV64I-NEXT:    li a1, 95528; RV64I-NEXT:    mv a0, s4529; RV64I-NEXT:    call __divdi3530; RV64I-NEXT:    mv s4, a0531; RV64I-NEXT:    li a1, 95532; RV64I-NEXT:    mv a0, s3533; RV64I-NEXT:    call __divdi3534; RV64I-NEXT:    mv s3, a0535; RV64I-NEXT:    li a1, 95536; RV64I-NEXT:    mv a0, s2537; RV64I-NEXT:    call __divdi3538; RV64I-NEXT:    mv s2, a0539; RV64I-NEXT:    li a1, 95540; RV64I-NEXT:    mv a0, s1541; RV64I-NEXT:    call __divdi3542; RV64I-NEXT:    add a0, s8, a0543; RV64I-NEXT:    add s2, s7, s2544; RV64I-NEXT:    add s3, s6, s3545; RV64I-NEXT:    add s4, s5, s4546; RV64I-NEXT:    sh a0, 0(s0)547; RV64I-NEXT:    sh s2, 2(s0)548; RV64I-NEXT:    sh s3, 4(s0)549; RV64I-NEXT:    sh s4, 6(s0)550; RV64I-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload551; RV64I-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload552; RV64I-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload553; RV64I-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload554; RV64I-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload555; RV64I-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload556; RV64I-NEXT:    ld s5, 24(sp) # 8-byte Folded Reload557; RV64I-NEXT:    ld s6, 16(sp) # 8-byte Folded Reload558; RV64I-NEXT:    ld s7, 8(sp) # 8-byte Folded Reload559; RV64I-NEXT:    ld s8, 0(sp) # 8-byte Folded Reload560; RV64I-NEXT:    addi sp, sp, 80561; RV64I-NEXT:    ret562;563; RV64IM-LABEL: combine_srem_sdiv:564; RV64IM:       # %bb.0:565; RV64IM-NEXT:    lui a2, %hi(.LCPI2_0)566; RV64IM-NEXT:    ld a2, %lo(.LCPI2_0)(a2)567; RV64IM-NEXT:    lh a3, 16(a1)568; RV64IM-NEXT:    lh a4, 24(a1)569; RV64IM-NEXT:    lh a5, 0(a1)570; RV64IM-NEXT:    lh a1, 8(a1)571; RV64IM-NEXT:    li a6, 95572; RV64IM-NEXT:    mulh a7, a4, a2573; RV64IM-NEXT:    mulh t0, a3, a2574; RV64IM-NEXT:    mulh t1, a1, a2575; RV64IM-NEXT:    mulh a2, a5, a2576; RV64IM-NEXT:    add a7, a7, a4577; RV64IM-NEXT:    add t0, t0, a3578; RV64IM-NEXT:    add t1, t1, a1579; RV64IM-NEXT:    add a2, a2, a5580; RV64IM-NEXT:    srli t2, a7, 63581; RV64IM-NEXT:    srai a7, a7, 6582; RV64IM-NEXT:    srli t3, t0, 63583; RV64IM-NEXT:    srai t0, t0, 6584; RV64IM-NEXT:    srli t4, t1, 63585; RV64IM-NEXT:    srai t1, t1, 6586; RV64IM-NEXT:    srli t5, a2, 63587; RV64IM-NEXT:    srai a2, a2, 6588; RV64IM-NEXT:    add a7, a7, t2589; RV64IM-NEXT:    add t0, t0, t3590; RV64IM-NEXT:    add t1, t1, t4591; RV64IM-NEXT:    add a2, a2, t5592; RV64IM-NEXT:    mul t2, a7, a6593; RV64IM-NEXT:    mul t3, t0, a6594; RV64IM-NEXT:    mul t4, t1, a6595; RV64IM-NEXT:    mul a6, a2, a6596; RV64IM-NEXT:    add a2, a5, a2597; RV64IM-NEXT:    add a1, a1, t1598; RV64IM-NEXT:    add a3, a3, t0599; RV64IM-NEXT:    add a4, a4, a7600; RV64IM-NEXT:    sub a2, a2, a6601; RV64IM-NEXT:    sub a1, a1, t4602; RV64IM-NEXT:    sub a3, a3, t3603; RV64IM-NEXT:    sub a4, a4, t2604; RV64IM-NEXT:    sh a2, 0(a0)605; RV64IM-NEXT:    sh a1, 2(a0)606; RV64IM-NEXT:    sh a3, 4(a0)607; RV64IM-NEXT:    sh a4, 6(a0)608; RV64IM-NEXT:    ret609  %1 = srem <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>610  %2 = sdiv <4 x i16> %x, <i16 95, i16 95, i16 95, i16 95>611  %3 = add <4 x i16> %1, %2612  ret <4 x i16> %3613}614 615; Don't fold for divisors that are a power of two.616define <4 x i16> @dont_fold_srem_power_of_two(<4 x i16> %x) nounwind {617; RV32I-LABEL: dont_fold_srem_power_of_two:618; RV32I:       # %bb.0:619; RV32I-NEXT:    addi sp, sp, -32620; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill621; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill622; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill623; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill624; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill625; RV32I-NEXT:    mv s0, a0626; RV32I-NEXT:    lh a2, 0(a1)627; RV32I-NEXT:    lh a3, 4(a1)628; RV32I-NEXT:    lh a4, 8(a1)629; RV32I-NEXT:    lh a0, 12(a1)630; RV32I-NEXT:    srli a1, a2, 26631; RV32I-NEXT:    add a1, a2, a1632; RV32I-NEXT:    andi a1, a1, -64633; RV32I-NEXT:    sub s1, a2, a1634; RV32I-NEXT:    srli a1, a3, 27635; RV32I-NEXT:    add a1, a3, a1636; RV32I-NEXT:    andi a1, a1, -32637; RV32I-NEXT:    sub s2, a3, a1638; RV32I-NEXT:    srli a1, a4, 29639; RV32I-NEXT:    add a1, a4, a1640; RV32I-NEXT:    andi a1, a1, -8641; RV32I-NEXT:    sub s3, a4, a1642; RV32I-NEXT:    li a1, 95643; RV32I-NEXT:    call __modsi3644; RV32I-NEXT:    sh s1, 0(s0)645; RV32I-NEXT:    sh s2, 2(s0)646; RV32I-NEXT:    sh s3, 4(s0)647; RV32I-NEXT:    sh a0, 6(s0)648; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload649; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload650; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload651; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload652; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload653; RV32I-NEXT:    addi sp, sp, 32654; RV32I-NEXT:    ret655;656; RV32IM-LABEL: dont_fold_srem_power_of_two:657; RV32IM:       # %bb.0:658; RV32IM-NEXT:    lh a2, 4(a1)659; RV32IM-NEXT:    lh a3, 8(a1)660; RV32IM-NEXT:    lh a4, 12(a1)661; RV32IM-NEXT:    lh a1, 0(a1)662; RV32IM-NEXT:    lui a5, 706409663; RV32IM-NEXT:    addi a5, a5, 389664; RV32IM-NEXT:    mulh a5, a4, a5665; RV32IM-NEXT:    add a5, a5, a4666; RV32IM-NEXT:    srli a6, a5, 31667; RV32IM-NEXT:    srli a5, a5, 6668; RV32IM-NEXT:    add a5, a5, a6669; RV32IM-NEXT:    srli a6, a1, 26670; RV32IM-NEXT:    add a6, a1, a6671; RV32IM-NEXT:    andi a6, a6, -64672; RV32IM-NEXT:    sub a1, a1, a6673; RV32IM-NEXT:    srli a6, a2, 27674; RV32IM-NEXT:    add a6, a2, a6675; RV32IM-NEXT:    andi a6, a6, -32676; RV32IM-NEXT:    sub a2, a2, a6677; RV32IM-NEXT:    srli a6, a3, 29678; RV32IM-NEXT:    add a6, a3, a6679; RV32IM-NEXT:    andi a6, a6, -8680; RV32IM-NEXT:    sub a3, a3, a6681; RV32IM-NEXT:    li a6, 95682; RV32IM-NEXT:    mul a5, a5, a6683; RV32IM-NEXT:    sub a4, a4, a5684; RV32IM-NEXT:    sh a1, 0(a0)685; RV32IM-NEXT:    sh a2, 2(a0)686; RV32IM-NEXT:    sh a3, 4(a0)687; RV32IM-NEXT:    sh a4, 6(a0)688; RV32IM-NEXT:    ret689;690; RV64I-LABEL: dont_fold_srem_power_of_two:691; RV64I:       # %bb.0:692; RV64I-NEXT:    addi sp, sp, -48693; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill694; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill695; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill696; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill697; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill698; RV64I-NEXT:    mv s0, a0699; RV64I-NEXT:    lh a2, 0(a1)700; RV64I-NEXT:    lh a3, 8(a1)701; RV64I-NEXT:    lh a4, 16(a1)702; RV64I-NEXT:    lh a0, 24(a1)703; RV64I-NEXT:    srli a1, a2, 58704; RV64I-NEXT:    add a1, a2, a1705; RV64I-NEXT:    andi a1, a1, -64706; RV64I-NEXT:    sub s1, a2, a1707; RV64I-NEXT:    srli a1, a3, 59708; RV64I-NEXT:    add a1, a3, a1709; RV64I-NEXT:    andi a1, a1, -32710; RV64I-NEXT:    sub s2, a3, a1711; RV64I-NEXT:    srli a1, a4, 61712; RV64I-NEXT:    add a1, a4, a1713; RV64I-NEXT:    andi a1, a1, -8714; RV64I-NEXT:    sub s3, a4, a1715; RV64I-NEXT:    li a1, 95716; RV64I-NEXT:    call __moddi3717; RV64I-NEXT:    sh s1, 0(s0)718; RV64I-NEXT:    sh s2, 2(s0)719; RV64I-NEXT:    sh s3, 4(s0)720; RV64I-NEXT:    sh a0, 6(s0)721; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload722; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload723; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload724; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload725; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload726; RV64I-NEXT:    addi sp, sp, 48727; RV64I-NEXT:    ret728;729; RV64IM-LABEL: dont_fold_srem_power_of_two:730; RV64IM:       # %bb.0:731; RV64IM-NEXT:    lh a2, 0(a1)732; RV64IM-NEXT:    lh a3, 8(a1)733; RV64IM-NEXT:    lh a4, 16(a1)734; RV64IM-NEXT:    lh a1, 24(a1)735; RV64IM-NEXT:    lui a5, %hi(.LCPI3_0)736; RV64IM-NEXT:    ld a5, %lo(.LCPI3_0)(a5)737; RV64IM-NEXT:    srli a6, a2, 58738; RV64IM-NEXT:    add a6, a2, a6739; RV64IM-NEXT:    andi a6, a6, -64740; RV64IM-NEXT:    sub a2, a2, a6741; RV64IM-NEXT:    srli a6, a3, 59742; RV64IM-NEXT:    add a6, a3, a6743; RV64IM-NEXT:    andi a6, a6, -32744; RV64IM-NEXT:    sub a3, a3, a6745; RV64IM-NEXT:    srli a6, a4, 61746; RV64IM-NEXT:    mulh a5, a1, a5747; RV64IM-NEXT:    add a6, a4, a6748; RV64IM-NEXT:    add a5, a5, a1749; RV64IM-NEXT:    andi a6, a6, -8750; RV64IM-NEXT:    sub a4, a4, a6751; RV64IM-NEXT:    srli a6, a5, 63752; RV64IM-NEXT:    srli a5, a5, 6753; RV64IM-NEXT:    add a5, a5, a6754; RV64IM-NEXT:    li a6, 95755; RV64IM-NEXT:    mul a5, a5, a6756; RV64IM-NEXT:    sub a1, a1, a5757; RV64IM-NEXT:    sh a2, 0(a0)758; RV64IM-NEXT:    sh a3, 2(a0)759; RV64IM-NEXT:    sh a4, 4(a0)760; RV64IM-NEXT:    sh a1, 6(a0)761; RV64IM-NEXT:    ret762  %1 = srem <4 x i16> %x, <i16 64, i16 32, i16 8, i16 95>763  ret <4 x i16> %1764}765 766; Don't fold if the divisor is one.767define <4 x i16> @dont_fold_srem_one(<4 x i16> %x) nounwind {768; RV32I-LABEL: dont_fold_srem_one:769; RV32I:       # %bb.0:770; RV32I-NEXT:    addi sp, sp, -32771; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill772; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill773; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill774; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill775; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill776; RV32I-NEXT:    lh a2, 4(a1)777; RV32I-NEXT:    lh s0, 8(a1)778; RV32I-NEXT:    lh s1, 12(a1)779; RV32I-NEXT:    mv s2, a0780; RV32I-NEXT:    li a1, 654781; RV32I-NEXT:    mv a0, a2782; RV32I-NEXT:    call __modsi3783; RV32I-NEXT:    mv s3, a0784; RV32I-NEXT:    li a1, 23785; RV32I-NEXT:    mv a0, s0786; RV32I-NEXT:    call __modsi3787; RV32I-NEXT:    mv s0, a0788; RV32I-NEXT:    lui a1, 1789; RV32I-NEXT:    addi a1, a1, 1327790; RV32I-NEXT:    mv a0, s1791; RV32I-NEXT:    call __modsi3792; RV32I-NEXT:    sh zero, 0(s2)793; RV32I-NEXT:    sh s3, 2(s2)794; RV32I-NEXT:    sh s0, 4(s2)795; RV32I-NEXT:    sh a0, 6(s2)796; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload797; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload798; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload799; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload800; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload801; RV32I-NEXT:    addi sp, sp, 32802; RV32I-NEXT:    ret803;804; RV32IM-LABEL: dont_fold_srem_one:805; RV32IM:       # %bb.0:806; RV32IM-NEXT:    lh a2, 4(a1)807; RV32IM-NEXT:    lh a3, 8(a1)808; RV32IM-NEXT:    lh a1, 12(a1)809; RV32IM-NEXT:    lui a4, 820904810; RV32IM-NEXT:    lui a5, 729444811; RV32IM-NEXT:    lui a6, 395996812; RV32IM-NEXT:    addi a4, a4, -1903813; RV32IM-NEXT:    addi a5, a5, 713814; RV32IM-NEXT:    addi a6, a6, -2009815; RV32IM-NEXT:    mulh a4, a2, a4816; RV32IM-NEXT:    mulh a5, a3, a5817; RV32IM-NEXT:    mulh a6, a1, a6818; RV32IM-NEXT:    add a4, a4, a2819; RV32IM-NEXT:    add a5, a5, a3820; RV32IM-NEXT:    srli a7, a6, 31821; RV32IM-NEXT:    srli a6, a6, 11822; RV32IM-NEXT:    add a6, a6, a7823; RV32IM-NEXT:    srli a7, a4, 31824; RV32IM-NEXT:    srli a4, a4, 9825; RV32IM-NEXT:    add a4, a4, a7826; RV32IM-NEXT:    srli a7, a5, 31827; RV32IM-NEXT:    srli a5, a5, 4828; RV32IM-NEXT:    add a5, a5, a7829; RV32IM-NEXT:    lui a7, 1830; RV32IM-NEXT:    addi a7, a7, 1327831; RV32IM-NEXT:    mul a6, a6, a7832; RV32IM-NEXT:    li a7, 654833; RV32IM-NEXT:    mul a4, a4, a7834; RV32IM-NEXT:    li a7, 23835; RV32IM-NEXT:    mul a5, a5, a7836; RV32IM-NEXT:    sub a1, a1, a6837; RV32IM-NEXT:    sub a2, a2, a4838; RV32IM-NEXT:    sub a3, a3, a5839; RV32IM-NEXT:    sh zero, 0(a0)840; RV32IM-NEXT:    sh a2, 2(a0)841; RV32IM-NEXT:    sh a3, 4(a0)842; RV32IM-NEXT:    sh a1, 6(a0)843; RV32IM-NEXT:    ret844;845; RV64I-LABEL: dont_fold_srem_one:846; RV64I:       # %bb.0:847; RV64I-NEXT:    addi sp, sp, -48848; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill849; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill850; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill851; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill852; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill853; RV64I-NEXT:    lh a2, 8(a1)854; RV64I-NEXT:    lh s0, 16(a1)855; RV64I-NEXT:    lh s1, 24(a1)856; RV64I-NEXT:    mv s2, a0857; RV64I-NEXT:    li a1, 654858; RV64I-NEXT:    mv a0, a2859; RV64I-NEXT:    call __moddi3860; RV64I-NEXT:    mv s3, a0861; RV64I-NEXT:    li a1, 23862; RV64I-NEXT:    mv a0, s0863; RV64I-NEXT:    call __moddi3864; RV64I-NEXT:    mv s0, a0865; RV64I-NEXT:    lui a1, 1866; RV64I-NEXT:    addi a1, a1, 1327867; RV64I-NEXT:    mv a0, s1868; RV64I-NEXT:    call __moddi3869; RV64I-NEXT:    sh zero, 0(s2)870; RV64I-NEXT:    sh s3, 2(s2)871; RV64I-NEXT:    sh s0, 4(s2)872; RV64I-NEXT:    sh a0, 6(s2)873; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload874; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload875; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload876; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload877; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload878; RV64I-NEXT:    addi sp, sp, 48879; RV64I-NEXT:    ret880;881; RV64IM-LABEL: dont_fold_srem_one:882; RV64IM:       # %bb.0:883; RV64IM-NEXT:    lh a2, 8(a1)884; RV64IM-NEXT:    lh a3, 16(a1)885; RV64IM-NEXT:    lh a1, 24(a1)886; RV64IM-NEXT:    lui a4, %hi(.LCPI4_0)887; RV64IM-NEXT:    lui a5, %hi(.LCPI4_1)888; RV64IM-NEXT:    lui a6, %hi(.LCPI4_2)889; RV64IM-NEXT:    ld a4, %lo(.LCPI4_0)(a4)890; RV64IM-NEXT:    ld a5, %lo(.LCPI4_1)(a5)891; RV64IM-NEXT:    ld a6, %lo(.LCPI4_2)(a6)892; RV64IM-NEXT:    mulh a4, a3, a4893; RV64IM-NEXT:    mulh a5, a2, a5894; RV64IM-NEXT:    mulh a6, a1, a6895; RV64IM-NEXT:    add a4, a4, a3896; RV64IM-NEXT:    srli a7, a5, 63897; RV64IM-NEXT:    srli a5, a5, 8898; RV64IM-NEXT:    add a5, a5, a7899; RV64IM-NEXT:    srli a7, a6, 63900; RV64IM-NEXT:    srli a6, a6, 11901; RV64IM-NEXT:    add a6, a6, a7902; RV64IM-NEXT:    srli a7, a4, 63903; RV64IM-NEXT:    srli a4, a4, 4904; RV64IM-NEXT:    add a4, a4, a7905; RV64IM-NEXT:    li a7, 654906; RV64IM-NEXT:    mul a5, a5, a7907; RV64IM-NEXT:    lui a7, 1908; RV64IM-NEXT:    addi a7, a7, 1327909; RV64IM-NEXT:    mul a6, a6, a7910; RV64IM-NEXT:    li a7, 23911; RV64IM-NEXT:    mul a4, a4, a7912; RV64IM-NEXT:    sub a2, a2, a5913; RV64IM-NEXT:    sub a1, a1, a6914; RV64IM-NEXT:    sub a3, a3, a4915; RV64IM-NEXT:    sh zero, 0(a0)916; RV64IM-NEXT:    sh a2, 2(a0)917; RV64IM-NEXT:    sh a3, 4(a0)918; RV64IM-NEXT:    sh a1, 6(a0)919; RV64IM-NEXT:    ret920  %1 = srem <4 x i16> %x, <i16 1, i16 654, i16 23, i16 5423>921  ret <4 x i16> %1922}923 924; Don't fold if the divisor is 2^15.925define <4 x i16> @dont_fold_urem_i16_smax(<4 x i16> %x) nounwind {926; RV32I-LABEL: dont_fold_urem_i16_smax:927; RV32I:       # %bb.0:928; RV32I-NEXT:    addi sp, sp, -32929; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill930; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill931; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill932; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill933; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill934; RV32I-NEXT:    mv s0, a0935; RV32I-NEXT:    lh a2, 4(a1)936; RV32I-NEXT:    lh a0, 8(a1)937; RV32I-NEXT:    lh s1, 12(a1)938; RV32I-NEXT:    srli a1, a2, 17939; RV32I-NEXT:    add a1, a2, a1940; RV32I-NEXT:    lui a3, 8941; RV32I-NEXT:    and a1, a1, a3942; RV32I-NEXT:    sub s3, a2, a1943; RV32I-NEXT:    li a1, 23944; RV32I-NEXT:    call __modsi3945; RV32I-NEXT:    mv s2, a0946; RV32I-NEXT:    lui a1, 1947; RV32I-NEXT:    addi a1, a1, 1327948; RV32I-NEXT:    mv a0, s1949; RV32I-NEXT:    call __modsi3950; RV32I-NEXT:    sh zero, 0(s0)951; RV32I-NEXT:    sh s3, 2(s0)952; RV32I-NEXT:    sh s2, 4(s0)953; RV32I-NEXT:    sh a0, 6(s0)954; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload955; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload956; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload957; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload958; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload959; RV32I-NEXT:    addi sp, sp, 32960; RV32I-NEXT:    ret961;962; RV32IM-LABEL: dont_fold_urem_i16_smax:963; RV32IM:       # %bb.0:964; RV32IM-NEXT:    lh a2, 4(a1)965; RV32IM-NEXT:    lh a3, 8(a1)966; RV32IM-NEXT:    lh a1, 12(a1)967; RV32IM-NEXT:    lui a4, 729444968; RV32IM-NEXT:    lui a5, 395996969; RV32IM-NEXT:    lui a6, 8970; RV32IM-NEXT:    addi a4, a4, 713971; RV32IM-NEXT:    addi a5, a5, -2009972; RV32IM-NEXT:    mulh a4, a3, a4973; RV32IM-NEXT:    mulh a5, a1, a5974; RV32IM-NEXT:    srli a7, a5, 31975; RV32IM-NEXT:    srli a5, a5, 11976; RV32IM-NEXT:    add a5, a5, a7977; RV32IM-NEXT:    srli a7, a2, 17978; RV32IM-NEXT:    add a4, a4, a3979; RV32IM-NEXT:    add a7, a2, a7980; RV32IM-NEXT:    and a6, a7, a6981; RV32IM-NEXT:    srli a7, a4, 31982; RV32IM-NEXT:    srli a4, a4, 4983; RV32IM-NEXT:    add a4, a4, a7984; RV32IM-NEXT:    lui a7, 1985; RV32IM-NEXT:    addi a7, a7, 1327986; RV32IM-NEXT:    mul a5, a5, a7987; RV32IM-NEXT:    sub a2, a2, a6988; RV32IM-NEXT:    li a6, 23989; RV32IM-NEXT:    mul a4, a4, a6990; RV32IM-NEXT:    sub a1, a1, a5991; RV32IM-NEXT:    sub a3, a3, a4992; RV32IM-NEXT:    sh zero, 0(a0)993; RV32IM-NEXT:    sh a2, 2(a0)994; RV32IM-NEXT:    sh a3, 4(a0)995; RV32IM-NEXT:    sh a1, 6(a0)996; RV32IM-NEXT:    ret997;998; RV64I-LABEL: dont_fold_urem_i16_smax:999; RV64I:       # %bb.0:1000; RV64I-NEXT:    addi sp, sp, -481001; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill1002; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill1003; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill1004; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill1005; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill1006; RV64I-NEXT:    mv s0, a01007; RV64I-NEXT:    lh a2, 8(a1)1008; RV64I-NEXT:    lh a0, 16(a1)1009; RV64I-NEXT:    lh s1, 24(a1)1010; RV64I-NEXT:    srli a1, a2, 491011; RV64I-NEXT:    add a1, a2, a11012; RV64I-NEXT:    lui a3, 81013; RV64I-NEXT:    and a1, a1, a31014; RV64I-NEXT:    sub s3, a2, a11015; RV64I-NEXT:    li a1, 231016; RV64I-NEXT:    call __moddi31017; RV64I-NEXT:    mv s2, a01018; RV64I-NEXT:    lui a1, 11019; RV64I-NEXT:    addi a1, a1, 13271020; RV64I-NEXT:    mv a0, s11021; RV64I-NEXT:    call __moddi31022; RV64I-NEXT:    sh zero, 0(s0)1023; RV64I-NEXT:    sh s3, 2(s0)1024; RV64I-NEXT:    sh s2, 4(s0)1025; RV64I-NEXT:    sh a0, 6(s0)1026; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload1027; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload1028; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload1029; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload1030; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload1031; RV64I-NEXT:    addi sp, sp, 481032; RV64I-NEXT:    ret1033;1034; RV64IM-LABEL: dont_fold_urem_i16_smax:1035; RV64IM:       # %bb.0:1036; RV64IM-NEXT:    lh a2, 8(a1)1037; RV64IM-NEXT:    lh a3, 16(a1)1038; RV64IM-NEXT:    lh a1, 24(a1)1039; RV64IM-NEXT:    lui a4, %hi(.LCPI5_0)1040; RV64IM-NEXT:    lui a5, %hi(.LCPI5_1)1041; RV64IM-NEXT:    ld a5, %lo(.LCPI5_1)(a5)1042; RV64IM-NEXT:    lui a6, 81043; RV64IM-NEXT:    ld a4, %lo(.LCPI5_0)(a4)1044; RV64IM-NEXT:    srli a7, a2, 491045; RV64IM-NEXT:    mulh a5, a1, a51046; RV64IM-NEXT:    add a7, a2, a71047; RV64IM-NEXT:    and a6, a7, a61048; RV64IM-NEXT:    srli a7, a5, 631049; RV64IM-NEXT:    srli a5, a5, 111050; RV64IM-NEXT:    add a5, a5, a71051; RV64IM-NEXT:    mulh a4, a3, a41052; RV64IM-NEXT:    add a4, a4, a31053; RV64IM-NEXT:    sub a2, a2, a61054; RV64IM-NEXT:    srli a6, a4, 631055; RV64IM-NEXT:    srli a4, a4, 41056; RV64IM-NEXT:    add a4, a4, a61057; RV64IM-NEXT:    lui a6, 11058; RV64IM-NEXT:    addi a6, a6, 13271059; RV64IM-NEXT:    mul a5, a5, a61060; RV64IM-NEXT:    li a6, 231061; RV64IM-NEXT:    mul a4, a4, a61062; RV64IM-NEXT:    sub a1, a1, a51063; RV64IM-NEXT:    sub a3, a3, a41064; RV64IM-NEXT:    sh zero, 0(a0)1065; RV64IM-NEXT:    sh a2, 2(a0)1066; RV64IM-NEXT:    sh a3, 4(a0)1067; RV64IM-NEXT:    sh a1, 6(a0)1068; RV64IM-NEXT:    ret1069  %1 = srem <4 x i16> %x, <i16 1, i16 32768, i16 23, i16 5423>1070  ret <4 x i16> %11071}1072 1073; Don't fold i64 srem.1074define <4 x i64> @dont_fold_srem_i64(<4 x i64> %x) nounwind {1075; RV32I-LABEL: dont_fold_srem_i64:1076; RV32I:       # %bb.0:1077; RV32I-NEXT:    addi sp, sp, -481078; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill1079; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill1080; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill1081; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill1082; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill1083; RV32I-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill1084; RV32I-NEXT:    sw s5, 20(sp) # 4-byte Folded Spill1085; RV32I-NEXT:    sw s6, 16(sp) # 4-byte Folded Spill1086; RV32I-NEXT:    sw s7, 12(sp) # 4-byte Folded Spill1087; RV32I-NEXT:    sw s8, 8(sp) # 4-byte Folded Spill1088; RV32I-NEXT:    lw s1, 16(a1)1089; RV32I-NEXT:    lw s2, 20(a1)1090; RV32I-NEXT:    lw s3, 24(a1)1091; RV32I-NEXT:    lw s4, 28(a1)1092; RV32I-NEXT:    lw a3, 0(a1)1093; RV32I-NEXT:    lw a4, 4(a1)1094; RV32I-NEXT:    lw s5, 8(a1)1095; RV32I-NEXT:    lw s6, 12(a1)1096; RV32I-NEXT:    mv s0, a01097; RV32I-NEXT:    li a2, 11098; RV32I-NEXT:    mv a0, a31099; RV32I-NEXT:    mv a1, a41100; RV32I-NEXT:    li a3, 01101; RV32I-NEXT:    call __moddi31102; RV32I-NEXT:    mv s7, a01103; RV32I-NEXT:    mv s8, a11104; RV32I-NEXT:    li a2, 6541105; RV32I-NEXT:    mv a0, s51106; RV32I-NEXT:    mv a1, s61107; RV32I-NEXT:    li a3, 01108; RV32I-NEXT:    call __moddi31109; RV32I-NEXT:    mv s5, a01110; RV32I-NEXT:    mv s6, a11111; RV32I-NEXT:    li a2, 231112; RV32I-NEXT:    mv a0, s11113; RV32I-NEXT:    mv a1, s21114; RV32I-NEXT:    li a3, 01115; RV32I-NEXT:    call __moddi31116; RV32I-NEXT:    mv s1, a01117; RV32I-NEXT:    mv s2, a11118; RV32I-NEXT:    lui a2, 11119; RV32I-NEXT:    addi a2, a2, 13271120; RV32I-NEXT:    mv a0, s31121; RV32I-NEXT:    mv a1, s41122; RV32I-NEXT:    li a3, 01123; RV32I-NEXT:    call __moddi31124; RV32I-NEXT:    sw s1, 16(s0)1125; RV32I-NEXT:    sw s2, 20(s0)1126; RV32I-NEXT:    sw a0, 24(s0)1127; RV32I-NEXT:    sw a1, 28(s0)1128; RV32I-NEXT:    sw s7, 0(s0)1129; RV32I-NEXT:    sw s8, 4(s0)1130; RV32I-NEXT:    sw s5, 8(s0)1131; RV32I-NEXT:    sw s6, 12(s0)1132; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload1133; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload1134; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload1135; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload1136; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload1137; RV32I-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload1138; RV32I-NEXT:    lw s5, 20(sp) # 4-byte Folded Reload1139; RV32I-NEXT:    lw s6, 16(sp) # 4-byte Folded Reload1140; RV32I-NEXT:    lw s7, 12(sp) # 4-byte Folded Reload1141; RV32I-NEXT:    lw s8, 8(sp) # 4-byte Folded Reload1142; RV32I-NEXT:    addi sp, sp, 481143; RV32I-NEXT:    ret1144;1145; RV32IM-LABEL: dont_fold_srem_i64:1146; RV32IM:       # %bb.0:1147; RV32IM-NEXT:    addi sp, sp, -481148; RV32IM-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill1149; RV32IM-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill1150; RV32IM-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill1151; RV32IM-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill1152; RV32IM-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill1153; RV32IM-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill1154; RV32IM-NEXT:    sw s5, 20(sp) # 4-byte Folded Spill1155; RV32IM-NEXT:    sw s6, 16(sp) # 4-byte Folded Spill1156; RV32IM-NEXT:    sw s7, 12(sp) # 4-byte Folded Spill1157; RV32IM-NEXT:    sw s8, 8(sp) # 4-byte Folded Spill1158; RV32IM-NEXT:    lw s1, 16(a1)1159; RV32IM-NEXT:    lw s2, 20(a1)1160; RV32IM-NEXT:    lw s3, 24(a1)1161; RV32IM-NEXT:    lw s4, 28(a1)1162; RV32IM-NEXT:    lw a3, 0(a1)1163; RV32IM-NEXT:    lw a4, 4(a1)1164; RV32IM-NEXT:    lw s5, 8(a1)1165; RV32IM-NEXT:    lw s6, 12(a1)1166; RV32IM-NEXT:    mv s0, a01167; RV32IM-NEXT:    li a2, 11168; RV32IM-NEXT:    mv a0, a31169; RV32IM-NEXT:    mv a1, a41170; RV32IM-NEXT:    li a3, 01171; RV32IM-NEXT:    call __moddi31172; RV32IM-NEXT:    mv s7, a01173; RV32IM-NEXT:    mv s8, a11174; RV32IM-NEXT:    li a2, 6541175; RV32IM-NEXT:    mv a0, s51176; RV32IM-NEXT:    mv a1, s61177; RV32IM-NEXT:    li a3, 01178; RV32IM-NEXT:    call __moddi31179; RV32IM-NEXT:    mv s5, a01180; RV32IM-NEXT:    mv s6, a11181; RV32IM-NEXT:    li a2, 231182; RV32IM-NEXT:    mv a0, s11183; RV32IM-NEXT:    mv a1, s21184; RV32IM-NEXT:    li a3, 01185; RV32IM-NEXT:    call __moddi31186; RV32IM-NEXT:    mv s1, a01187; RV32IM-NEXT:    mv s2, a11188; RV32IM-NEXT:    lui a2, 11189; RV32IM-NEXT:    addi a2, a2, 13271190; RV32IM-NEXT:    mv a0, s31191; RV32IM-NEXT:    mv a1, s41192; RV32IM-NEXT:    li a3, 01193; RV32IM-NEXT:    call __moddi31194; RV32IM-NEXT:    sw s1, 16(s0)1195; RV32IM-NEXT:    sw s2, 20(s0)1196; RV32IM-NEXT:    sw a0, 24(s0)1197; RV32IM-NEXT:    sw a1, 28(s0)1198; RV32IM-NEXT:    sw s7, 0(s0)1199; RV32IM-NEXT:    sw s8, 4(s0)1200; RV32IM-NEXT:    sw s5, 8(s0)1201; RV32IM-NEXT:    sw s6, 12(s0)1202; RV32IM-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload1203; RV32IM-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload1204; RV32IM-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload1205; RV32IM-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload1206; RV32IM-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload1207; RV32IM-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload1208; RV32IM-NEXT:    lw s5, 20(sp) # 4-byte Folded Reload1209; RV32IM-NEXT:    lw s6, 16(sp) # 4-byte Folded Reload1210; RV32IM-NEXT:    lw s7, 12(sp) # 4-byte Folded Reload1211; RV32IM-NEXT:    lw s8, 8(sp) # 4-byte Folded Reload1212; RV32IM-NEXT:    addi sp, sp, 481213; RV32IM-NEXT:    ret1214;1215; RV64I-LABEL: dont_fold_srem_i64:1216; RV64I:       # %bb.0:1217; RV64I-NEXT:    addi sp, sp, -481218; RV64I-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill1219; RV64I-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill1220; RV64I-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill1221; RV64I-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill1222; RV64I-NEXT:    sd s3, 8(sp) # 8-byte Folded Spill1223; RV64I-NEXT:    ld a2, 8(a1)1224; RV64I-NEXT:    ld s0, 16(a1)1225; RV64I-NEXT:    ld s1, 24(a1)1226; RV64I-NEXT:    mv s2, a01227; RV64I-NEXT:    li a1, 6541228; RV64I-NEXT:    mv a0, a21229; RV64I-NEXT:    call __moddi31230; RV64I-NEXT:    mv s3, a01231; RV64I-NEXT:    li a1, 231232; RV64I-NEXT:    mv a0, s01233; RV64I-NEXT:    call __moddi31234; RV64I-NEXT:    mv s0, a01235; RV64I-NEXT:    lui a1, 11236; RV64I-NEXT:    addi a1, a1, 13271237; RV64I-NEXT:    mv a0, s11238; RV64I-NEXT:    call __moddi31239; RV64I-NEXT:    sd zero, 0(s2)1240; RV64I-NEXT:    sd s3, 8(s2)1241; RV64I-NEXT:    sd s0, 16(s2)1242; RV64I-NEXT:    sd a0, 24(s2)1243; RV64I-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload1244; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload1245; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload1246; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload1247; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload1248; RV64I-NEXT:    addi sp, sp, 481249; RV64I-NEXT:    ret1250;1251; RV64IM-LABEL: dont_fold_srem_i64:1252; RV64IM:       # %bb.0:1253; RV64IM-NEXT:    ld a2, 8(a1)1254; RV64IM-NEXT:    ld a3, 16(a1)1255; RV64IM-NEXT:    ld a1, 24(a1)1256; RV64IM-NEXT:    lui a4, %hi(.LCPI6_0)1257; RV64IM-NEXT:    lui a5, %hi(.LCPI6_1)1258; RV64IM-NEXT:    lui a6, %hi(.LCPI6_2)1259; RV64IM-NEXT:    ld a4, %lo(.LCPI6_0)(a4)1260; RV64IM-NEXT:    ld a5, %lo(.LCPI6_1)(a5)1261; RV64IM-NEXT:    ld a6, %lo(.LCPI6_2)(a6)1262; RV64IM-NEXT:    mulh a4, a3, a41263; RV64IM-NEXT:    mulh a5, a2, a51264; RV64IM-NEXT:    mulh a6, a1, a61265; RV64IM-NEXT:    add a4, a4, a31266; RV64IM-NEXT:    srli a7, a5, 631267; RV64IM-NEXT:    srai a5, a5, 81268; RV64IM-NEXT:    add a5, a5, a71269; RV64IM-NEXT:    srli a7, a6, 631270; RV64IM-NEXT:    srai a6, a6, 111271; RV64IM-NEXT:    add a6, a6, a71272; RV64IM-NEXT:    srli a7, a4, 631273; RV64IM-NEXT:    srai a4, a4, 41274; RV64IM-NEXT:    add a4, a4, a71275; RV64IM-NEXT:    li a7, 6541276; RV64IM-NEXT:    mul a5, a5, a71277; RV64IM-NEXT:    lui a7, 11278; RV64IM-NEXT:    addi a7, a7, 13271279; RV64IM-NEXT:    mul a6, a6, a71280; RV64IM-NEXT:    li a7, 231281; RV64IM-NEXT:    mul a4, a4, a71282; RV64IM-NEXT:    sub a2, a2, a51283; RV64IM-NEXT:    sub a1, a1, a61284; RV64IM-NEXT:    sub a3, a3, a41285; RV64IM-NEXT:    sd zero, 0(a0)1286; RV64IM-NEXT:    sd a2, 8(a0)1287; RV64IM-NEXT:    sd a3, 16(a0)1288; RV64IM-NEXT:    sd a1, 24(a0)1289; RV64IM-NEXT:    ret1290  %1 = srem <4 x i64> %x, <i64 1, i64 654, i64 23, i64 5423>1291  ret <4 x i64> %11292}1293