2316 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; RUN: llc -mtriple=riscv32 < %s | FileCheck %s --check-prefix=RV323; RUN: llc -mtriple=riscv64 < %s | FileCheck %s --check-prefix=RV644 5define i64 @udiv_i64(i64 %x, i64 %y) nounwind {6; RV32-LABEL: udiv_i64:7; RV32: # %bb.0:8; RV32-NEXT: addi sp, sp, -169; RV32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill10; RV32-NEXT: call __udivdi311; RV32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload12; RV32-NEXT: addi sp, sp, 1613; RV32-NEXT: ret14;15; RV64-LABEL: udiv_i64:16; RV64: # %bb.0:17; RV64-NEXT: tail __udivdi318 %res = udiv i64 %x, %y19 ret i64 %res20}21 22define i65 @udiv_i65(i65 %x, i65 %y) nounwind {23; RV32-LABEL: udiv_i65:24; RV32: # %bb.0: # %_udiv-special-cases25; RV32-NEXT: lw a3, 0(a2)26; RV32-NEXT: lw a4, 4(a2)27; RV32-NEXT: lw t1, 8(a2)28; RV32-NEXT: lui a2, 34952529; RV32-NEXT: lui a5, 20971530; RV32-NEXT: lui a6, 6168131; RV32-NEXT: addi t0, a2, 136532; RV32-NEXT: addi a7, a5, 81933; RV32-NEXT: addi a6, a6, -24134; RV32-NEXT: srli a2, a4, 135; RV32-NEXT: slli a5, t1, 3136; RV32-NEXT: slli t3, a4, 3137; RV32-NEXT: or t2, a5, a238; RV32-NEXT: srli a2, a3, 139; RV32-NEXT: or t4, a2, t340; RV32-NEXT: bnez t2, .LBB1_241; RV32-NEXT: # %bb.1: # %_udiv-special-cases42; RV32-NEXT: srli a2, t4, 143; RV32-NEXT: or a2, t4, a244; RV32-NEXT: srli a5, a2, 245; RV32-NEXT: or a2, a2, a546; RV32-NEXT: srli a5, a2, 447; RV32-NEXT: or a2, a2, a548; RV32-NEXT: srli a5, a2, 849; RV32-NEXT: or a2, a2, a550; RV32-NEXT: srli a5, a2, 1651; RV32-NEXT: or a2, a2, a552; RV32-NEXT: not a2, a253; RV32-NEXT: srli a5, a2, 154; RV32-NEXT: and a5, a5, t055; RV32-NEXT: sub a2, a2, a556; RV32-NEXT: and a5, a2, a757; RV32-NEXT: srli a2, a2, 258; RV32-NEXT: and a2, a2, a759; RV32-NEXT: add a2, a5, a260; RV32-NEXT: srli a5, a2, 461; RV32-NEXT: add a2, a2, a562; RV32-NEXT: and a2, a2, a663; RV32-NEXT: slli a5, a2, 864; RV32-NEXT: add a2, a2, a565; RV32-NEXT: slli a5, a2, 1666; RV32-NEXT: add a2, a2, a567; RV32-NEXT: srli a2, a2, 2468; RV32-NEXT: addi t3, a2, 3269; RV32-NEXT: j .LBB1_370; RV32-NEXT: .LBB1_2:71; RV32-NEXT: srli a2, t2, 172; RV32-NEXT: or a2, t2, a273; RV32-NEXT: srli a5, a2, 274; RV32-NEXT: or a2, a2, a575; RV32-NEXT: srli a5, a2, 476; RV32-NEXT: or a2, a2, a577; RV32-NEXT: srli a5, a2, 878; RV32-NEXT: or a2, a2, a579; RV32-NEXT: srli a5, a2, 1680; RV32-NEXT: or a2, a2, a581; RV32-NEXT: not a2, a282; RV32-NEXT: srli a5, a2, 183; RV32-NEXT: and a5, a5, t084; RV32-NEXT: sub a2, a2, a585; RV32-NEXT: and a5, a2, a786; RV32-NEXT: srli a2, a2, 287; RV32-NEXT: and a2, a2, a788; RV32-NEXT: add a2, a5, a289; RV32-NEXT: srli a5, a2, 490; RV32-NEXT: add a2, a2, a591; RV32-NEXT: and a2, a2, a692; RV32-NEXT: slli a5, a2, 893; RV32-NEXT: add a2, a2, a594; RV32-NEXT: slli a5, a2, 1695; RV32-NEXT: add a2, a2, a596; RV32-NEXT: srli t3, a2, 2497; RV32-NEXT: .LBB1_3: # %_udiv-special-cases98; RV32-NEXT: addi sp, sp, -9699; RV32-NEXT: sw s0, 92(sp) # 4-byte Folded Spill100; RV32-NEXT: sw s1, 88(sp) # 4-byte Folded Spill101; RV32-NEXT: sw s2, 84(sp) # 4-byte Folded Spill102; RV32-NEXT: sw s3, 80(sp) # 4-byte Folded Spill103; RV32-NEXT: sw s4, 76(sp) # 4-byte Folded Spill104; RV32-NEXT: sw s5, 72(sp) # 4-byte Folded Spill105; RV32-NEXT: sw s6, 68(sp) # 4-byte Folded Spill106; RV32-NEXT: slli a2, a3, 31107; RV32-NEXT: li t5, 64108; RV32-NEXT: bnez a2, .LBB1_5109; RV32-NEXT: # %bb.4: # %_udiv-special-cases110; RV32-NEXT: li s0, 64111; RV32-NEXT: j .LBB1_6112; RV32-NEXT: .LBB1_5:113; RV32-NEXT: srli a5, a2, 1114; RV32-NEXT: or a2, a2, a5115; RV32-NEXT: srli a5, a2, 2116; RV32-NEXT: or a2, a2, a5117; RV32-NEXT: srli a5, a2, 4118; RV32-NEXT: or a2, a2, a5119; RV32-NEXT: srli a5, a2, 8120; RV32-NEXT: or a2, a2, a5121; RV32-NEXT: srli a5, a2, 16122; RV32-NEXT: or a2, a2, a5123; RV32-NEXT: not a2, a2124; RV32-NEXT: srli a5, a2, 1125; RV32-NEXT: and a5, a5, t0126; RV32-NEXT: sub a2, a2, a5127; RV32-NEXT: and a5, a2, a7128; RV32-NEXT: srli a2, a2, 2129; RV32-NEXT: and a2, a2, a7130; RV32-NEXT: add a2, a5, a2131; RV32-NEXT: srli a5, a2, 4132; RV32-NEXT: add a2, a2, a5133; RV32-NEXT: and a2, a2, a6134; RV32-NEXT: slli a5, a2, 8135; RV32-NEXT: add a2, a2, a5136; RV32-NEXT: slli a5, a2, 16137; RV32-NEXT: add a2, a2, a5138; RV32-NEXT: srli s0, a2, 24139; RV32-NEXT: .LBB1_6: # %_udiv-special-cases140; RV32-NEXT: lw a5, 0(a1)141; RV32-NEXT: lw a2, 4(a1)142; RV32-NEXT: lw s2, 8(a1)143; RV32-NEXT: or a1, t4, t2144; RV32-NEXT: addi s1, s0, 64145; RV32-NEXT: bnez a1, .LBB1_8146; RV32-NEXT: # %bb.7: # %_udiv-special-cases147; RV32-NEXT: mv t3, s1148; RV32-NEXT: .LBB1_8: # %_udiv-special-cases149; RV32-NEXT: snez s4, a1150; RV32-NEXT: srli a1, a2, 1151; RV32-NEXT: slli t2, s2, 31152; RV32-NEXT: slli t4, a2, 31153; RV32-NEXT: or a1, t2, a1154; RV32-NEXT: srli t2, a5, 1155; RV32-NEXT: or t6, t2, t4156; RV32-NEXT: bnez a1, .LBB1_10157; RV32-NEXT: # %bb.9: # %_udiv-special-cases158; RV32-NEXT: srli t2, t6, 1159; RV32-NEXT: or t2, t6, t2160; RV32-NEXT: srli t4, t2, 2161; RV32-NEXT: or t2, t2, t4162; RV32-NEXT: srli t4, t2, 4163; RV32-NEXT: or t2, t2, t4164; RV32-NEXT: srli t4, t2, 8165; RV32-NEXT: or t2, t2, t4166; RV32-NEXT: srli t4, t2, 16167; RV32-NEXT: or t2, t2, t4168; RV32-NEXT: not t2, t2169; RV32-NEXT: srli t4, t2, 1170; RV32-NEXT: and t4, t4, t0171; RV32-NEXT: sub t2, t2, t4172; RV32-NEXT: and t4, t2, a7173; RV32-NEXT: srli t2, t2, 2174; RV32-NEXT: and t2, t2, a7175; RV32-NEXT: add t2, t4, t2176; RV32-NEXT: srli t4, t2, 4177; RV32-NEXT: add t2, t2, t4178; RV32-NEXT: and t2, t2, a6179; RV32-NEXT: slli t4, t2, 8180; RV32-NEXT: add t2, t2, t4181; RV32-NEXT: slli t4, t2, 16182; RV32-NEXT: add t2, t2, t4183; RV32-NEXT: srli t2, t2, 24184; RV32-NEXT: addi s3, t2, 32185; RV32-NEXT: j .LBB1_11186; RV32-NEXT: .LBB1_10:187; RV32-NEXT: srli t2, a1, 1188; RV32-NEXT: or t2, a1, t2189; RV32-NEXT: srli t4, t2, 2190; RV32-NEXT: or t2, t2, t4191; RV32-NEXT: srli t4, t2, 4192; RV32-NEXT: or t2, t2, t4193; RV32-NEXT: srli t4, t2, 8194; RV32-NEXT: or t2, t2, t4195; RV32-NEXT: srli t4, t2, 16196; RV32-NEXT: or t2, t2, t4197; RV32-NEXT: not t2, t2198; RV32-NEXT: srli t4, t2, 1199; RV32-NEXT: and t4, t4, t0200; RV32-NEXT: sub t2, t2, t4201; RV32-NEXT: and t4, t2, a7202; RV32-NEXT: srli t2, t2, 2203; RV32-NEXT: and t2, t2, a7204; RV32-NEXT: add t2, t4, t2205; RV32-NEXT: srli t4, t2, 4206; RV32-NEXT: add t2, t2, t4207; RV32-NEXT: and t2, t2, a6208; RV32-NEXT: slli t4, t2, 8209; RV32-NEXT: add t2, t2, t4210; RV32-NEXT: slli t4, t2, 16211; RV32-NEXT: add t2, t2, t4212; RV32-NEXT: srli s3, t2, 24213; RV32-NEXT: .LBB1_11: # %_udiv-special-cases214; RV32-NEXT: andi t4, s2, 1215; RV32-NEXT: andi t1, t1, 1216; RV32-NEXT: or t2, a3, a4217; RV32-NEXT: or s2, a5, a2218; RV32-NEXT: sltu s0, s1, s0219; RV32-NEXT: slli s1, a5, 31220; RV32-NEXT: addi s4, s4, -1221; RV32-NEXT: beqz s1, .LBB1_13222; RV32-NEXT: # %bb.12:223; RV32-NEXT: srli t5, s1, 1224; RV32-NEXT: or t5, s1, t5225; RV32-NEXT: srli s1, t5, 2226; RV32-NEXT: or t5, t5, s1227; RV32-NEXT: srli s1, t5, 4228; RV32-NEXT: or t5, t5, s1229; RV32-NEXT: srli s1, t5, 8230; RV32-NEXT: or t5, t5, s1231; RV32-NEXT: srli s1, t5, 16232; RV32-NEXT: or t5, t5, s1233; RV32-NEXT: not t5, t5234; RV32-NEXT: srli s1, t5, 1235; RV32-NEXT: and t0, s1, t0236; RV32-NEXT: sub t0, t5, t0237; RV32-NEXT: and t5, t0, a7238; RV32-NEXT: srli t0, t0, 2239; RV32-NEXT: and a7, t0, a7240; RV32-NEXT: add a7, t5, a7241; RV32-NEXT: srli t0, a7, 4242; RV32-NEXT: add a7, a7, t0243; RV32-NEXT: and a6, a7, a6244; RV32-NEXT: slli a7, a6, 8245; RV32-NEXT: add a6, a6, a7246; RV32-NEXT: slli a7, a6, 16247; RV32-NEXT: add a6, a6, a7248; RV32-NEXT: srli t5, a6, 24249; RV32-NEXT: .LBB1_13: # %_udiv-special-cases250; RV32-NEXT: or t0, t2, t1251; RV32-NEXT: or a6, s2, t4252; RV32-NEXT: and a7, s4, s0253; RV32-NEXT: or t6, t6, a1254; RV32-NEXT: addi s0, t5, 64255; RV32-NEXT: bnez t6, .LBB1_15256; RV32-NEXT: # %bb.14: # %_udiv-special-cases257; RV32-NEXT: mv s3, s0258; RV32-NEXT: .LBB1_15: # %_udiv-special-cases259; RV32-NEXT: seqz a1, t0260; RV32-NEXT: sltu t0, s0, t5261; RV32-NEXT: snez t5, t6262; RV32-NEXT: addi t5, t5, -1263; RV32-NEXT: and t0, t5, t0264; RV32-NEXT: sltu t5, t3, s3265; RV32-NEXT: seqz a6, a6266; RV32-NEXT: mv t6, t5267; RV32-NEXT: beq a7, t0, .LBB1_17268; RV32-NEXT: # %bb.16: # %_udiv-special-cases269; RV32-NEXT: sltu t6, a7, t0270; RV32-NEXT: .LBB1_17: # %_udiv-special-cases271; RV32-NEXT: or a1, a1, a6272; RV32-NEXT: andi a6, t6, 1273; RV32-NEXT: sub a7, a7, t0274; RV32-NEXT: sub t5, a7, t5275; RV32-NEXT: sub a7, t3, s3276; RV32-NEXT: beqz a6, .LBB1_19277; RV32-NEXT: # %bb.18: # %_udiv-special-cases278; RV32-NEXT: mv t0, a6279; RV32-NEXT: j .LBB1_20280; RV32-NEXT: .LBB1_19:281; RV32-NEXT: sltiu t0, a7, 65282; RV32-NEXT: xori t0, t0, 1283; RV32-NEXT: snez t3, t5284; RV32-NEXT: or t0, t0, t3285; RV32-NEXT: .LBB1_20: # %_udiv-special-cases286; RV32-NEXT: or t6, a1, t0287; RV32-NEXT: addi a1, t6, -1288; RV32-NEXT: and t3, t4, a1289; RV32-NEXT: and t0, a1, a2290; RV32-NEXT: and a1, a1, a5291; RV32-NEXT: bnez t6, .LBB1_30292; RV32-NEXT: # %bb.21: # %_udiv-special-cases293; RV32-NEXT: xori t6, a7, 64294; RV32-NEXT: or t6, t6, a6295; RV32-NEXT: or t6, t6, t5296; RV32-NEXT: beqz t6, .LBB1_30297; RV32-NEXT: # %bb.22: # %udiv-bb1298; RV32-NEXT: addi a1, a7, 1299; RV32-NEXT: sw zero, 32(sp)300; RV32-NEXT: sw zero, 36(sp)301; RV32-NEXT: sw zero, 40(sp)302; RV32-NEXT: sw zero, 44(sp)303; RV32-NEXT: sw a5, 48(sp)304; RV32-NEXT: sw a2, 52(sp)305; RV32-NEXT: sw t4, 56(sp)306; RV32-NEXT: li t0, 64307; RV32-NEXT: addi t3, sp, 48308; RV32-NEXT: neg s1, a7309; RV32-NEXT: seqz t6, a1310; RV32-NEXT: sub a7, t0, a7311; RV32-NEXT: add t5, t5, t6312; RV32-NEXT: andi t0, a7, 31313; RV32-NEXT: srli a7, a7, 3314; RV32-NEXT: or t6, a1, t5315; RV32-NEXT: xori s2, t0, 31316; RV32-NEXT: andi a7, a7, 12317; RV32-NEXT: seqz t0, t6318; RV32-NEXT: sub s3, t3, a7319; RV32-NEXT: add a6, a6, t0320; RV32-NEXT: lw t3, 0(s3)321; RV32-NEXT: lw s4, 4(s3)322; RV32-NEXT: andi a7, a6, 1323; RV32-NEXT: or t6, t6, a7324; RV32-NEXT: srli a6, t3, 1325; RV32-NEXT: sll t0, s4, s1326; RV32-NEXT: srl a6, a6, s2327; RV32-NEXT: or t0, t0, a6328; RV32-NEXT: sll a6, t3, s1329; RV32-NEXT: li t3, 0330; RV32-NEXT: beqz t6, .LBB1_28331; RV32-NEXT: # %bb.23: # %udiv-preheader332; RV32-NEXT: li t6, 0333; RV32-NEXT: li s0, 0334; RV32-NEXT: srli s4, s4, 1335; RV32-NEXT: lw s3, 8(s3)336; RV32-NEXT: sw zero, 16(sp)337; RV32-NEXT: sw zero, 20(sp)338; RV32-NEXT: sw zero, 24(sp)339; RV32-NEXT: sw zero, 28(sp)340; RV32-NEXT: sw a5, 0(sp)341; RV32-NEXT: sw a2, 4(sp)342; RV32-NEXT: sw t4, 8(sp)343; RV32-NEXT: sw zero, 12(sp)344; RV32-NEXT: srli a2, a1, 3345; RV32-NEXT: srl a5, s4, s2346; RV32-NEXT: mv t4, sp347; RV32-NEXT: snez t2, t2348; RV32-NEXT: andi a2, a2, 12349; RV32-NEXT: add t1, t1, t2350; RV32-NEXT: add a2, t4, a2351; RV32-NEXT: lw t2, 0(a2)352; RV32-NEXT: lw t4, 4(a2)353; RV32-NEXT: lw a2, 8(a2)354; RV32-NEXT: sll s1, s3, s1355; RV32-NEXT: andi s2, a1, 31356; RV32-NEXT: xori s2, s2, 31357; RV32-NEXT: or s3, s1, a5358; RV32-NEXT: slli a2, a2, 1359; RV32-NEXT: slli a5, t4, 1360; RV32-NEXT: sll a2, a2, s2361; RV32-NEXT: sll s2, a5, s2362; RV32-NEXT: srl s1, t4, a1363; RV32-NEXT: or s1, s1, a2364; RV32-NEXT: seqz a2, a3365; RV32-NEXT: sub a2, a4, a2366; RV32-NEXT: addi a5, t1, 1367; RV32-NEXT: andi a5, a5, 1368; RV32-NEXT: andi s3, s3, 1369; RV32-NEXT: srl t1, t2, a1370; RV32-NEXT: or s2, t1, s2371; RV32-NEXT: addi t1, a3, -1372; RV32-NEXT: j .LBB1_26373; RV32-NEXT: .LBB1_24: # %udiv-do-while374; RV32-NEXT: # in Loop: Header=BB1_26 Depth=1375; RV32-NEXT: sltu t2, a2, s4376; RV32-NEXT: .LBB1_25: # %udiv-do-while377; RV32-NEXT: # in Loop: Header=BB1_26 Depth=1378; RV32-NEXT: srli s1, s1, 31379; RV32-NEXT: sub t4, a5, s1380; RV32-NEXT: sub t2, t4, t2381; RV32-NEXT: slli t2, t2, 31382; RV32-NEXT: srai s1, t2, 31383; RV32-NEXT: and s3, s1, a4384; RV32-NEXT: li t2, 0385; RV32-NEXT: li t4, 0386; RV32-NEXT: srli s5, a6, 31387; RV32-NEXT: sub s4, s4, s3388; RV32-NEXT: slli s3, t0, 1389; RV32-NEXT: or s3, s3, s5390; RV32-NEXT: srli t0, t0, 31391; RV32-NEXT: slli a6, a6, 1392; RV32-NEXT: or a6, t3, a6393; RV32-NEXT: seqz t3, a1394; RV32-NEXT: or s0, s0, t0395; RV32-NEXT: or s5, a1, t5396; RV32-NEXT: sub t5, t5, t3397; RV32-NEXT: and s6, s1, a3398; RV32-NEXT: addi a1, a1, -1399; RV32-NEXT: andi t3, s1, 1400; RV32-NEXT: or t0, t6, s3401; RV32-NEXT: sltu t6, s2, s6402; RV32-NEXT: snez s5, s5403; RV32-NEXT: andi s3, s0, 1404; RV32-NEXT: sub s1, s4, t6405; RV32-NEXT: add a7, a7, s5406; RV32-NEXT: addi a7, a7, 1407; RV32-NEXT: andi a7, a7, 1408; RV32-NEXT: or t6, a1, t5409; RV32-NEXT: or s4, t6, a7410; RV32-NEXT: sub s2, s2, s6411; RV32-NEXT: li t6, 0412; RV32-NEXT: li s0, 0413; RV32-NEXT: beqz s4, .LBB1_29414; RV32-NEXT: .LBB1_26: # %udiv-do-while415; RV32-NEXT: # =>This Inner Loop Header: Depth=1416; RV32-NEXT: srli t2, s2, 31417; RV32-NEXT: slli t4, s1, 1418; RV32-NEXT: slli s2, s2, 1419; RV32-NEXT: or s4, t4, t2420; RV32-NEXT: andi t2, s3, 1421; RV32-NEXT: or s2, s2, t2422; RV32-NEXT: bne a2, s4, .LBB1_24423; RV32-NEXT: # %bb.27: # in Loop: Header=BB1_26 Depth=1424; RV32-NEXT: sltu t2, t1, s2425; RV32-NEXT: j .LBB1_25426; RV32-NEXT: .LBB1_28:427; RV32-NEXT: li t2, 0428; RV32-NEXT: li t4, 0429; RV32-NEXT: .LBB1_29: # %udiv-loop-exit430; RV32-NEXT: srli a2, a6, 31431; RV32-NEXT: slli a3, t0, 1432; RV32-NEXT: srli a4, t0, 31433; RV32-NEXT: slli a6, a6, 1434; RV32-NEXT: or a1, t3, a6435; RV32-NEXT: or a2, t2, a2436; RV32-NEXT: or a4, t4, a4437; RV32-NEXT: or t0, a2, a3438; RV32-NEXT: andi t3, a4, 1439; RV32-NEXT: .LBB1_30: # %udiv-end440; RV32-NEXT: andi a2, t3, 1441; RV32-NEXT: sw a1, 0(a0)442; RV32-NEXT: sw t0, 4(a0)443; RV32-NEXT: sb a2, 8(a0)444; RV32-NEXT: lw s0, 92(sp) # 4-byte Folded Reload445; RV32-NEXT: lw s1, 88(sp) # 4-byte Folded Reload446; RV32-NEXT: lw s2, 84(sp) # 4-byte Folded Reload447; RV32-NEXT: lw s3, 80(sp) # 4-byte Folded Reload448; RV32-NEXT: lw s4, 76(sp) # 4-byte Folded Reload449; RV32-NEXT: lw s5, 72(sp) # 4-byte Folded Reload450; RV32-NEXT: lw s6, 68(sp) # 4-byte Folded Reload451; RV32-NEXT: addi sp, sp, 96452; RV32-NEXT: ret453;454; RV64-LABEL: udiv_i65:455; RV64: # %bb.0:456; RV64-NEXT: addi sp, sp, -16457; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill458; RV64-NEXT: andi a1, a1, 1459; RV64-NEXT: andi a3, a3, 1460; RV64-NEXT: call __udivti3461; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload462; RV64-NEXT: addi sp, sp, 16463; RV64-NEXT: ret464 %res = udiv i65 %x, %y465 ret i65 %res466}467 468define i128 @udiv_i128(i128 %x, i128 %y) nounwind {469; RV32-LABEL: udiv_i128:470; RV32: # %bb.0: # %_udiv-special-cases471; RV32-NEXT: addi sp, sp, -160472; RV32-NEXT: sw ra, 156(sp) # 4-byte Folded Spill473; RV32-NEXT: sw s0, 152(sp) # 4-byte Folded Spill474; RV32-NEXT: sw s1, 148(sp) # 4-byte Folded Spill475; RV32-NEXT: sw s2, 144(sp) # 4-byte Folded Spill476; RV32-NEXT: sw s3, 140(sp) # 4-byte Folded Spill477; RV32-NEXT: sw s4, 136(sp) # 4-byte Folded Spill478; RV32-NEXT: sw s5, 132(sp) # 4-byte Folded Spill479; RV32-NEXT: sw s6, 128(sp) # 4-byte Folded Spill480; RV32-NEXT: sw s7, 124(sp) # 4-byte Folded Spill481; RV32-NEXT: sw s8, 120(sp) # 4-byte Folded Spill482; RV32-NEXT: sw s9, 116(sp) # 4-byte Folded Spill483; RV32-NEXT: sw s10, 112(sp) # 4-byte Folded Spill484; RV32-NEXT: sw s11, 108(sp) # 4-byte Folded Spill485; RV32-NEXT: mv s7, a0486; RV32-NEXT: lw s8, 0(a2)487; RV32-NEXT: lw s9, 4(a2)488; RV32-NEXT: lw s11, 8(a2)489; RV32-NEXT: lw ra, 12(a2)490; RV32-NEXT: lui t4, 349525491; RV32-NEXT: addi t4, t4, 1365492; RV32-NEXT: lui t3, 209715493; RV32-NEXT: addi t3, t3, 819494; RV32-NEXT: lui t2, 61681495; RV32-NEXT: addi t2, t2, -241496; RV32-NEXT: bnez s9, .LBB2_2497; RV32-NEXT: # %bb.1: # %_udiv-special-cases498; RV32-NEXT: srli a0, s8, 1499; RV32-NEXT: or a0, s8, a0500; RV32-NEXT: srli a3, a0, 2501; RV32-NEXT: or a0, a0, a3502; RV32-NEXT: srli a3, a0, 4503; RV32-NEXT: or a0, a0, a3504; RV32-NEXT: srli a3, a0, 8505; RV32-NEXT: or a0, a0, a3506; RV32-NEXT: srli a3, a0, 16507; RV32-NEXT: or a0, a0, a3508; RV32-NEXT: not a0, a0509; RV32-NEXT: srli a3, a0, 1510; RV32-NEXT: and a3, a3, t4511; RV32-NEXT: sub a0, a0, a3512; RV32-NEXT: and a3, a0, t3513; RV32-NEXT: srli a0, a0, 2514; RV32-NEXT: and a0, a0, t3515; RV32-NEXT: add a0, a3, a0516; RV32-NEXT: srli a3, a0, 4517; RV32-NEXT: add a0, a0, a3518; RV32-NEXT: and a0, a0, t2519; RV32-NEXT: slli a3, a0, 8520; RV32-NEXT: add a0, a0, a3521; RV32-NEXT: slli a3, a0, 16522; RV32-NEXT: add a0, a0, a3523; RV32-NEXT: srli a0, a0, 24524; RV32-NEXT: addi t6, a0, 32525; RV32-NEXT: j .LBB2_3526; RV32-NEXT: .LBB2_2:527; RV32-NEXT: srli a0, s9, 1528; RV32-NEXT: or a0, s9, a0529; RV32-NEXT: srli a3, a0, 2530; RV32-NEXT: or a0, a0, a3531; RV32-NEXT: srli a3, a0, 4532; RV32-NEXT: or a0, a0, a3533; RV32-NEXT: srli a3, a0, 8534; RV32-NEXT: or a0, a0, a3535; RV32-NEXT: srli a3, a0, 16536; RV32-NEXT: or a0, a0, a3537; RV32-NEXT: not a0, a0538; RV32-NEXT: srli a3, a0, 1539; RV32-NEXT: and a3, a3, t4540; RV32-NEXT: sub a0, a0, a3541; RV32-NEXT: and a3, a0, t3542; RV32-NEXT: srli a0, a0, 2543; RV32-NEXT: and a0, a0, t3544; RV32-NEXT: add a0, a3, a0545; RV32-NEXT: srli a3, a0, 4546; RV32-NEXT: add a0, a0, a3547; RV32-NEXT: and a0, a0, t2548; RV32-NEXT: slli a3, a0, 8549; RV32-NEXT: add a0, a0, a3550; RV32-NEXT: slli a3, a0, 16551; RV32-NEXT: add a0, a0, a3552; RV32-NEXT: srli t6, a0, 24553; RV32-NEXT: .LBB2_3: # %_udiv-special-cases554; RV32-NEXT: lw a6, 4(a1)555; RV32-NEXT: or s0, s11, ra556; RV32-NEXT: bnez ra, .LBB2_5557; RV32-NEXT: # %bb.4: # %_udiv-special-cases558; RV32-NEXT: srli a0, s11, 1559; RV32-NEXT: or a0, s11, a0560; RV32-NEXT: srli a3, a0, 2561; RV32-NEXT: or a0, a0, a3562; RV32-NEXT: srli a3, a0, 4563; RV32-NEXT: or a0, a0, a3564; RV32-NEXT: srli a3, a0, 8565; RV32-NEXT: or a0, a0, a3566; RV32-NEXT: srli a3, a0, 16567; RV32-NEXT: or a0, a0, a3568; RV32-NEXT: not a0, a0569; RV32-NEXT: srli a3, a0, 1570; RV32-NEXT: and a3, a3, t4571; RV32-NEXT: sub a0, a0, a3572; RV32-NEXT: and a3, a0, t3573; RV32-NEXT: srli a0, a0, 2574; RV32-NEXT: and a0, a0, t3575; RV32-NEXT: add a0, a3, a0576; RV32-NEXT: srli a3, a0, 4577; RV32-NEXT: add a0, a0, a3578; RV32-NEXT: and a0, a0, t2579; RV32-NEXT: slli a3, a0, 8580; RV32-NEXT: add a0, a0, a3581; RV32-NEXT: slli a3, a0, 16582; RV32-NEXT: add a0, a0, a3583; RV32-NEXT: srli a0, a0, 24584; RV32-NEXT: addi t5, a0, 32585; RV32-NEXT: j .LBB2_6586; RV32-NEXT: .LBB2_5:587; RV32-NEXT: srli a0, ra, 1588; RV32-NEXT: or a0, ra, a0589; RV32-NEXT: srli a3, a0, 2590; RV32-NEXT: or a0, a0, a3591; RV32-NEXT: srli a3, a0, 4592; RV32-NEXT: or a0, a0, a3593; RV32-NEXT: srli a3, a0, 8594; RV32-NEXT: or a0, a0, a3595; RV32-NEXT: srli a3, a0, 16596; RV32-NEXT: or a0, a0, a3597; RV32-NEXT: not a0, a0598; RV32-NEXT: srli a3, a0, 1599; RV32-NEXT: and a3, a3, t4600; RV32-NEXT: sub a0, a0, a3601; RV32-NEXT: and a3, a0, t3602; RV32-NEXT: srli a0, a0, 2603; RV32-NEXT: and a0, a0, t3604; RV32-NEXT: add a0, a3, a0605; RV32-NEXT: srli a3, a0, 4606; RV32-NEXT: add a0, a0, a3607; RV32-NEXT: and a0, a0, t2608; RV32-NEXT: slli a3, a0, 8609; RV32-NEXT: add a0, a0, a3610; RV32-NEXT: slli a3, a0, 16611; RV32-NEXT: add a0, a0, a3612; RV32-NEXT: srli t5, a0, 24613; RV32-NEXT: .LBB2_6: # %_udiv-special-cases614; RV32-NEXT: lw a7, 12(a1)615; RV32-NEXT: addi a0, t6, 64616; RV32-NEXT: bnez s0, .LBB2_8617; RV32-NEXT: # %bb.7: # %_udiv-special-cases618; RV32-NEXT: mv t5, a0619; RV32-NEXT: .LBB2_8: # %_udiv-special-cases620; RV32-NEXT: lw t1, 0(a1)621; RV32-NEXT: lw t0, 8(a1)622; RV32-NEXT: snez s3, s0623; RV32-NEXT: bnez a6, .LBB2_10624; RV32-NEXT: # %bb.9: # %_udiv-special-cases625; RV32-NEXT: srli a1, t1, 1626; RV32-NEXT: or a1, t1, a1627; RV32-NEXT: srli a3, a1, 2628; RV32-NEXT: or a1, a1, a3629; RV32-NEXT: srli a3, a1, 4630; RV32-NEXT: or a1, a1, a3631; RV32-NEXT: srli a3, a1, 8632; RV32-NEXT: or a1, a1, a3633; RV32-NEXT: srli a3, a1, 16634; RV32-NEXT: or a1, a1, a3635; RV32-NEXT: not a1, a1636; RV32-NEXT: srli a3, a1, 1637; RV32-NEXT: and a3, a3, t4638; RV32-NEXT: sub a1, a1, a3639; RV32-NEXT: and a3, a1, t3640; RV32-NEXT: srli a1, a1, 2641; RV32-NEXT: and a1, a1, t3642; RV32-NEXT: add a1, a3, a1643; RV32-NEXT: srli a3, a1, 4644; RV32-NEXT: add a1, a1, a3645; RV32-NEXT: and a1, a1, t2646; RV32-NEXT: slli a3, a1, 8647; RV32-NEXT: add a1, a1, a3648; RV32-NEXT: slli a3, a1, 16649; RV32-NEXT: add a1, a1, a3650; RV32-NEXT: srli a1, a1, 24651; RV32-NEXT: addi a3, a1, 32652; RV32-NEXT: j .LBB2_11653; RV32-NEXT: .LBB2_10:654; RV32-NEXT: srli a1, a6, 1655; RV32-NEXT: or a1, a6, a1656; RV32-NEXT: srli a3, a1, 2657; RV32-NEXT: or a1, a1, a3658; RV32-NEXT: srli a3, a1, 4659; RV32-NEXT: or a1, a1, a3660; RV32-NEXT: srli a3, a1, 8661; RV32-NEXT: or a1, a1, a3662; RV32-NEXT: srli a3, a1, 16663; RV32-NEXT: or a1, a1, a3664; RV32-NEXT: not a1, a1665; RV32-NEXT: srli a3, a1, 1666; RV32-NEXT: and a3, a3, t4667; RV32-NEXT: sub a1, a1, a3668; RV32-NEXT: and a3, a1, t3669; RV32-NEXT: srli a1, a1, 2670; RV32-NEXT: and a1, a1, t3671; RV32-NEXT: add a1, a3, a1672; RV32-NEXT: srli a3, a1, 4673; RV32-NEXT: add a1, a1, a3674; RV32-NEXT: and a1, a1, t2675; RV32-NEXT: slli a3, a1, 8676; RV32-NEXT: add a1, a1, a3677; RV32-NEXT: slli a3, a1, 16678; RV32-NEXT: add a1, a1, a3679; RV32-NEXT: srli a3, a1, 24680; RV32-NEXT: .LBB2_11: # %_udiv-special-cases681; RV32-NEXT: or a1, s9, ra682; RV32-NEXT: or s0, s8, s11683; RV32-NEXT: or s1, a6, a7684; RV32-NEXT: or s2, t1, t0685; RV32-NEXT: sltu t6, a0, t6686; RV32-NEXT: addi s3, s3, -1687; RV32-NEXT: addi a0, a3, 64688; RV32-NEXT: or s4, t0, a7689; RV32-NEXT: sltu s5, a0, a3690; RV32-NEXT: snez s6, s4691; RV32-NEXT: addi s6, s6, -1692; RV32-NEXT: bnez a7, .LBB2_13693; RV32-NEXT: # %bb.12: # %_udiv-special-cases694; RV32-NEXT: srli a3, t0, 1695; RV32-NEXT: or a3, t0, a3696; RV32-NEXT: srli a4, a3, 2697; RV32-NEXT: or a3, a3, a4698; RV32-NEXT: srli a4, a3, 4699; RV32-NEXT: or a3, a3, a4700; RV32-NEXT: srli a4, a3, 8701; RV32-NEXT: or a3, a3, a4702; RV32-NEXT: srli a4, a3, 16703; RV32-NEXT: or a3, a3, a4704; RV32-NEXT: not a3, a3705; RV32-NEXT: srli a4, a3, 1706; RV32-NEXT: and a4, a4, t4707; RV32-NEXT: sub a3, a3, a4708; RV32-NEXT: and a4, a3, t3709; RV32-NEXT: srli a3, a3, 2710; RV32-NEXT: and a3, a3, t3711; RV32-NEXT: add a3, a4, a3712; RV32-NEXT: srli a4, a3, 4713; RV32-NEXT: add a3, a3, a4714; RV32-NEXT: and a3, a3, t2715; RV32-NEXT: slli a4, a3, 8716; RV32-NEXT: add a3, a3, a4717; RV32-NEXT: slli a4, a3, 16718; RV32-NEXT: add a3, a3, a4719; RV32-NEXT: srli a3, a3, 24720; RV32-NEXT: addi a3, a3, 32721; RV32-NEXT: j .LBB2_14722; RV32-NEXT: .LBB2_13:723; RV32-NEXT: srli a3, a7, 1724; RV32-NEXT: or a3, a7, a3725; RV32-NEXT: srli a4, a3, 2726; RV32-NEXT: or a3, a3, a4727; RV32-NEXT: srli a4, a3, 4728; RV32-NEXT: or a3, a3, a4729; RV32-NEXT: srli a4, a3, 8730; RV32-NEXT: or a3, a3, a4731; RV32-NEXT: srli a4, a3, 16732; RV32-NEXT: or a3, a3, a4733; RV32-NEXT: not a3, a3734; RV32-NEXT: srli a4, a3, 1735; RV32-NEXT: and a4, a4, t4736; RV32-NEXT: sub a3, a3, a4737; RV32-NEXT: and a4, a3, t3738; RV32-NEXT: srli a3, a3, 2739; RV32-NEXT: and a3, a3, t3740; RV32-NEXT: add a3, a4, a3741; RV32-NEXT: srli a4, a3, 4742; RV32-NEXT: add a3, a3, a4743; RV32-NEXT: and a3, a3, t2744; RV32-NEXT: slli a4, a3, 8745; RV32-NEXT: add a3, a3, a4746; RV32-NEXT: slli a4, a3, 16747; RV32-NEXT: add a3, a3, a4748; RV32-NEXT: srli a3, a3, 24749; RV32-NEXT: .LBB2_14: # %_udiv-special-cases750; RV32-NEXT: or s0, s0, a1751; RV32-NEXT: or a5, s2, s1752; RV32-NEXT: and a1, s3, t6753; RV32-NEXT: and a4, s6, s5754; RV32-NEXT: bnez s4, .LBB2_16755; RV32-NEXT: # %bb.15: # %_udiv-special-cases756; RV32-NEXT: mv a3, a0757; RV32-NEXT: .LBB2_16: # %_udiv-special-cases758; RV32-NEXT: seqz a0, s0759; RV32-NEXT: seqz a5, a5760; RV32-NEXT: sltu t2, t5, a3761; RV32-NEXT: sub t4, a1, a4762; RV32-NEXT: mv t3, t2763; RV32-NEXT: beq a1, a4, .LBB2_18764; RV32-NEXT: # %bb.17: # %_udiv-special-cases765; RV32-NEXT: sltu t3, a1, a4766; RV32-NEXT: .LBB2_18: # %_udiv-special-cases767; RV32-NEXT: sub t2, t4, t2768; RV32-NEXT: or a0, a0, a5769; RV32-NEXT: neg t4, t3770; RV32-NEXT: seqz t6, t3771; RV32-NEXT: addi t6, t6, -1772; RV32-NEXT: or a1, t4, t6773; RV32-NEXT: sub t3, t5, a3774; RV32-NEXT: beqz a1, .LBB2_20775; RV32-NEXT: # %bb.19: # %_udiv-special-cases776; RV32-NEXT: snez a1, a1777; RV32-NEXT: j .LBB2_21778; RV32-NEXT: .LBB2_20:779; RV32-NEXT: snez a1, t2780; RV32-NEXT: sltiu a3, t3, 128781; RV32-NEXT: xori a3, a3, 1782; RV32-NEXT: or a1, a3, a1783; RV32-NEXT: .LBB2_21: # %_udiv-special-cases784; RV32-NEXT: or a5, a0, a1785; RV32-NEXT: addi a3, a5, -1786; RV32-NEXT: and a0, a3, a7787; RV32-NEXT: and a1, a3, t0788; RV32-NEXT: and a4, a3, a6789; RV32-NEXT: and a3, a3, t1790; RV32-NEXT: bnez a5, .LBB2_26791; RV32-NEXT: # %bb.22: # %_udiv-special-cases792; RV32-NEXT: xori a5, t3, 127793; RV32-NEXT: or a5, a5, t4794; RV32-NEXT: or t5, t2, t6795; RV32-NEXT: or a5, a5, t5796; RV32-NEXT: beqz a5, .LBB2_26797; RV32-NEXT: # %bb.23: # %udiv-bb1798; RV32-NEXT: sw s7, 12(sp) # 4-byte Folded Spill799; RV32-NEXT: addi a1, t3, 1800; RV32-NEXT: sw zero, 72(sp)801; RV32-NEXT: sw zero, 76(sp)802; RV32-NEXT: sw zero, 80(sp)803; RV32-NEXT: sw zero, 84(sp)804; RV32-NEXT: sw t1, 88(sp)805; RV32-NEXT: sw a6, 92(sp)806; RV32-NEXT: sw t0, 96(sp)807; RV32-NEXT: sw a7, 100(sp)808; RV32-NEXT: li a0, 127809; RV32-NEXT: addi a2, sp, 88810; RV32-NEXT: seqz a3, a1811; RV32-NEXT: sub a0, a0, t3812; RV32-NEXT: add t2, t2, a3813; RV32-NEXT: andi a3, a0, 31814; RV32-NEXT: srli a0, a0, 3815; RV32-NEXT: or a4, a1, t2816; RV32-NEXT: xori a3, a3, 31817; RV32-NEXT: andi a0, a0, 12818; RV32-NEXT: seqz t5, a4819; RV32-NEXT: sub a2, a2, a0820; RV32-NEXT: add t5, t4, t5821; RV32-NEXT: lw a0, 0(a2)822; RV32-NEXT: lw a4, 4(a2)823; RV32-NEXT: lw a5, 8(a2)824; RV32-NEXT: lw a2, 12(a2)825; RV32-NEXT: sltu t4, t5, t4826; RV32-NEXT: or s0, a1, t5827; RV32-NEXT: add t4, t6, t4828; RV32-NEXT: or t6, t2, t4829; RV32-NEXT: or s0, s0, t6830; RV32-NEXT: srli t6, a5, 1831; RV32-NEXT: srli s1, a4, 1832; RV32-NEXT: srli s2, a0, 1833; RV32-NEXT: srl t6, t6, a3834; RV32-NEXT: srl s1, s1, a3835; RV32-NEXT: srl a3, s2, a3836; RV32-NEXT: not t3, t3837; RV32-NEXT: sll a2, a2, t3838; RV32-NEXT: or s2, a2, t6839; RV32-NEXT: sll a2, a5, t3840; RV32-NEXT: sll a4, a4, t3841; RV32-NEXT: or s1, a2, s1842; RV32-NEXT: or t6, a4, a3843; RV32-NEXT: sll t3, a0, t3844; RV32-NEXT: bnez s0, .LBB2_27845; RV32-NEXT: # %bb.24:846; RV32-NEXT: li s6, 0847; RV32-NEXT: li s7, 0848; RV32-NEXT: li s8, 0849; RV32-NEXT: .LBB2_25: # %udiv-loop-exit850; RV32-NEXT: srli a0, s1, 31851; RV32-NEXT: slli s2, s2, 1852; RV32-NEXT: or a0, s2, a0853; RV32-NEXT: srli a1, t6, 31854; RV32-NEXT: slli s1, s1, 1855; RV32-NEXT: or a1, s1, a1856; RV32-NEXT: srli a2, t3, 31857; RV32-NEXT: slli t6, t6, 1858; RV32-NEXT: slli a3, t3, 1859; RV32-NEXT: or a3, s0, a3860; RV32-NEXT: or a2, s6, a2861; RV32-NEXT: or a4, a2, t6862; RV32-NEXT: or a1, s7, a1863; RV32-NEXT: or a0, s8, a0864; RV32-NEXT: lw s7, 12(sp) # 4-byte Folded Reload865; RV32-NEXT: .LBB2_26: # %udiv-end866; RV32-NEXT: sw a3, 0(s7)867; RV32-NEXT: sw a4, 4(s7)868; RV32-NEXT: sw a1, 8(s7)869; RV32-NEXT: sw a0, 12(s7)870; RV32-NEXT: lw ra, 156(sp) # 4-byte Folded Reload871; RV32-NEXT: lw s0, 152(sp) # 4-byte Folded Reload872; RV32-NEXT: lw s1, 148(sp) # 4-byte Folded Reload873; RV32-NEXT: lw s2, 144(sp) # 4-byte Folded Reload874; RV32-NEXT: lw s3, 140(sp) # 4-byte Folded Reload875; RV32-NEXT: lw s4, 136(sp) # 4-byte Folded Reload876; RV32-NEXT: lw s5, 132(sp) # 4-byte Folded Reload877; RV32-NEXT: lw s6, 128(sp) # 4-byte Folded Reload878; RV32-NEXT: lw s7, 124(sp) # 4-byte Folded Reload879; RV32-NEXT: lw s8, 120(sp) # 4-byte Folded Reload880; RV32-NEXT: lw s9, 116(sp) # 4-byte Folded Reload881; RV32-NEXT: lw s10, 112(sp) # 4-byte Folded Reload882; RV32-NEXT: lw s11, 108(sp) # 4-byte Folded Reload883; RV32-NEXT: addi sp, sp, 160884; RV32-NEXT: ret885; RV32-NEXT: .LBB2_27: # %udiv-preheader886; RV32-NEXT: li s0, 0887; RV32-NEXT: li s5, 0888; RV32-NEXT: li s3, 0889; RV32-NEXT: li s4, 0890; RV32-NEXT: sw zero, 56(sp)891; RV32-NEXT: sw zero, 60(sp)892; RV32-NEXT: sw zero, 64(sp)893; RV32-NEXT: sw zero, 68(sp)894; RV32-NEXT: sw t1, 40(sp)895; RV32-NEXT: sw a6, 44(sp)896; RV32-NEXT: sw t0, 48(sp)897; RV32-NEXT: sw a7, 52(sp)898; RV32-NEXT: srli a0, a1, 3899; RV32-NEXT: addi a2, sp, 40900; RV32-NEXT: andi a0, a0, 12901; RV32-NEXT: add a0, a2, a0902; RV32-NEXT: lw a2, 4(a0)903; RV32-NEXT: lw a3, 8(a0)904; RV32-NEXT: lw a4, 12(a0)905; RV32-NEXT: lw a0, 0(a0)906; RV32-NEXT: andi a5, a1, 31907; RV32-NEXT: xori a5, a5, 31908; RV32-NEXT: slli a6, a4, 1909; RV32-NEXT: slli a7, a3, 1910; RV32-NEXT: slli t0, a2, 1911; RV32-NEXT: sll a6, a6, a5912; RV32-NEXT: sll a7, a7, a5913; RV32-NEXT: sll a5, t0, a5914; RV32-NEXT: seqz t0, s8915; RV32-NEXT: srl a3, a3, a1916; RV32-NEXT: or s10, a3, a6917; RV32-NEXT: or a3, s8, s9918; RV32-NEXT: sw s9, 32(sp) # 4-byte Folded Spill919; RV32-NEXT: sub a6, s9, t0920; RV32-NEXT: seqz a3, a3921; RV32-NEXT: srl a2, a2, a1922; RV32-NEXT: or s9, a2, a7923; RV32-NEXT: sub a7, s11, a3924; RV32-NEXT: sw s11, 28(sp) # 4-byte Folded Spill925; RV32-NEXT: sltu a2, s11, a3926; RV32-NEXT: sw ra, 24(sp) # 4-byte Folded Spill927; RV32-NEXT: sub a2, ra, a2928; RV32-NEXT: sw a2, 20(sp) # 4-byte Folded Spill929; RV32-NEXT: srl a0, a0, a1930; RV32-NEXT: srl ra, a4, a1931; RV32-NEXT: or t1, a0, a5932; RV32-NEXT: sw s8, 36(sp) # 4-byte Folded Spill933; RV32-NEXT: addi s8, s8, -1934; RV32-NEXT: sw s8, 16(sp) # 4-byte Folded Spill935; RV32-NEXT: li s7, 0936; RV32-NEXT: li s8, 0937; RV32-NEXT: j .LBB2_29938; RV32-NEXT: .LBB2_28: # %udiv-do-while939; RV32-NEXT: # in Loop: Header=BB2_29 Depth=1940; RV32-NEXT: li s6, 0941; RV32-NEXT: sub a0, a0, a5942; RV32-NEXT: srli a5, s1, 31943; RV32-NEXT: slli s2, s2, 1944; RV32-NEXT: or a5, s2, a5945; RV32-NEXT: srli s2, t6, 31946; RV32-NEXT: slli s1, s1, 1947; RV32-NEXT: or s1, s1, s2948; RV32-NEXT: srli s2, t3, 31949; RV32-NEXT: slli t6, t6, 1950; RV32-NEXT: slli t3, t3, 1951; RV32-NEXT: or t6, t6, s2952; RV32-NEXT: lw a2, 28(sp) # 4-byte Folded Reload953; RV32-NEXT: and s2, s10, a2954; RV32-NEXT: or t3, s0, t3955; RV32-NEXT: sub a2, a3, s2956; RV32-NEXT: sltu a3, a3, s2957; RV32-NEXT: lw t0, 24(sp) # 4-byte Folded Reload958; RV32-NEXT: and s0, s10, t0959; RV32-NEXT: sub t0, s9, s0960; RV32-NEXT: or s2, a1, t2961; RV32-NEXT: sub s9, a0, a4962; RV32-NEXT: seqz a0, a1963; RV32-NEXT: sub t2, t2, a0964; RV32-NEXT: or t6, s5, t6965; RV32-NEXT: addi a1, a1, -1966; RV32-NEXT: andi s0, s10, 1967; RV32-NEXT: seqz a0, s2968; RV32-NEXT: or s1, s3, s1969; RV32-NEXT: or s2, s4, a5970; RV32-NEXT: sub s10, a2, ra971; RV32-NEXT: sltu a2, a2, ra972; RV32-NEXT: sub a3, t0, a3973; RV32-NEXT: sltu a4, t5, a0974; RV32-NEXT: sub t5, t5, a0975; RV32-NEXT: sub ra, a3, a2976; RV32-NEXT: sub t4, t4, a4977; RV32-NEXT: or a0, t2, t4978; RV32-NEXT: or a2, a1, t5979; RV32-NEXT: or a0, a2, a0980; RV32-NEXT: sub t1, s11, t1981; RV32-NEXT: li s5, 0982; RV32-NEXT: li s3, 0983; RV32-NEXT: li s4, 0984; RV32-NEXT: beqz a0, .LBB2_25985; RV32-NEXT: .LBB2_29: # %udiv-do-while986; RV32-NEXT: # =>This Inner Loop Header: Depth=1987; RV32-NEXT: srli a0, t1, 31988; RV32-NEXT: slli a3, s9, 1989; RV32-NEXT: slli t1, t1, 1990; RV32-NEXT: or a0, a3, a0991; RV32-NEXT: srli a3, s2, 31992; RV32-NEXT: or s11, t1, a3993; RV32-NEXT: beq a6, a0, .LBB2_31994; RV32-NEXT: # %bb.30: # %udiv-do-while995; RV32-NEXT: # in Loop: Header=BB2_29 Depth=1996; RV32-NEXT: sltu a4, a6, a0997; RV32-NEXT: j .LBB2_32998; RV32-NEXT: .LBB2_31: # in Loop: Header=BB2_29 Depth=1999; RV32-NEXT: lw a2, 16(sp) # 4-byte Folded Reload1000; RV32-NEXT: sltu a4, a2, s111001; RV32-NEXT: .LBB2_32: # %udiv-do-while1002; RV32-NEXT: # in Loop: Header=BB2_29 Depth=11003; RV32-NEXT: lw a2, 36(sp) # 4-byte Folded Reload1004; RV32-NEXT: srli a3, s10, 311005; RV32-NEXT: slli ra, ra, 11006; RV32-NEXT: srli a5, s9, 311007; RV32-NEXT: slli s10, s10, 11008; RV32-NEXT: or s9, ra, a31009; RV32-NEXT: or a3, s10, a51010; RV32-NEXT: sub a5, a7, a31011; RV32-NEXT: sltu t1, a7, a31012; RV32-NEXT: lw t0, 20(sp) # 4-byte Folded Reload1013; RV32-NEXT: sub s6, t0, s91014; RV32-NEXT: sltu a4, a5, a41015; RV32-NEXT: sub a5, s6, t11016; RV32-NEXT: sub a5, a5, a41017; RV32-NEXT: srai s10, a5, 311018; RV32-NEXT: and t1, s10, a21019; RV32-NEXT: lw a2, 32(sp) # 4-byte Folded Reload1020; RV32-NEXT: and a5, s10, a21021; RV32-NEXT: sltu a4, s11, t11022; RV32-NEXT: mv ra, a41023; RV32-NEXT: beq a0, a5, .LBB2_281024; RV32-NEXT: # %bb.33: # %udiv-do-while1025; RV32-NEXT: # in Loop: Header=BB2_29 Depth=11026; RV32-NEXT: sltu ra, a0, a51027; RV32-NEXT: j .LBB2_281028;1029; RV64-LABEL: udiv_i128:1030; RV64: # %bb.0:1031; RV64-NEXT: addi sp, sp, -161032; RV64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1033; RV64-NEXT: call __udivti31034; RV64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1035; RV64-NEXT: addi sp, sp, 161036; RV64-NEXT: ret1037 %res = udiv i128 %x, %y1038 ret i128 %res1039}1040 1041define i129 @udiv_i129(i129 %x, i129 %y) nounwind {1042; RV32-LABEL: udiv_i129:1043; RV32: # %bb.0: # %_udiv-special-cases1044; RV32-NEXT: addi sp, sp, -2401045; RV32-NEXT: sw ra, 236(sp) # 4-byte Folded Spill1046; RV32-NEXT: sw s0, 232(sp) # 4-byte Folded Spill1047; RV32-NEXT: sw s1, 228(sp) # 4-byte Folded Spill1048; RV32-NEXT: sw s2, 224(sp) # 4-byte Folded Spill1049; RV32-NEXT: sw s3, 220(sp) # 4-byte Folded Spill1050; RV32-NEXT: sw s4, 216(sp) # 4-byte Folded Spill1051; RV32-NEXT: sw s5, 212(sp) # 4-byte Folded Spill1052; RV32-NEXT: sw s6, 208(sp) # 4-byte Folded Spill1053; RV32-NEXT: sw s7, 204(sp) # 4-byte Folded Spill1054; RV32-NEXT: sw s8, 200(sp) # 4-byte Folded Spill1055; RV32-NEXT: sw s9, 196(sp) # 4-byte Folded Spill1056; RV32-NEXT: sw s10, 192(sp) # 4-byte Folded Spill1057; RV32-NEXT: sw s11, 188(sp) # 4-byte Folded Spill1058; RV32-NEXT: mv ra, a01059; RV32-NEXT: lw t2, 16(a2)1060; RV32-NEXT: lw a4, 0(a2)1061; RV32-NEXT: lw a5, 4(a2)1062; RV32-NEXT: lw a6, 8(a2)1063; RV32-NEXT: lw a0, 12(a2)1064; RV32-NEXT: sw a0, 24(sp) # 4-byte Folded Spill1065; RV32-NEXT: lui a0, 3495251066; RV32-NEXT: lui a2, 2097151067; RV32-NEXT: lui a3, 616811068; RV32-NEXT: addi t5, a0, 13651069; RV32-NEXT: addi t4, a2, 8191070; RV32-NEXT: addi t3, a3, -2411071; RV32-NEXT: sw a6, 28(sp) # 4-byte Folded Spill1072; RV32-NEXT: slli a0, a6, 311073; RV32-NEXT: srli a2, a5, 11074; RV32-NEXT: sw a5, 20(sp) # 4-byte Folded Spill1075; RV32-NEXT: slli a3, a5, 311076; RV32-NEXT: or a0, a2, a01077; RV32-NEXT: sw a4, 32(sp) # 4-byte Folded Spill1078; RV32-NEXT: srli a2, a4, 11079; RV32-NEXT: or a2, a2, a31080; RV32-NEXT: bnez a0, .LBB3_21081; RV32-NEXT: # %bb.1: # %_udiv-special-cases1082; RV32-NEXT: srli a3, a2, 11083; RV32-NEXT: or a3, a2, a31084; RV32-NEXT: srli a4, a3, 21085; RV32-NEXT: or a3, a3, a41086; RV32-NEXT: srli a4, a3, 41087; RV32-NEXT: or a3, a3, a41088; RV32-NEXT: srli a4, a3, 81089; RV32-NEXT: or a3, a3, a41090; RV32-NEXT: srli a4, a3, 161091; RV32-NEXT: or a3, a3, a41092; RV32-NEXT: not a3, a31093; RV32-NEXT: srli a4, a3, 11094; RV32-NEXT: and a4, a4, t51095; RV32-NEXT: sub a3, a3, a41096; RV32-NEXT: and a4, a3, t41097; RV32-NEXT: srli a3, a3, 21098; RV32-NEXT: and a3, a3, t41099; RV32-NEXT: add a3, a4, a31100; RV32-NEXT: srli a4, a3, 41101; RV32-NEXT: add a3, a3, a41102; RV32-NEXT: and a3, a3, t31103; RV32-NEXT: slli a4, a3, 81104; RV32-NEXT: add a3, a3, a41105; RV32-NEXT: slli a4, a3, 161106; RV32-NEXT: add a3, a3, a41107; RV32-NEXT: srli a3, a3, 241108; RV32-NEXT: addi a6, a3, 321109; RV32-NEXT: j .LBB3_31110; RV32-NEXT: .LBB3_2:1111; RV32-NEXT: srli a3, a0, 11112; RV32-NEXT: or a3, a0, a31113; RV32-NEXT: srli a4, a3, 21114; RV32-NEXT: or a3, a3, a41115; RV32-NEXT: srli a4, a3, 41116; RV32-NEXT: or a3, a3, a41117; RV32-NEXT: srli a4, a3, 81118; RV32-NEXT: or a3, a3, a41119; RV32-NEXT: srli a4, a3, 161120; RV32-NEXT: or a3, a3, a41121; RV32-NEXT: not a3, a31122; RV32-NEXT: srli a4, a3, 11123; RV32-NEXT: and a4, a4, t51124; RV32-NEXT: sub a3, a3, a41125; RV32-NEXT: and a4, a3, t41126; RV32-NEXT: srli a3, a3, 21127; RV32-NEXT: and a3, a3, t41128; RV32-NEXT: add a3, a4, a31129; RV32-NEXT: srli a4, a3, 41130; RV32-NEXT: add a3, a3, a41131; RV32-NEXT: and a3, a3, t31132; RV32-NEXT: slli a4, a3, 81133; RV32-NEXT: add a3, a3, a41134; RV32-NEXT: slli a4, a3, 161135; RV32-NEXT: add a3, a3, a41136; RV32-NEXT: srli a6, a3, 241137; RV32-NEXT: .LBB3_3: # %_udiv-special-cases1138; RV32-NEXT: lw a7, 24(sp) # 4-byte Folded Reload1139; RV32-NEXT: srli a3, a7, 11140; RV32-NEXT: slli a5, t2, 311141; RV32-NEXT: slli a7, a7, 311142; RV32-NEXT: lw a4, 28(sp) # 4-byte Folded Reload1143; RV32-NEXT: srli t0, a4, 11144; RV32-NEXT: lw a4, 32(sp) # 4-byte Folded Reload1145; RV32-NEXT: slli a4, a4, 311146; RV32-NEXT: li s2, 641147; RV32-NEXT: bnez a4, .LBB3_51148; RV32-NEXT: # %bb.4: # %_udiv-special-cases1149; RV32-NEXT: li t6, 641150; RV32-NEXT: j .LBB3_61151; RV32-NEXT: .LBB3_5:1152; RV32-NEXT: srli t1, a4, 11153; RV32-NEXT: or t1, a4, t11154; RV32-NEXT: srli t6, t1, 21155; RV32-NEXT: or t1, t1, t61156; RV32-NEXT: srli t6, t1, 41157; RV32-NEXT: or t1, t1, t61158; RV32-NEXT: srli t6, t1, 81159; RV32-NEXT: or t1, t1, t61160; RV32-NEXT: srli t6, t1, 161161; RV32-NEXT: or t1, t1, t61162; RV32-NEXT: not t1, t11163; RV32-NEXT: srli t6, t1, 11164; RV32-NEXT: and t6, t6, t51165; RV32-NEXT: sub t1, t1, t61166; RV32-NEXT: and t6, t1, t41167; RV32-NEXT: srli t1, t1, 21168; RV32-NEXT: and t1, t1, t41169; RV32-NEXT: add t1, t6, t11170; RV32-NEXT: srli t6, t1, 41171; RV32-NEXT: add t1, t1, t61172; RV32-NEXT: and t1, t1, t31173; RV32-NEXT: slli t6, t1, 81174; RV32-NEXT: add t1, t1, t61175; RV32-NEXT: slli t6, t1, 161176; RV32-NEXT: add t1, t1, t61177; RV32-NEXT: srli t6, t1, 241178; RV32-NEXT: .LBB3_6: # %_udiv-special-cases1179; RV32-NEXT: or t1, a5, a31180; RV32-NEXT: or a7, t0, a71181; RV32-NEXT: bnez a4, .LBB3_81182; RV32-NEXT: # %bb.7: # %_udiv-special-cases1183; RV32-NEXT: li t6, 1281184; RV32-NEXT: .LBB3_8: # %_udiv-special-cases1185; RV32-NEXT: or a5, a7, t11186; RV32-NEXT: addi a4, a6, 641187; RV32-NEXT: addi a3, t6, 1281188; RV32-NEXT: or a0, a0, t11189; RV32-NEXT: or a2, a2, a71190; RV32-NEXT: or s3, a2, a01191; RV32-NEXT: sltu s0, a3, t61192; RV32-NEXT: bnez s3, .LBB3_111193; RV32-NEXT: # %bb.9: # %_udiv-special-cases1194; RV32-NEXT: mv t6, s01195; RV32-NEXT: beqz t1, .LBB3_121196; RV32-NEXT: .LBB3_10:1197; RV32-NEXT: srli a0, t1, 11198; RV32-NEXT: or a0, t1, a01199; RV32-NEXT: srli a2, a0, 21200; RV32-NEXT: or a0, a0, a21201; RV32-NEXT: srli a2, a0, 41202; RV32-NEXT: or a0, a0, a21203; RV32-NEXT: srli a2, a0, 81204; RV32-NEXT: or a0, a0, a21205; RV32-NEXT: srli a2, a0, 161206; RV32-NEXT: or a0, a0, a21207; RV32-NEXT: not a0, a01208; RV32-NEXT: srli a2, a0, 11209; RV32-NEXT: and a2, a2, t51210; RV32-NEXT: sub a0, a0, a21211; RV32-NEXT: and a2, a0, t41212; RV32-NEXT: srli a0, a0, 21213; RV32-NEXT: and a0, a0, t41214; RV32-NEXT: add a0, a2, a01215; RV32-NEXT: srli a2, a0, 41216; RV32-NEXT: add a0, a0, a21217; RV32-NEXT: and a0, a0, t31218; RV32-NEXT: slli a2, a0, 81219; RV32-NEXT: add a0, a0, a21220; RV32-NEXT: slli a2, a0, 161221; RV32-NEXT: add a0, a0, a21222; RV32-NEXT: srli s1, a0, 241223; RV32-NEXT: beqz a5, .LBB3_131224; RV32-NEXT: j .LBB3_141225; RV32-NEXT: .LBB3_11:1226; RV32-NEXT: snez a0, a51227; RV32-NEXT: sltu a2, a4, a61228; RV32-NEXT: addi a0, a0, -11229; RV32-NEXT: and t6, a0, a21230; RV32-NEXT: bnez t1, .LBB3_101231; RV32-NEXT: .LBB3_12: # %_udiv-special-cases1232; RV32-NEXT: srli a0, a7, 11233; RV32-NEXT: or a0, a7, a01234; RV32-NEXT: srli a2, a0, 21235; RV32-NEXT: or a0, a0, a21236; RV32-NEXT: srli a2, a0, 41237; RV32-NEXT: or a0, a0, a21238; RV32-NEXT: srli a2, a0, 81239; RV32-NEXT: or a0, a0, a21240; RV32-NEXT: srli a2, a0, 161241; RV32-NEXT: or a0, a0, a21242; RV32-NEXT: not a0, a01243; RV32-NEXT: srli a2, a0, 11244; RV32-NEXT: and a2, a2, t51245; RV32-NEXT: sub a0, a0, a21246; RV32-NEXT: and a2, a0, t41247; RV32-NEXT: srli a0, a0, 21248; RV32-NEXT: and a0, a0, t41249; RV32-NEXT: add a0, a2, a01250; RV32-NEXT: srli a2, a0, 41251; RV32-NEXT: add a0, a0, a21252; RV32-NEXT: and a0, a0, t31253; RV32-NEXT: slli a2, a0, 81254; RV32-NEXT: add a0, a0, a21255; RV32-NEXT: slli a2, a0, 161256; RV32-NEXT: add a0, a0, a21257; RV32-NEXT: srli a0, a0, 241258; RV32-NEXT: addi s1, a0, 321259; RV32-NEXT: bnez a5, .LBB3_141260; RV32-NEXT: .LBB3_13: # %_udiv-special-cases1261; RV32-NEXT: mv s1, a41262; RV32-NEXT: .LBB3_14: # %_udiv-special-cases1263; RV32-NEXT: lw a7, 0(a1)1264; RV32-NEXT: lw t0, 4(a1)1265; RV32-NEXT: lw a6, 8(a1)1266; RV32-NEXT: bnez s3, .LBB3_161267; RV32-NEXT: # %bb.15: # %_udiv-special-cases1268; RV32-NEXT: mv s1, a31269; RV32-NEXT: .LBB3_16: # %_udiv-special-cases1270; RV32-NEXT: lw t1, 12(a1)1271; RV32-NEXT: lw a1, 16(a1)1272; RV32-NEXT: slli a0, a6, 311273; RV32-NEXT: srli a2, t0, 11274; RV32-NEXT: or a0, a2, a01275; RV32-NEXT: slli a2, t0, 311276; RV32-NEXT: srli a3, a7, 11277; RV32-NEXT: or a2, a3, a21278; RV32-NEXT: bnez a0, .LBB3_181279; RV32-NEXT: # %bb.17: # %_udiv-special-cases1280; RV32-NEXT: srli a3, a2, 11281; RV32-NEXT: or a3, a2, a31282; RV32-NEXT: srli a4, a3, 21283; RV32-NEXT: or a3, a3, a41284; RV32-NEXT: srli a4, a3, 41285; RV32-NEXT: or a3, a3, a41286; RV32-NEXT: srli a4, a3, 81287; RV32-NEXT: or a3, a3, a41288; RV32-NEXT: srli a4, a3, 161289; RV32-NEXT: or a3, a3, a41290; RV32-NEXT: not a3, a31291; RV32-NEXT: srli a4, a3, 11292; RV32-NEXT: and a4, a4, t51293; RV32-NEXT: sub a3, a3, a41294; RV32-NEXT: and a4, a3, t41295; RV32-NEXT: srli a3, a3, 21296; RV32-NEXT: and a3, a3, t41297; RV32-NEXT: add a3, a4, a31298; RV32-NEXT: srli a4, a3, 41299; RV32-NEXT: add a3, a3, a41300; RV32-NEXT: and a3, a3, t31301; RV32-NEXT: slli a4, a3, 81302; RV32-NEXT: add a3, a3, a41303; RV32-NEXT: slli a4, a3, 161304; RV32-NEXT: add a3, a3, a41305; RV32-NEXT: srli a3, a3, 241306; RV32-NEXT: addi s5, a3, 321307; RV32-NEXT: j .LBB3_191308; RV32-NEXT: .LBB3_18:1309; RV32-NEXT: srli a3, a0, 11310; RV32-NEXT: or a3, a0, a31311; RV32-NEXT: srli a4, a3, 21312; RV32-NEXT: or a3, a3, a41313; RV32-NEXT: srli a4, a3, 41314; RV32-NEXT: or a3, a3, a41315; RV32-NEXT: srli a4, a3, 81316; RV32-NEXT: or a3, a3, a41317; RV32-NEXT: srli a4, a3, 161318; RV32-NEXT: or a3, a3, a41319; RV32-NEXT: not a3, a31320; RV32-NEXT: srli a4, a3, 11321; RV32-NEXT: and a4, a4, t51322; RV32-NEXT: sub a3, a3, a41323; RV32-NEXT: and a4, a3, t41324; RV32-NEXT: srli a3, a3, 21325; RV32-NEXT: and a3, a3, t41326; RV32-NEXT: add a3, a4, a31327; RV32-NEXT: srli a4, a3, 41328; RV32-NEXT: add a3, a3, a41329; RV32-NEXT: and a3, a3, t31330; RV32-NEXT: slli a4, a3, 81331; RV32-NEXT: add a3, a3, a41332; RV32-NEXT: slli a4, a3, 161333; RV32-NEXT: add a3, a3, a41334; RV32-NEXT: srli s5, a3, 241335; RV32-NEXT: .LBB3_19: # %_udiv-special-cases1336; RV32-NEXT: srli a3, t1, 11337; RV32-NEXT: slli a4, a1, 311338; RV32-NEXT: slli a5, t1, 311339; RV32-NEXT: slli s4, a7, 311340; RV32-NEXT: srli s6, a6, 11341; RV32-NEXT: beqz s4, .LBB3_211342; RV32-NEXT: # %bb.20:1343; RV32-NEXT: srli s2, s4, 11344; RV32-NEXT: or s2, s4, s21345; RV32-NEXT: srli s7, s2, 21346; RV32-NEXT: or s2, s2, s71347; RV32-NEXT: srli s7, s2, 41348; RV32-NEXT: or s2, s2, s71349; RV32-NEXT: srli s7, s2, 81350; RV32-NEXT: or s2, s2, s71351; RV32-NEXT: srli s7, s2, 161352; RV32-NEXT: or s2, s2, s71353; RV32-NEXT: not s2, s21354; RV32-NEXT: srli s7, s2, 11355; RV32-NEXT: and s7, s7, t51356; RV32-NEXT: sub s2, s2, s71357; RV32-NEXT: and s7, s2, t41358; RV32-NEXT: srli s2, s2, 21359; RV32-NEXT: and s2, s2, t41360; RV32-NEXT: add s2, s7, s21361; RV32-NEXT: srli s7, s2, 41362; RV32-NEXT: add s2, s2, s71363; RV32-NEXT: and s2, s2, t31364; RV32-NEXT: slli s7, s2, 81365; RV32-NEXT: add s2, s2, s71366; RV32-NEXT: slli s7, s2, 161367; RV32-NEXT: add s2, s2, s71368; RV32-NEXT: srli s2, s2, 241369; RV32-NEXT: .LBB3_21: # %_udiv-special-cases1370; RV32-NEXT: or s7, a4, a31371; RV32-NEXT: or s6, s6, a51372; RV32-NEXT: bnez s4, .LBB3_231373; RV32-NEXT: # %bb.22: # %_udiv-special-cases1374; RV32-NEXT: li s2, 1281375; RV32-NEXT: .LBB3_23: # %_udiv-special-cases1376; RV32-NEXT: or s4, s6, s71377; RV32-NEXT: addi a5, s5, 641378; RV32-NEXT: addi a3, s2, 1281379; RV32-NEXT: or a0, a0, s71380; RV32-NEXT: or a4, a2, s61381; RV32-NEXT: or a4, a4, a01382; RV32-NEXT: sltu a0, a3, s21383; RV32-NEXT: bnez a4, .LBB3_261384; RV32-NEXT: # %bb.24: # %_udiv-special-cases1385; RV32-NEXT: mv a2, a01386; RV32-NEXT: snez s2, s31387; RV32-NEXT: beqz s7, .LBB3_271388; RV32-NEXT: .LBB3_25:1389; RV32-NEXT: srli s3, s7, 11390; RV32-NEXT: or s3, s7, s31391; RV32-NEXT: srli s5, s3, 21392; RV32-NEXT: or s3, s3, s51393; RV32-NEXT: srli s5, s3, 41394; RV32-NEXT: or s3, s3, s51395; RV32-NEXT: srli s5, s3, 81396; RV32-NEXT: or s3, s3, s51397; RV32-NEXT: srli s5, s3, 161398; RV32-NEXT: or s3, s3, s51399; RV32-NEXT: not s3, s31400; RV32-NEXT: srli s5, s3, 11401; RV32-NEXT: and t5, s5, t51402; RV32-NEXT: sub t5, s3, t51403; RV32-NEXT: and s3, t5, t41404; RV32-NEXT: srli t5, t5, 21405; RV32-NEXT: and t4, t5, t41406; RV32-NEXT: add t4, s3, t41407; RV32-NEXT: srli t5, t4, 41408; RV32-NEXT: add t4, t4, t51409; RV32-NEXT: and t3, t4, t31410; RV32-NEXT: slli t4, t3, 81411; RV32-NEXT: add t3, t3, t41412; RV32-NEXT: slli t4, t3, 161413; RV32-NEXT: add t3, t3, t41414; RV32-NEXT: srli t3, t3, 241415; RV32-NEXT: j .LBB3_281416; RV32-NEXT: .LBB3_26:1417; RV32-NEXT: snez a2, s41418; RV32-NEXT: sltu s2, a5, s51419; RV32-NEXT: addi a2, a2, -11420; RV32-NEXT: and a2, a2, s21421; RV32-NEXT: snez s2, s31422; RV32-NEXT: bnez s7, .LBB3_251423; RV32-NEXT: .LBB3_27: # %_udiv-special-cases1424; RV32-NEXT: srli s3, s6, 11425; RV32-NEXT: or s3, s6, s31426; RV32-NEXT: srli s5, s3, 21427; RV32-NEXT: or s3, s3, s51428; RV32-NEXT: srli s5, s3, 41429; RV32-NEXT: or s3, s3, s51430; RV32-NEXT: srli s5, s3, 81431; RV32-NEXT: or s3, s3, s51432; RV32-NEXT: srli s5, s3, 161433; RV32-NEXT: or s3, s3, s51434; RV32-NEXT: not s3, s31435; RV32-NEXT: srli s5, s3, 11436; RV32-NEXT: and t5, s5, t51437; RV32-NEXT: sub t5, s3, t51438; RV32-NEXT: and s3, t5, t41439; RV32-NEXT: srli t5, t5, 21440; RV32-NEXT: and t4, t5, t41441; RV32-NEXT: add t4, s3, t41442; RV32-NEXT: srli t5, t4, 41443; RV32-NEXT: add t4, t4, t51444; RV32-NEXT: and t3, t4, t31445; RV32-NEXT: slli t4, t3, 81446; RV32-NEXT: add t3, t3, t41447; RV32-NEXT: slli t4, t3, 161448; RV32-NEXT: add t3, t3, t41449; RV32-NEXT: srli t3, t3, 241450; RV32-NEXT: addi t3, t3, 321451; RV32-NEXT: .LBB3_28: # %_udiv-special-cases1452; RV32-NEXT: xori t4, s0, 11453; RV32-NEXT: addi s2, s2, -11454; RV32-NEXT: bnez s4, .LBB3_301455; RV32-NEXT: # %bb.29: # %_udiv-special-cases1456; RV32-NEXT: mv t3, a51457; RV32-NEXT: .LBB3_30: # %_udiv-special-cases1458; RV32-NEXT: andi s11, a1, 11459; RV32-NEXT: andi s8, t2, 11460; RV32-NEXT: lw a1, 32(sp) # 4-byte Folded Reload1461; RV32-NEXT: lw a5, 28(sp) # 4-byte Folded Reload1462; RV32-NEXT: or s9, a1, a51463; RV32-NEXT: or t2, a7, a61464; RV32-NEXT: neg a1, t41465; RV32-NEXT: and s0, s2, s01466; RV32-NEXT: bnez a4, .LBB3_321467; RV32-NEXT: # %bb.31: # %_udiv-special-cases1468; RV32-NEXT: mv t3, a31469; RV32-NEXT: .LBB3_32: # %_udiv-special-cases1470; RV32-NEXT: lw a3, 20(sp) # 4-byte Folded Reload1471; RV32-NEXT: lw a5, 24(sp) # 4-byte Folded Reload1472; RV32-NEXT: or s10, a3, a51473; RV32-NEXT: or a5, s9, s81474; RV32-NEXT: or t4, t0, t11475; RV32-NEXT: or t5, t2, s111476; RV32-NEXT: and a1, s0, a11477; RV32-NEXT: xori a3, a0, 11478; RV32-NEXT: snez a4, a41479; RV32-NEXT: neg a3, a31480; RV32-NEXT: addi a4, a4, -11481; RV32-NEXT: and a0, a4, a01482; RV32-NEXT: sltu a4, s1, t31483; RV32-NEXT: and t2, a0, a31484; RV32-NEXT: mv a3, a41485; RV32-NEXT: beq t6, a2, .LBB3_341486; RV32-NEXT: # %bb.33: # %_udiv-special-cases1487; RV32-NEXT: sltu a3, t6, a21488; RV32-NEXT: .LBB3_34: # %_udiv-special-cases1489; RV32-NEXT: or a0, a5, s101490; RV32-NEXT: or t5, t5, t41491; RV32-NEXT: sltu t4, a1, t21492; RV32-NEXT: mv s0, a31493; RV32-NEXT: beq a1, t2, .LBB3_361494; RV32-NEXT: # %bb.35: # %_udiv-special-cases1495; RV32-NEXT: mv s0, t41496; RV32-NEXT: .LBB3_36: # %_udiv-special-cases1497; RV32-NEXT: seqz a5, a01498; RV32-NEXT: seqz t5, t51499; RV32-NEXT: andi a0, s0, 11500; RV32-NEXT: sub a2, t6, a21501; RV32-NEXT: sub a1, a1, t21502; RV32-NEXT: sub t2, a2, a41503; RV32-NEXT: sltu a2, a1, a31504; RV32-NEXT: add a2, t4, a21505; RV32-NEXT: neg t4, a21506; RV32-NEXT: sub a4, a1, a31507; RV32-NEXT: or a1, a4, t41508; RV32-NEXT: sub a3, s1, t31509; RV32-NEXT: beqz a1, .LBB3_381510; RV32-NEXT: # %bb.37: # %_udiv-special-cases1511; RV32-NEXT: snez a1, a11512; RV32-NEXT: or a2, a5, t51513; RV32-NEXT: bnez a0, .LBB3_391514; RV32-NEXT: j .LBB3_401515; RV32-NEXT: .LBB3_38:1516; RV32-NEXT: snez a1, t21517; RV32-NEXT: sltiu a2, a3, 1291518; RV32-NEXT: xori a2, a2, 11519; RV32-NEXT: or a1, a2, a11520; RV32-NEXT: or a2, a5, t51521; RV32-NEXT: beqz a0, .LBB3_401522; RV32-NEXT: .LBB3_39: # %_udiv-special-cases1523; RV32-NEXT: mv a1, a01524; RV32-NEXT: .LBB3_40: # %_udiv-special-cases1525; RV32-NEXT: or t6, a2, a11526; RV32-NEXT: addi a1, t6, -11527; RV32-NEXT: and a2, s11, a11528; RV32-NEXT: and a5, a1, t11529; RV32-NEXT: and t3, a1, a61530; RV32-NEXT: and t5, a1, t01531; RV32-NEXT: and a1, a1, a71532; RV32-NEXT: bnez t6, .LBB3_571533; RV32-NEXT: # %bb.41: # %_udiv-special-cases1534; RV32-NEXT: or t6, t2, t41535; RV32-NEXT: xori s0, a3, 1281536; RV32-NEXT: or s0, s0, a01537; RV32-NEXT: or s0, s0, a41538; RV32-NEXT: or t6, s0, t61539; RV32-NEXT: beqz t6, .LBB3_571540; RV32-NEXT: # %bb.42: # %udiv-bb11541; RV32-NEXT: sw ra, 8(sp) # 4-byte Folded Spill1542; RV32-NEXT: addi a1, a3, 11543; RV32-NEXT: sw zero, 136(sp)1544; RV32-NEXT: sw zero, 140(sp)1545; RV32-NEXT: sw zero, 144(sp)1546; RV32-NEXT: sw zero, 148(sp)1547; RV32-NEXT: sw zero, 120(sp)1548; RV32-NEXT: sw zero, 124(sp)1549; RV32-NEXT: sw zero, 128(sp)1550; RV32-NEXT: sw zero, 132(sp)1551; RV32-NEXT: sw a7, 152(sp)1552; RV32-NEXT: sw t0, 156(sp)1553; RV32-NEXT: sw a6, 160(sp)1554; RV32-NEXT: sw t1, 164(sp)1555; RV32-NEXT: sw s11, 168(sp)1556; RV32-NEXT: li a5, 1281557; RV32-NEXT: addi t3, sp, 1521558; RV32-NEXT: neg a2, a31559; RV32-NEXT: seqz t5, a11560; RV32-NEXT: sub a5, a5, a31561; RV32-NEXT: add t2, t2, t51562; RV32-NEXT: andi a3, a5, 311563; RV32-NEXT: srli t5, a5, 31564; RV32-NEXT: or t6, a1, t21565; RV32-NEXT: xori a5, a3, 311566; RV32-NEXT: andi a3, t5, 281567; RV32-NEXT: seqz t6, t61568; RV32-NEXT: sub ra, t3, a31569; RV32-NEXT: add t6, a4, t61570; RV32-NEXT: lw t3, 0(ra)1571; RV32-NEXT: lw s0, 4(ra)1572; RV32-NEXT: lw s1, 8(ra)1573; RV32-NEXT: lw a3, 12(ra)1574; RV32-NEXT: sltu a4, t6, a41575; RV32-NEXT: or t5, a1, t61576; RV32-NEXT: add t4, t4, a41577; RV32-NEXT: or a4, t2, t41578; RV32-NEXT: or a4, t5, a41579; RV32-NEXT: srli t5, s1, 11580; RV32-NEXT: seqz s2, a41581; RV32-NEXT: add a0, a0, s21582; RV32-NEXT: sll s2, a3, a21583; RV32-NEXT: srl t5, t5, a51584; RV32-NEXT: or t5, s2, t51585; RV32-NEXT: srli s2, s0, 11586; RV32-NEXT: sll s1, s1, a21587; RV32-NEXT: srl s2, s2, a51588; RV32-NEXT: or s2, s1, s21589; RV32-NEXT: srli s1, t3, 11590; RV32-NEXT: sll s0, s0, a21591; RV32-NEXT: srl s1, s1, a51592; RV32-NEXT: andi s3, a0, 11593; RV32-NEXT: or s1, s0, s11594; RV32-NEXT: or a0, a4, s31595; RV32-NEXT: sll t3, t3, a21596; RV32-NEXT: beqz a0, .LBB3_551597; RV32-NEXT: # %bb.43: # %udiv-preheader1598; RV32-NEXT: sw zero, 52(sp) # 4-byte Folded Spill1599; RV32-NEXT: sw zero, 48(sp) # 4-byte Folded Spill1600; RV32-NEXT: sw zero, 44(sp) # 4-byte Folded Spill1601; RV32-NEXT: sw zero, 40(sp) # 4-byte Folded Spill1602; RV32-NEXT: li s7, 01603; RV32-NEXT: srli a3, a3, 11604; RV32-NEXT: lw a0, 16(ra)1605; RV32-NEXT: sw zero, 104(sp)1606; RV32-NEXT: sw zero, 108(sp)1607; RV32-NEXT: sw zero, 112(sp)1608; RV32-NEXT: sw zero, 116(sp)1609; RV32-NEXT: sw zero, 88(sp)1610; RV32-NEXT: sw zero, 92(sp)1611; RV32-NEXT: sw zero, 96(sp)1612; RV32-NEXT: sw zero, 100(sp)1613; RV32-NEXT: sw s11, 72(sp)1614; RV32-NEXT: sw zero, 76(sp)1615; RV32-NEXT: sw zero, 80(sp)1616; RV32-NEXT: sw zero, 84(sp)1617; RV32-NEXT: sw a7, 56(sp)1618; RV32-NEXT: sw t0, 60(sp)1619; RV32-NEXT: sw a6, 64(sp)1620; RV32-NEXT: sw t1, 68(sp)1621; RV32-NEXT: srli a4, a1, 31622; RV32-NEXT: addi a6, sp, 561623; RV32-NEXT: andi a7, a1, 311624; RV32-NEXT: or t0, s9, s101625; RV32-NEXT: srl a3, a3, a51626; RV32-NEXT: andi a4, a4, 281627; RV32-NEXT: xori a5, a7, 311628; RV32-NEXT: snez a7, t01629; RV32-NEXT: add a4, a6, a41630; RV32-NEXT: add a7, s8, a71631; RV32-NEXT: lw a6, 16(a4)1632; RV32-NEXT: lw t0, 0(a4)1633; RV32-NEXT: lw t1, 4(a4)1634; RV32-NEXT: lw s0, 8(a4)1635; RV32-NEXT: lw a4, 12(a4)1636; RV32-NEXT: sll a0, a0, a21637; RV32-NEXT: or a3, a0, a31638; RV32-NEXT: slli a6, a6, 11639; RV32-NEXT: slli a0, a4, 11640; RV32-NEXT: slli a2, s0, 11641; RV32-NEXT: slli s4, t1, 11642; RV32-NEXT: sll a6, a6, a51643; RV32-NEXT: sll a0, a0, a51644; RV32-NEXT: sll s8, a2, a51645; RV32-NEXT: sll s4, s4, a51646; RV32-NEXT: srl a2, a4, a11647; RV32-NEXT: or ra, a2, a61648; RV32-NEXT: lw a6, 32(sp) # 4-byte Folded Reload1649; RV32-NEXT: seqz a4, a61650; RV32-NEXT: srl a2, s0, a11651; RV32-NEXT: or a2, a2, a01652; RV32-NEXT: lw a5, 20(sp) # 4-byte Folded Reload1653; RV32-NEXT: or a0, a6, a51654; RV32-NEXT: sub s5, a5, a41655; RV32-NEXT: seqz a4, a01656; RV32-NEXT: srl a0, t1, a11657; RV32-NEXT: or a0, a0, s81658; RV32-NEXT: lw a5, 28(sp) # 4-byte Folded Reload1659; RV32-NEXT: sub t1, a5, a41660; RV32-NEXT: sw t1, 36(sp) # 4-byte Folded Spill1661; RV32-NEXT: sltu a4, a5, a41662; RV32-NEXT: addi a7, a7, 11663; RV32-NEXT: lw a5, 24(sp) # 4-byte Folded Reload1664; RV32-NEXT: sub s6, a5, a41665; RV32-NEXT: andi a4, a7, 11666; RV32-NEXT: sw a4, 16(sp) # 4-byte Folded Spill1667; RV32-NEXT: andi a5, a3, 11668; RV32-NEXT: srl a3, t0, a11669; RV32-NEXT: or a4, a3, s41670; RV32-NEXT: addi a6, a6, -11671; RV32-NEXT: sw a6, 12(sp) # 4-byte Folded Spill1672; RV32-NEXT: li s11, 01673; RV32-NEXT: li s10, 01674; RV32-NEXT: j .LBB3_451675; RV32-NEXT: .LBB3_44: # %udiv-do-while1676; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11677; RV32-NEXT: lw s0, 28(sp) # 4-byte Folded Reload1678; RV32-NEXT: and s0, a5, s01679; RV32-NEXT: xor s8, t1, a71680; RV32-NEXT: xor s9, a2, s01681; RV32-NEXT: or s8, s9, s81682; RV32-NEXT: li s9, 01683; RV32-NEXT: li s8, 01684; RV32-NEXT: sltu s4, a2, s01685; RV32-NEXT: sub s0, a2, s01686; RV32-NEXT: sub a7, t1, a71687; RV32-NEXT: srli a2, s2, 311688; RV32-NEXT: sub a0, a0, t01689; RV32-NEXT: slli t0, t5, 11690; RV32-NEXT: or t0, t0, a21691; RV32-NEXT: srli a2, s1, 311692; RV32-NEXT: slli s2, s2, 11693; RV32-NEXT: or t1, s2, a21694; RV32-NEXT: srli a2, t3, 311695; RV32-NEXT: slli s1, s1, 11696; RV32-NEXT: or s1, s1, a21697; RV32-NEXT: slli t3, t3, 11698; RV32-NEXT: lw a2, 52(sp) # 4-byte Folded Reload1699; RV32-NEXT: or t3, a2, t31700; RV32-NEXT: srli a2, t5, 311701; RV32-NEXT: or s7, s7, a21702; RV32-NEXT: sub a2, s0, ra1703; RV32-NEXT: sltu s0, s0, ra1704; RV32-NEXT: or t5, a1, t61705; RV32-NEXT: sub a7, a7, s41706; RV32-NEXT: or s2, t2, t41707; RV32-NEXT: sub a0, a0, a61708; RV32-NEXT: or a6, a1, t21709; RV32-NEXT: or s4, t5, s21710; RV32-NEXT: seqz t5, a11711; RV32-NEXT: addi a1, a1, -11712; RV32-NEXT: andi a5, a5, 11713; RV32-NEXT: sw a5, 52(sp) # 4-byte Folded Spill1714; RV32-NEXT: seqz a6, a61715; RV32-NEXT: sub t2, t2, t51716; RV32-NEXT: lw a5, 48(sp) # 4-byte Folded Reload1717; RV32-NEXT: or s1, a5, s11718; RV32-NEXT: lw a5, 44(sp) # 4-byte Folded Reload1719; RV32-NEXT: or s2, a5, t11720; RV32-NEXT: lw a5, 40(sp) # 4-byte Folded Reload1721; RV32-NEXT: or t5, a5, t01722; RV32-NEXT: andi a5, s7, 11723; RV32-NEXT: sub ra, a7, s01724; RV32-NEXT: snez a7, s41725; RV32-NEXT: sltu t0, t6, a61726; RV32-NEXT: sub t6, t6, a61727; RV32-NEXT: add a7, s3, a71728; RV32-NEXT: sub t4, t4, t01729; RV32-NEXT: or a6, a1, t61730; RV32-NEXT: addi a7, a7, 11731; RV32-NEXT: or t0, t2, t41732; RV32-NEXT: andi s3, a7, 11733; RV32-NEXT: or a6, a6, t01734; RV32-NEXT: or a6, a6, s31735; RV32-NEXT: sub a4, a4, a31736; RV32-NEXT: sw zero, 48(sp) # 4-byte Folded Spill1737; RV32-NEXT: sw zero, 44(sp) # 4-byte Folded Spill1738; RV32-NEXT: sw zero, 40(sp) # 4-byte Folded Spill1739; RV32-NEXT: li s7, 01740; RV32-NEXT: beqz a6, .LBB3_561741; RV32-NEXT: .LBB3_45: # %udiv-do-while1742; RV32-NEXT: # =>This Inner Loop Header: Depth=11743; RV32-NEXT: srli a3, a2, 311744; RV32-NEXT: slli a6, ra, 11745; RV32-NEXT: or t1, a6, a31746; RV32-NEXT: srli a3, a0, 311747; RV32-NEXT: slli a2, a2, 11748; RV32-NEXT: or a2, a2, a31749; RV32-NEXT: beq s6, t1, .LBB3_471750; RV32-NEXT: # %bb.46: # %udiv-do-while1751; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11752; RV32-NEXT: sltu a3, s6, t11753; RV32-NEXT: j .LBB3_481754; RV32-NEXT: .LBB3_47: # in Loop: Header=BB3_45 Depth=11755; RV32-NEXT: lw a3, 36(sp) # 4-byte Folded Reload1756; RV32-NEXT: sltu a3, a3, a21757; RV32-NEXT: .LBB3_48: # %udiv-do-while1758; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11759; RV32-NEXT: srli a6, a4, 311760; RV32-NEXT: slli a0, a0, 11761; RV32-NEXT: slli a4, a4, 11762; RV32-NEXT: or a0, a0, a61763; RV32-NEXT: andi a5, a5, 11764; RV32-NEXT: or a4, a4, a51765; RV32-NEXT: beq s5, a0, .LBB3_501766; RV32-NEXT: # %bb.49: # %udiv-do-while1767; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11768; RV32-NEXT: sltu a5, s5, a01769; RV32-NEXT: j .LBB3_511770; RV32-NEXT: .LBB3_50: # in Loop: Header=BB3_45 Depth=11771; RV32-NEXT: lw a5, 12(sp) # 4-byte Folded Reload1772; RV32-NEXT: sltu a5, a5, a41773; RV32-NEXT: .LBB3_51: # %udiv-do-while1774; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11775; RV32-NEXT: lw a6, 36(sp) # 4-byte Folded Reload1776; RV32-NEXT: xor a6, a6, a21777; RV32-NEXT: xor a7, s6, t11778; RV32-NEXT: or a6, a6, a71779; RV32-NEXT: beqz a6, .LBB3_531780; RV32-NEXT: # %bb.52: # %udiv-do-while1781; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11782; RV32-NEXT: mv a5, a31783; RV32-NEXT: .LBB3_53: # %udiv-do-while1784; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11785; RV32-NEXT: srli a3, ra, 311786; RV32-NEXT: lw a6, 16(sp) # 4-byte Folded Reload1787; RV32-NEXT: sub a3, a6, a31788; RV32-NEXT: sub a3, a3, a51789; RV32-NEXT: slli a3, a3, 311790; RV32-NEXT: srai a5, a3, 311791; RV32-NEXT: lw a3, 24(sp) # 4-byte Folded Reload1792; RV32-NEXT: and a7, a5, a31793; RV32-NEXT: lw a3, 32(sp) # 4-byte Folded Reload1794; RV32-NEXT: and a3, a5, a31795; RV32-NEXT: lw a6, 20(sp) # 4-byte Folded Reload1796; RV32-NEXT: and t0, a5, a61797; RV32-NEXT: sltu a6, a4, a31798; RV32-NEXT: mv ra, a61799; RV32-NEXT: beq a0, t0, .LBB3_441800; RV32-NEXT: # %bb.54: # %udiv-do-while1801; RV32-NEXT: # in Loop: Header=BB3_45 Depth=11802; RV32-NEXT: sltu ra, a0, t01803; RV32-NEXT: j .LBB3_441804; RV32-NEXT: .LBB3_55:1805; RV32-NEXT: sw zero, 52(sp) # 4-byte Folded Spill1806; RV32-NEXT: li s11, 01807; RV32-NEXT: li s9, 01808; RV32-NEXT: li s10, 01809; RV32-NEXT: li s8, 01810; RV32-NEXT: .LBB3_56: # %udiv-loop-exit1811; RV32-NEXT: srli a0, s2, 311812; RV32-NEXT: slli a1, t5, 11813; RV32-NEXT: or a0, a1, a01814; RV32-NEXT: srli a1, s1, 311815; RV32-NEXT: slli s2, s2, 11816; RV32-NEXT: or a2, s2, a11817; RV32-NEXT: srli a3, t3, 311818; RV32-NEXT: slli s1, s1, 11819; RV32-NEXT: srli a4, t5, 311820; RV32-NEXT: slli t3, t3, 11821; RV32-NEXT: lw a1, 52(sp) # 4-byte Folded Reload1822; RV32-NEXT: or a1, a1, t31823; RV32-NEXT: or a3, s11, a31824; RV32-NEXT: or a4, s8, a41825; RV32-NEXT: or t5, a3, s11826; RV32-NEXT: or t3, s9, a21827; RV32-NEXT: or a5, s10, a01828; RV32-NEXT: andi a2, a4, 11829; RV32-NEXT: lw ra, 8(sp) # 4-byte Folded Reload1830; RV32-NEXT: .LBB3_57: # %udiv-end1831; RV32-NEXT: sw a1, 0(ra)1832; RV32-NEXT: sw t5, 4(ra)1833; RV32-NEXT: sw t3, 8(ra)1834; RV32-NEXT: sw a5, 12(ra)1835; RV32-NEXT: andi a2, a2, 11836; RV32-NEXT: sb a2, 16(ra)1837; RV32-NEXT: lw ra, 236(sp) # 4-byte Folded Reload1838; RV32-NEXT: lw s0, 232(sp) # 4-byte Folded Reload1839; RV32-NEXT: lw s1, 228(sp) # 4-byte Folded Reload1840; RV32-NEXT: lw s2, 224(sp) # 4-byte Folded Reload1841; RV32-NEXT: lw s3, 220(sp) # 4-byte Folded Reload1842; RV32-NEXT: lw s4, 216(sp) # 4-byte Folded Reload1843; RV32-NEXT: lw s5, 212(sp) # 4-byte Folded Reload1844; RV32-NEXT: lw s6, 208(sp) # 4-byte Folded Reload1845; RV32-NEXT: lw s7, 204(sp) # 4-byte Folded Reload1846; RV32-NEXT: lw s8, 200(sp) # 4-byte Folded Reload1847; RV32-NEXT: lw s9, 196(sp) # 4-byte Folded Reload1848; RV32-NEXT: lw s10, 192(sp) # 4-byte Folded Reload1849; RV32-NEXT: lw s11, 188(sp) # 4-byte Folded Reload1850; RV32-NEXT: addi sp, sp, 2401851; RV32-NEXT: ret1852;1853; RV64-LABEL: udiv_i129:1854; RV64: # %bb.0: # %_udiv-special-cases1855; RV64-NEXT: ld a3, 0(a2)1856; RV64-NEXT: ld a4, 8(a2)1857; RV64-NEXT: ld t1, 16(a2)1858; RV64-NEXT: lui a2, 3495251859; RV64-NEXT: lui a5, 2097151860; RV64-NEXT: lui a6, 616811861; RV64-NEXT: addi t0, a2, 13651862; RV64-NEXT: addi a7, a5, 8191863; RV64-NEXT: addi a6, a6, -2411864; RV64-NEXT: slli a2, t0, 321865; RV64-NEXT: slli a5, a7, 321866; RV64-NEXT: slli t2, a6, 321867; RV64-NEXT: add t0, t0, a21868; RV64-NEXT: add a7, a7, a51869; RV64-NEXT: add a6, a6, t21870; RV64-NEXT: srli a2, a4, 11871; RV64-NEXT: slli a5, t1, 631872; RV64-NEXT: slli t2, a4, 631873; RV64-NEXT: or t3, a5, a21874; RV64-NEXT: srli a2, a3, 11875; RV64-NEXT: or t4, a2, t21876; RV64-NEXT: bnez t3, .LBB3_21877; RV64-NEXT: # %bb.1: # %_udiv-special-cases1878; RV64-NEXT: srli a2, t4, 11879; RV64-NEXT: or a2, t4, a21880; RV64-NEXT: srli a5, a2, 21881; RV64-NEXT: or a2, a2, a51882; RV64-NEXT: srli a5, a2, 41883; RV64-NEXT: or a2, a2, a51884; RV64-NEXT: srli a5, a2, 81885; RV64-NEXT: or a2, a2, a51886; RV64-NEXT: srli a5, a2, 161887; RV64-NEXT: or a2, a2, a51888; RV64-NEXT: srli a5, a2, 321889; RV64-NEXT: or a2, a2, a51890; RV64-NEXT: not a2, a21891; RV64-NEXT: srli a5, a2, 11892; RV64-NEXT: and a5, a5, t01893; RV64-NEXT: sub a2, a2, a51894; RV64-NEXT: and a5, a2, a71895; RV64-NEXT: srli a2, a2, 21896; RV64-NEXT: and a2, a2, a71897; RV64-NEXT: add a2, a5, a21898; RV64-NEXT: srli a5, a2, 41899; RV64-NEXT: add a2, a2, a51900; RV64-NEXT: and a2, a2, a61901; RV64-NEXT: slli a5, a2, 81902; RV64-NEXT: add a2, a2, a51903; RV64-NEXT: slli a5, a2, 161904; RV64-NEXT: add a2, a2, a51905; RV64-NEXT: slli a5, a2, 321906; RV64-NEXT: add a2, a2, a51907; RV64-NEXT: srli a2, a2, 561908; RV64-NEXT: addi t2, a2, 641909; RV64-NEXT: j .LBB3_31910; RV64-NEXT: .LBB3_2:1911; RV64-NEXT: srli a2, t3, 11912; RV64-NEXT: or a2, t3, a21913; RV64-NEXT: srli a5, a2, 21914; RV64-NEXT: or a2, a2, a51915; RV64-NEXT: srli a5, a2, 41916; RV64-NEXT: or a2, a2, a51917; RV64-NEXT: srli a5, a2, 81918; RV64-NEXT: or a2, a2, a51919; RV64-NEXT: srli a5, a2, 161920; RV64-NEXT: or a2, a2, a51921; RV64-NEXT: srli a5, a2, 321922; RV64-NEXT: or a2, a2, a51923; RV64-NEXT: not a2, a21924; RV64-NEXT: srli a5, a2, 11925; RV64-NEXT: and a5, a5, t01926; RV64-NEXT: sub a2, a2, a51927; RV64-NEXT: and a5, a2, a71928; RV64-NEXT: srli a2, a2, 21929; RV64-NEXT: and a2, a2, a71930; RV64-NEXT: add a2, a5, a21931; RV64-NEXT: srli a5, a2, 41932; RV64-NEXT: add a2, a2, a51933; RV64-NEXT: and a2, a2, a61934; RV64-NEXT: slli a5, a2, 81935; RV64-NEXT: add a2, a2, a51936; RV64-NEXT: slli a5, a2, 161937; RV64-NEXT: add a2, a2, a51938; RV64-NEXT: slli a5, a2, 321939; RV64-NEXT: add a2, a2, a51940; RV64-NEXT: srli t2, a2, 561941; RV64-NEXT: .LBB3_3: # %_udiv-special-cases1942; RV64-NEXT: addi sp, sp, -1921943; RV64-NEXT: sd s0, 184(sp) # 8-byte Folded Spill1944; RV64-NEXT: sd s1, 176(sp) # 8-byte Folded Spill1945; RV64-NEXT: sd s2, 168(sp) # 8-byte Folded Spill1946; RV64-NEXT: sd s3, 160(sp) # 8-byte Folded Spill1947; RV64-NEXT: sd s4, 152(sp) # 8-byte Folded Spill1948; RV64-NEXT: sd s5, 144(sp) # 8-byte Folded Spill1949; RV64-NEXT: sd s6, 136(sp) # 8-byte Folded Spill1950; RV64-NEXT: slli a2, a3, 631951; RV64-NEXT: li t5, 1281952; RV64-NEXT: bnez a2, .LBB3_51953; RV64-NEXT: # %bb.4: # %_udiv-special-cases1954; RV64-NEXT: li s0, 1281955; RV64-NEXT: j .LBB3_61956; RV64-NEXT: .LBB3_5:1957; RV64-NEXT: srli a5, a2, 11958; RV64-NEXT: or a2, a2, a51959; RV64-NEXT: srli a5, a2, 21960; RV64-NEXT: or a2, a2, a51961; RV64-NEXT: srli a5, a2, 41962; RV64-NEXT: or a2, a2, a51963; RV64-NEXT: srli a5, a2, 81964; RV64-NEXT: or a2, a2, a51965; RV64-NEXT: srli a5, a2, 161966; RV64-NEXT: or a2, a2, a51967; RV64-NEXT: srli a5, a2, 321968; RV64-NEXT: or a2, a2, a51969; RV64-NEXT: not a2, a21970; RV64-NEXT: srli a5, a2, 11971; RV64-NEXT: and a5, a5, t01972; RV64-NEXT: sub a2, a2, a51973; RV64-NEXT: and a5, a2, a71974; RV64-NEXT: srli a2, a2, 21975; RV64-NEXT: and a2, a2, a71976; RV64-NEXT: add a2, a5, a21977; RV64-NEXT: srli a5, a2, 41978; RV64-NEXT: add a2, a2, a51979; RV64-NEXT: and a2, a2, a61980; RV64-NEXT: slli a5, a2, 81981; RV64-NEXT: add a2, a2, a51982; RV64-NEXT: slli a5, a2, 161983; RV64-NEXT: add a2, a2, a51984; RV64-NEXT: slli a5, a2, 321985; RV64-NEXT: add a2, a2, a51986; RV64-NEXT: srli s0, a2, 561987; RV64-NEXT: .LBB3_6: # %_udiv-special-cases1988; RV64-NEXT: ld a5, 0(a1)1989; RV64-NEXT: ld a2, 8(a1)1990; RV64-NEXT: ld s2, 16(a1)1991; RV64-NEXT: or a1, t4, t31992; RV64-NEXT: addi s1, s0, 1281993; RV64-NEXT: bnez a1, .LBB3_81994; RV64-NEXT: # %bb.7: # %_udiv-special-cases1995; RV64-NEXT: mv t2, s11996; RV64-NEXT: .LBB3_8: # %_udiv-special-cases1997; RV64-NEXT: snez s3, a11998; RV64-NEXT: srli a1, a2, 11999; RV64-NEXT: slli t3, s2, 632000; RV64-NEXT: slli t4, a2, 632001; RV64-NEXT: or a1, t3, a12002; RV64-NEXT: srli t3, a5, 12003; RV64-NEXT: or t6, t3, t42004; RV64-NEXT: bnez a1, .LBB3_102005; RV64-NEXT: # %bb.9: # %_udiv-special-cases2006; RV64-NEXT: srli t3, t6, 12007; RV64-NEXT: or t3, t6, t32008; RV64-NEXT: srli t4, t3, 22009; RV64-NEXT: or t3, t3, t42010; RV64-NEXT: srli t4, t3, 42011; RV64-NEXT: or t3, t3, t42012; RV64-NEXT: srli t4, t3, 82013; RV64-NEXT: or t3, t3, t42014; RV64-NEXT: srli t4, t3, 162015; RV64-NEXT: or t3, t3, t42016; RV64-NEXT: srli t4, t3, 322017; RV64-NEXT: or t3, t3, t42018; RV64-NEXT: not t3, t32019; RV64-NEXT: srli t4, t3, 12020; RV64-NEXT: and t4, t4, t02021; RV64-NEXT: sub t3, t3, t42022; RV64-NEXT: and t4, t3, a72023; RV64-NEXT: srli t3, t3, 22024; RV64-NEXT: and t3, t3, a72025; RV64-NEXT: add t3, t4, t32026; RV64-NEXT: srli t4, t3, 42027; RV64-NEXT: add t3, t3, t42028; RV64-NEXT: and t3, t3, a62029; RV64-NEXT: slli t4, t3, 82030; RV64-NEXT: add t3, t3, t42031; RV64-NEXT: slli t4, t3, 162032; RV64-NEXT: add t3, t3, t42033; RV64-NEXT: slli t4, t3, 322034; RV64-NEXT: add t3, t3, t42035; RV64-NEXT: srli t3, t3, 562036; RV64-NEXT: addi s4, t3, 642037; RV64-NEXT: j .LBB3_112038; RV64-NEXT: .LBB3_10:2039; RV64-NEXT: srli t3, a1, 12040; RV64-NEXT: or t3, a1, t32041; RV64-NEXT: srli t4, t3, 22042; RV64-NEXT: or t3, t3, t42043; RV64-NEXT: srli t4, t3, 42044; RV64-NEXT: or t3, t3, t42045; RV64-NEXT: srli t4, t3, 82046; RV64-NEXT: or t3, t3, t42047; RV64-NEXT: srli t4, t3, 162048; RV64-NEXT: or t3, t3, t42049; RV64-NEXT: srli t4, t3, 322050; RV64-NEXT: or t3, t3, t42051; RV64-NEXT: not t3, t32052; RV64-NEXT: srli t4, t3, 12053; RV64-NEXT: and t4, t4, t02054; RV64-NEXT: sub t3, t3, t42055; RV64-NEXT: and t4, t3, a72056; RV64-NEXT: srli t3, t3, 22057; RV64-NEXT: and t3, t3, a72058; RV64-NEXT: add t3, t4, t32059; RV64-NEXT: srli t4, t3, 42060; RV64-NEXT: add t3, t3, t42061; RV64-NEXT: and t3, t3, a62062; RV64-NEXT: slli t4, t3, 82063; RV64-NEXT: add t3, t3, t42064; RV64-NEXT: slli t4, t3, 162065; RV64-NEXT: add t3, t3, t42066; RV64-NEXT: slli t4, t3, 322067; RV64-NEXT: add t3, t3, t42068; RV64-NEXT: srli s4, t3, 562069; RV64-NEXT: .LBB3_11: # %_udiv-special-cases2070; RV64-NEXT: andi t4, s2, 12071; RV64-NEXT: andi t1, t1, 12072; RV64-NEXT: or t3, a3, a42073; RV64-NEXT: or s2, a5, a22074; RV64-NEXT: sltu s0, s1, s02075; RV64-NEXT: slli s1, a5, 632076; RV64-NEXT: addi s3, s3, -12077; RV64-NEXT: beqz s1, .LBB3_132078; RV64-NEXT: # %bb.12:2079; RV64-NEXT: srli t5, s1, 12080; RV64-NEXT: or t5, s1, t52081; RV64-NEXT: srli s1, t5, 22082; RV64-NEXT: or t5, t5, s12083; RV64-NEXT: srli s1, t5, 42084; RV64-NEXT: or t5, t5, s12085; RV64-NEXT: srli s1, t5, 82086; RV64-NEXT: or t5, t5, s12087; RV64-NEXT: srli s1, t5, 162088; RV64-NEXT: or t5, t5, s12089; RV64-NEXT: srli s1, t5, 322090; RV64-NEXT: or t5, t5, s12091; RV64-NEXT: not t5, t52092; RV64-NEXT: srli s1, t5, 12093; RV64-NEXT: and t0, s1, t02094; RV64-NEXT: sub t0, t5, t02095; RV64-NEXT: and t5, t0, a72096; RV64-NEXT: srli t0, t0, 22097; RV64-NEXT: and a7, t0, a72098; RV64-NEXT: add a7, t5, a72099; RV64-NEXT: srli t0, a7, 42100; RV64-NEXT: add a7, a7, t02101; RV64-NEXT: and a6, a7, a62102; RV64-NEXT: slli a7, a6, 82103; RV64-NEXT: add a6, a6, a72104; RV64-NEXT: slli a7, a6, 162105; RV64-NEXT: add a6, a6, a72106; RV64-NEXT: slli a7, a6, 322107; RV64-NEXT: add a6, a6, a72108; RV64-NEXT: srli t5, a6, 562109; RV64-NEXT: .LBB3_13: # %_udiv-special-cases2110; RV64-NEXT: or t0, t3, t12111; RV64-NEXT: or a6, s2, t42112; RV64-NEXT: and a7, s3, s02113; RV64-NEXT: or t6, t6, a12114; RV64-NEXT: addi s0, t5, 1282115; RV64-NEXT: bnez t6, .LBB3_152116; RV64-NEXT: # %bb.14: # %_udiv-special-cases2117; RV64-NEXT: mv s4, s02118; RV64-NEXT: .LBB3_15: # %_udiv-special-cases2119; RV64-NEXT: seqz a1, t02120; RV64-NEXT: sltu t0, s0, t52121; RV64-NEXT: snez t5, t62122; RV64-NEXT: addi t5, t5, -12123; RV64-NEXT: and t0, t5, t02124; RV64-NEXT: sltu t5, t2, s42125; RV64-NEXT: seqz a6, a62126; RV64-NEXT: mv t6, t52127; RV64-NEXT: beq a7, t0, .LBB3_172128; RV64-NEXT: # %bb.16: # %_udiv-special-cases2129; RV64-NEXT: sltu t6, a7, t02130; RV64-NEXT: .LBB3_17: # %_udiv-special-cases2131; RV64-NEXT: or a1, a1, a62132; RV64-NEXT: andi a6, t6, 12133; RV64-NEXT: sub a7, a7, t02134; RV64-NEXT: sub t5, a7, t52135; RV64-NEXT: sub a7, t2, s42136; RV64-NEXT: beqz a6, .LBB3_192137; RV64-NEXT: # %bb.18: # %_udiv-special-cases2138; RV64-NEXT: mv t0, a62139; RV64-NEXT: j .LBB3_202140; RV64-NEXT: .LBB3_19:2141; RV64-NEXT: sltiu t0, a7, 1292142; RV64-NEXT: xori t0, t0, 12143; RV64-NEXT: snez t2, t52144; RV64-NEXT: or t0, t0, t22145; RV64-NEXT: .LBB3_20: # %_udiv-special-cases2146; RV64-NEXT: or t6, a1, t02147; RV64-NEXT: addi a1, t6, -12148; RV64-NEXT: and t2, t4, a12149; RV64-NEXT: and t0, a1, a22150; RV64-NEXT: and a1, a1, a52151; RV64-NEXT: bnez t6, .LBB3_302152; RV64-NEXT: # %bb.21: # %_udiv-special-cases2153; RV64-NEXT: xori t6, a7, 1282154; RV64-NEXT: or t6, t6, a62155; RV64-NEXT: or t6, t6, t52156; RV64-NEXT: beqz t6, .LBB3_302157; RV64-NEXT: # %bb.22: # %udiv-bb12158; RV64-NEXT: addi a1, a7, 12159; RV64-NEXT: sd zero, 64(sp)2160; RV64-NEXT: sd zero, 72(sp)2161; RV64-NEXT: sd zero, 80(sp)2162; RV64-NEXT: sd zero, 88(sp)2163; RV64-NEXT: sd a5, 96(sp)2164; RV64-NEXT: sd a2, 104(sp)2165; RV64-NEXT: sd t4, 112(sp)2166; RV64-NEXT: li t0, 1282167; RV64-NEXT: addi t2, sp, 962168; RV64-NEXT: neg s1, a72169; RV64-NEXT: seqz t6, a12170; RV64-NEXT: sub a7, t0, a72171; RV64-NEXT: add t5, t5, t62172; RV64-NEXT: andi t0, a7, 632173; RV64-NEXT: srli a7, a7, 32174; RV64-NEXT: or t6, a1, t52175; RV64-NEXT: xori s2, t0, 632176; RV64-NEXT: andi a7, a7, 242177; RV64-NEXT: seqz t0, t62178; RV64-NEXT: sub s3, t2, a72179; RV64-NEXT: add a6, a6, t02180; RV64-NEXT: ld t2, 0(s3)2181; RV64-NEXT: ld s4, 8(s3)2182; RV64-NEXT: andi a7, a6, 12183; RV64-NEXT: or t6, t6, a72184; RV64-NEXT: srli a6, t2, 12185; RV64-NEXT: sll t0, s4, s12186; RV64-NEXT: srl a6, a6, s22187; RV64-NEXT: or t0, t0, a62188; RV64-NEXT: sll a6, t2, s12189; RV64-NEXT: li t2, 02190; RV64-NEXT: beqz t6, .LBB3_282191; RV64-NEXT: # %bb.23: # %udiv-preheader2192; RV64-NEXT: li t6, 02193; RV64-NEXT: li s0, 02194; RV64-NEXT: srli s4, s4, 12195; RV64-NEXT: ld s3, 16(s3)2196; RV64-NEXT: sd zero, 32(sp)2197; RV64-NEXT: sd zero, 40(sp)2198; RV64-NEXT: sd zero, 48(sp)2199; RV64-NEXT: sd zero, 56(sp)2200; RV64-NEXT: sd a5, 0(sp)2201; RV64-NEXT: sd a2, 8(sp)2202; RV64-NEXT: sd t4, 16(sp)2203; RV64-NEXT: sd zero, 24(sp)2204; RV64-NEXT: srli a2, a1, 32205; RV64-NEXT: srl a5, s4, s22206; RV64-NEXT: mv t4, sp2207; RV64-NEXT: snez t3, t32208; RV64-NEXT: andi a2, a2, 242209; RV64-NEXT: add t1, t1, t32210; RV64-NEXT: add a2, t4, a22211; RV64-NEXT: ld t3, 0(a2)2212; RV64-NEXT: ld t4, 8(a2)2213; RV64-NEXT: ld a2, 16(a2)2214; RV64-NEXT: sll s1, s3, s12215; RV64-NEXT: andi s2, a1, 632216; RV64-NEXT: xori s2, s2, 632217; RV64-NEXT: or s3, s1, a52218; RV64-NEXT: slli a2, a2, 12219; RV64-NEXT: slli a5, t4, 12220; RV64-NEXT: sll a2, a2, s22221; RV64-NEXT: sll s2, a5, s22222; RV64-NEXT: srl s1, t4, a12223; RV64-NEXT: or s1, s1, a22224; RV64-NEXT: seqz a2, a32225; RV64-NEXT: sub a2, a4, a22226; RV64-NEXT: addi a5, t1, 12227; RV64-NEXT: andi a5, a5, 12228; RV64-NEXT: andi s3, s3, 12229; RV64-NEXT: srl t1, t3, a12230; RV64-NEXT: or s2, t1, s22231; RV64-NEXT: addi t1, a3, -12232; RV64-NEXT: j .LBB3_262233; RV64-NEXT: .LBB3_24: # %udiv-do-while2234; RV64-NEXT: # in Loop: Header=BB3_26 Depth=12235; RV64-NEXT: sltu t3, a2, s42236; RV64-NEXT: .LBB3_25: # %udiv-do-while2237; RV64-NEXT: # in Loop: Header=BB3_26 Depth=12238; RV64-NEXT: srli s1, s1, 632239; RV64-NEXT: sub t4, a5, s12240; RV64-NEXT: sub t3, t4, t32241; RV64-NEXT: slli t3, t3, 632242; RV64-NEXT: srai s1, t3, 632243; RV64-NEXT: and s3, s1, a42244; RV64-NEXT: li t3, 02245; RV64-NEXT: li t4, 02246; RV64-NEXT: srli s5, a6, 632247; RV64-NEXT: sub s4, s4, s32248; RV64-NEXT: slli s3, t0, 12249; RV64-NEXT: or s3, s3, s52250; RV64-NEXT: srli t0, t0, 632251; RV64-NEXT: slli a6, a6, 12252; RV64-NEXT: or a6, t2, a62253; RV64-NEXT: seqz t2, a12254; RV64-NEXT: or s0, s0, t02255; RV64-NEXT: or s5, a1, t52256; RV64-NEXT: sub t5, t5, t22257; RV64-NEXT: and s6, s1, a32258; RV64-NEXT: addi a1, a1, -12259; RV64-NEXT: andi t2, s1, 12260; RV64-NEXT: or t0, t6, s32261; RV64-NEXT: sltu t6, s2, s62262; RV64-NEXT: snez s5, s52263; RV64-NEXT: andi s3, s0, 12264; RV64-NEXT: sub s1, s4, t62265; RV64-NEXT: add a7, a7, s52266; RV64-NEXT: addi a7, a7, 12267; RV64-NEXT: andi a7, a7, 12268; RV64-NEXT: or t6, a1, t52269; RV64-NEXT: or s4, t6, a72270; RV64-NEXT: sub s2, s2, s62271; RV64-NEXT: li t6, 02272; RV64-NEXT: li s0, 02273; RV64-NEXT: beqz s4, .LBB3_292274; RV64-NEXT: .LBB3_26: # %udiv-do-while2275; RV64-NEXT: # =>This Inner Loop Header: Depth=12276; RV64-NEXT: srli t3, s2, 632277; RV64-NEXT: slli t4, s1, 12278; RV64-NEXT: slli s2, s2, 12279; RV64-NEXT: or s4, t4, t32280; RV64-NEXT: andi t3, s3, 12281; RV64-NEXT: or s2, s2, t32282; RV64-NEXT: bne a2, s4, .LBB3_242283; RV64-NEXT: # %bb.27: # in Loop: Header=BB3_26 Depth=12284; RV64-NEXT: sltu t3, t1, s22285; RV64-NEXT: j .LBB3_252286; RV64-NEXT: .LBB3_28:2287; RV64-NEXT: li t3, 02288; RV64-NEXT: li t4, 02289; RV64-NEXT: .LBB3_29: # %udiv-loop-exit2290; RV64-NEXT: srli a2, a6, 632291; RV64-NEXT: slli a3, t0, 12292; RV64-NEXT: srli a4, t0, 632293; RV64-NEXT: slli a6, a6, 12294; RV64-NEXT: or a1, t2, a62295; RV64-NEXT: or a2, t3, a22296; RV64-NEXT: or a4, t4, a42297; RV64-NEXT: or t0, a2, a32298; RV64-NEXT: andi t2, a4, 12299; RV64-NEXT: .LBB3_30: # %udiv-end2300; RV64-NEXT: andi a2, t2, 12301; RV64-NEXT: sd a1, 0(a0)2302; RV64-NEXT: sd t0, 8(a0)2303; RV64-NEXT: sb a2, 16(a0)2304; RV64-NEXT: ld s0, 184(sp) # 8-byte Folded Reload2305; RV64-NEXT: ld s1, 176(sp) # 8-byte Folded Reload2306; RV64-NEXT: ld s2, 168(sp) # 8-byte Folded Reload2307; RV64-NEXT: ld s3, 160(sp) # 8-byte Folded Reload2308; RV64-NEXT: ld s4, 152(sp) # 8-byte Folded Reload2309; RV64-NEXT: ld s5, 144(sp) # 8-byte Folded Reload2310; RV64-NEXT: ld s6, 136(sp) # 8-byte Folded Reload2311; RV64-NEXT: addi sp, sp, 1922312; RV64-NEXT: ret2313 %res = udiv i129 %x, %y2314 ret i129 %res2315}2316