1766 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d < %s | FileCheck %s --check-prefix=LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d < %s | FileCheck %s --check-prefix=LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA645; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d -loongarch-check-zero-division < %s \6; RUN: | FileCheck %s --check-prefix=LA32R-TRAP7; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d -loongarch-check-zero-division < %s \8; RUN: | FileCheck %s --check-prefix=LA32S-TRAP9; RUN: llc --mtriple=loongarch64 -mattr=+d -loongarch-check-zero-division < %s \10; RUN: | FileCheck %s --check-prefix=LA64-TRAP11 12;; Test the sdiv/udiv/srem/urem LLVM IR.13 14define i1 @sdiv_i1(i1 %a, i1 %b) {15; LA32R-LABEL: sdiv_i1:16; LA32R: # %bb.0: # %entry17; LA32R-NEXT: ret18;19; LA32S-LABEL: sdiv_i1:20; LA32S: # %bb.0: # %entry21; LA32S-NEXT: ret22;23; LA64-LABEL: sdiv_i1:24; LA64: # %bb.0: # %entry25; LA64-NEXT: ret26;27; LA32R-TRAP-LABEL: sdiv_i1:28; LA32R-TRAP: # %bb.0: # %entry29; LA32R-TRAP-NEXT: ret30;31; LA32S-TRAP-LABEL: sdiv_i1:32; LA32S-TRAP: # %bb.0: # %entry33; LA32S-TRAP-NEXT: ret34;35; LA64-TRAP-LABEL: sdiv_i1:36; LA64-TRAP: # %bb.0: # %entry37; LA64-TRAP-NEXT: ret38entry:39 %r = sdiv i1 %a, %b40 ret i1 %r41}42 43define i8 @sdiv_i8(i8 %a, i8 %b) {44; LA32R-LABEL: sdiv_i8:45; LA32R: # %bb.0: # %entry46; LA32R-NEXT: slli.w $a1, $a1, 2447; LA32R-NEXT: srai.w $a1, $a1, 2448; LA32R-NEXT: slli.w $a0, $a0, 2449; LA32R-NEXT: srai.w $a0, $a0, 2450; LA32R-NEXT: div.w $a0, $a0, $a151; LA32R-NEXT: ret52;53; LA32S-LABEL: sdiv_i8:54; LA32S: # %bb.0: # %entry55; LA32S-NEXT: ext.w.b $a1, $a156; LA32S-NEXT: ext.w.b $a0, $a057; LA32S-NEXT: div.w $a0, $a0, $a158; LA32S-NEXT: ret59;60; LA64-LABEL: sdiv_i8:61; LA64: # %bb.0: # %entry62; LA64-NEXT: ext.w.b $a1, $a163; LA64-NEXT: ext.w.b $a0, $a064; LA64-NEXT: div.d $a0, $a0, $a165; LA64-NEXT: ret66;67; LA32R-TRAP-LABEL: sdiv_i8:68; LA32R-TRAP: # %bb.0: # %entry69; LA32R-TRAP-NEXT: slli.w $a1, $a1, 2470; LA32R-TRAP-NEXT: srai.w $a1, $a1, 2471; LA32R-TRAP-NEXT: slli.w $a0, $a0, 2472; LA32R-TRAP-NEXT: srai.w $a0, $a0, 2473; LA32R-TRAP-NEXT: div.w $a0, $a0, $a174; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB1_275; LA32R-TRAP-NEXT: # %bb.1: # %entry76; LA32R-TRAP-NEXT: break 777; LA32R-TRAP-NEXT: .LBB1_2: # %entry78; LA32R-TRAP-NEXT: ret79;80; LA32S-TRAP-LABEL: sdiv_i8:81; LA32S-TRAP: # %bb.0: # %entry82; LA32S-TRAP-NEXT: ext.w.b $a1, $a183; LA32S-TRAP-NEXT: ext.w.b $a0, $a084; LA32S-TRAP-NEXT: div.w $a0, $a0, $a185; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB1_286; LA32S-TRAP-NEXT: # %bb.1: # %entry87; LA32S-TRAP-NEXT: break 788; LA32S-TRAP-NEXT: .LBB1_2: # %entry89; LA32S-TRAP-NEXT: ret90;91; LA64-TRAP-LABEL: sdiv_i8:92; LA64-TRAP: # %bb.0: # %entry93; LA64-TRAP-NEXT: ext.w.b $a1, $a194; LA64-TRAP-NEXT: ext.w.b $a0, $a095; LA64-TRAP-NEXT: div.d $a0, $a0, $a196; LA64-TRAP-NEXT: bne $a1, $zero, .LBB1_297; LA64-TRAP-NEXT: # %bb.1: # %entry98; LA64-TRAP-NEXT: break 799; LA64-TRAP-NEXT: .LBB1_2: # %entry100; LA64-TRAP-NEXT: ret101entry:102 %r = sdiv i8 %a, %b103 ret i8 %r104}105 106define i16 @sdiv_i16(i16 %a, i16 %b) {107; LA32R-LABEL: sdiv_i16:108; LA32R: # %bb.0: # %entry109; LA32R-NEXT: slli.w $a1, $a1, 16110; LA32R-NEXT: srai.w $a1, $a1, 16111; LA32R-NEXT: slli.w $a0, $a0, 16112; LA32R-NEXT: srai.w $a0, $a0, 16113; LA32R-NEXT: div.w $a0, $a0, $a1114; LA32R-NEXT: ret115;116; LA32S-LABEL: sdiv_i16:117; LA32S: # %bb.0: # %entry118; LA32S-NEXT: ext.w.h $a1, $a1119; LA32S-NEXT: ext.w.h $a0, $a0120; LA32S-NEXT: div.w $a0, $a0, $a1121; LA32S-NEXT: ret122;123; LA64-LABEL: sdiv_i16:124; LA64: # %bb.0: # %entry125; LA64-NEXT: ext.w.h $a1, $a1126; LA64-NEXT: ext.w.h $a0, $a0127; LA64-NEXT: div.d $a0, $a0, $a1128; LA64-NEXT: ret129;130; LA32R-TRAP-LABEL: sdiv_i16:131; LA32R-TRAP: # %bb.0: # %entry132; LA32R-TRAP-NEXT: slli.w $a1, $a1, 16133; LA32R-TRAP-NEXT: srai.w $a1, $a1, 16134; LA32R-TRAP-NEXT: slli.w $a0, $a0, 16135; LA32R-TRAP-NEXT: srai.w $a0, $a0, 16136; LA32R-TRAP-NEXT: div.w $a0, $a0, $a1137; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB2_2138; LA32R-TRAP-NEXT: # %bb.1: # %entry139; LA32R-TRAP-NEXT: break 7140; LA32R-TRAP-NEXT: .LBB2_2: # %entry141; LA32R-TRAP-NEXT: ret142;143; LA32S-TRAP-LABEL: sdiv_i16:144; LA32S-TRAP: # %bb.0: # %entry145; LA32S-TRAP-NEXT: ext.w.h $a1, $a1146; LA32S-TRAP-NEXT: ext.w.h $a0, $a0147; LA32S-TRAP-NEXT: div.w $a0, $a0, $a1148; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB2_2149; LA32S-TRAP-NEXT: # %bb.1: # %entry150; LA32S-TRAP-NEXT: break 7151; LA32S-TRAP-NEXT: .LBB2_2: # %entry152; LA32S-TRAP-NEXT: ret153;154; LA64-TRAP-LABEL: sdiv_i16:155; LA64-TRAP: # %bb.0: # %entry156; LA64-TRAP-NEXT: ext.w.h $a1, $a1157; LA64-TRAP-NEXT: ext.w.h $a0, $a0158; LA64-TRAP-NEXT: div.d $a0, $a0, $a1159; LA64-TRAP-NEXT: bne $a1, $zero, .LBB2_2160; LA64-TRAP-NEXT: # %bb.1: # %entry161; LA64-TRAP-NEXT: break 7162; LA64-TRAP-NEXT: .LBB2_2: # %entry163; LA64-TRAP-NEXT: ret164entry:165 %r = sdiv i16 %a, %b166 ret i16 %r167}168 169define i32 @sdiv_i32(i32 %a, i32 %b) {170; LA32R-LABEL: sdiv_i32:171; LA32R: # %bb.0: # %entry172; LA32R-NEXT: div.w $a0, $a0, $a1173; LA32R-NEXT: ret174;175; LA32S-LABEL: sdiv_i32:176; LA32S: # %bb.0: # %entry177; LA32S-NEXT: div.w $a0, $a0, $a1178; LA32S-NEXT: ret179;180; LA64-LABEL: sdiv_i32:181; LA64: # %bb.0: # %entry182; LA64-NEXT: addi.w $a1, $a1, 0183; LA64-NEXT: addi.w $a0, $a0, 0184; LA64-NEXT: div.w $a0, $a0, $a1185; LA64-NEXT: ret186;187; LA32R-TRAP-LABEL: sdiv_i32:188; LA32R-TRAP: # %bb.0: # %entry189; LA32R-TRAP-NEXT: div.w $a0, $a0, $a1190; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB3_2191; LA32R-TRAP-NEXT: # %bb.1: # %entry192; LA32R-TRAP-NEXT: break 7193; LA32R-TRAP-NEXT: .LBB3_2: # %entry194; LA32R-TRAP-NEXT: ret195;196; LA32S-TRAP-LABEL: sdiv_i32:197; LA32S-TRAP: # %bb.0: # %entry198; LA32S-TRAP-NEXT: div.w $a0, $a0, $a1199; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB3_2200; LA32S-TRAP-NEXT: # %bb.1: # %entry201; LA32S-TRAP-NEXT: break 7202; LA32S-TRAP-NEXT: .LBB3_2: # %entry203; LA32S-TRAP-NEXT: ret204;205; LA64-TRAP-LABEL: sdiv_i32:206; LA64-TRAP: # %bb.0: # %entry207; LA64-TRAP-NEXT: addi.w $a1, $a1, 0208; LA64-TRAP-NEXT: addi.w $a0, $a0, 0209; LA64-TRAP-NEXT: div.w $a0, $a0, $a1210; LA64-TRAP-NEXT: bne $a1, $zero, .LBB3_2211; LA64-TRAP-NEXT: # %bb.1: # %entry212; LA64-TRAP-NEXT: break 7213; LA64-TRAP-NEXT: .LBB3_2: # %entry214; LA64-TRAP-NEXT: ret215entry:216 %r = sdiv i32 %a, %b217 ret i32 %r218}219 220define i32 @sdiv_ui32_si32_si32(i32 signext %a, i32 signext %b) {221; LA32R-LABEL: sdiv_ui32_si32_si32:222; LA32R: # %bb.0: # %entry223; LA32R-NEXT: div.w $a0, $a0, $a1224; LA32R-NEXT: ret225;226; LA32S-LABEL: sdiv_ui32_si32_si32:227; LA32S: # %bb.0: # %entry228; LA32S-NEXT: div.w $a0, $a0, $a1229; LA32S-NEXT: ret230;231; LA64-LABEL: sdiv_ui32_si32_si32:232; LA64: # %bb.0: # %entry233; LA64-NEXT: div.w $a0, $a0, $a1234; LA64-NEXT: ret235;236; LA32R-TRAP-LABEL: sdiv_ui32_si32_si32:237; LA32R-TRAP: # %bb.0: # %entry238; LA32R-TRAP-NEXT: div.w $a0, $a0, $a1239; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB4_2240; LA32R-TRAP-NEXT: # %bb.1: # %entry241; LA32R-TRAP-NEXT: break 7242; LA32R-TRAP-NEXT: .LBB4_2: # %entry243; LA32R-TRAP-NEXT: ret244;245; LA32S-TRAP-LABEL: sdiv_ui32_si32_si32:246; LA32S-TRAP: # %bb.0: # %entry247; LA32S-TRAP-NEXT: div.w $a0, $a0, $a1248; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB4_2249; LA32S-TRAP-NEXT: # %bb.1: # %entry250; LA32S-TRAP-NEXT: break 7251; LA32S-TRAP-NEXT: .LBB4_2: # %entry252; LA32S-TRAP-NEXT: ret253;254; LA64-TRAP-LABEL: sdiv_ui32_si32_si32:255; LA64-TRAP: # %bb.0: # %entry256; LA64-TRAP-NEXT: div.w $a0, $a0, $a1257; LA64-TRAP-NEXT: bne $a1, $zero, .LBB4_2258; LA64-TRAP-NEXT: # %bb.1: # %entry259; LA64-TRAP-NEXT: break 7260; LA64-TRAP-NEXT: .LBB4_2: # %entry261; LA64-TRAP-NEXT: ret262entry:263 %r = sdiv i32 %a, %b264 ret i32 %r265}266 267define signext i32 @sdiv_si32_ui32_ui32(i32 %a, i32 %b) {268; LA32R-LABEL: sdiv_si32_ui32_ui32:269; LA32R: # %bb.0: # %entry270; LA32R-NEXT: div.w $a0, $a0, $a1271; LA32R-NEXT: ret272;273; LA32S-LABEL: sdiv_si32_ui32_ui32:274; LA32S: # %bb.0: # %entry275; LA32S-NEXT: div.w $a0, $a0, $a1276; LA32S-NEXT: ret277;278; LA64-LABEL: sdiv_si32_ui32_ui32:279; LA64: # %bb.0: # %entry280; LA64-NEXT: addi.w $a1, $a1, 0281; LA64-NEXT: addi.w $a0, $a0, 0282; LA64-NEXT: div.w $a0, $a0, $a1283; LA64-NEXT: ret284;285; LA32R-TRAP-LABEL: sdiv_si32_ui32_ui32:286; LA32R-TRAP: # %bb.0: # %entry287; LA32R-TRAP-NEXT: div.w $a0, $a0, $a1288; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB5_2289; LA32R-TRAP-NEXT: # %bb.1: # %entry290; LA32R-TRAP-NEXT: break 7291; LA32R-TRAP-NEXT: .LBB5_2: # %entry292; LA32R-TRAP-NEXT: ret293;294; LA32S-TRAP-LABEL: sdiv_si32_ui32_ui32:295; LA32S-TRAP: # %bb.0: # %entry296; LA32S-TRAP-NEXT: div.w $a0, $a0, $a1297; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB5_2298; LA32S-TRAP-NEXT: # %bb.1: # %entry299; LA32S-TRAP-NEXT: break 7300; LA32S-TRAP-NEXT: .LBB5_2: # %entry301; LA32S-TRAP-NEXT: ret302;303; LA64-TRAP-LABEL: sdiv_si32_ui32_ui32:304; LA64-TRAP: # %bb.0: # %entry305; LA64-TRAP-NEXT: addi.w $a1, $a1, 0306; LA64-TRAP-NEXT: addi.w $a0, $a0, 0307; LA64-TRAP-NEXT: div.w $a0, $a0, $a1308; LA64-TRAP-NEXT: bne $a1, $zero, .LBB5_2309; LA64-TRAP-NEXT: # %bb.1: # %entry310; LA64-TRAP-NEXT: break 7311; LA64-TRAP-NEXT: .LBB5_2: # %entry312; LA64-TRAP-NEXT: ret313entry:314 %r = sdiv i32 %a, %b315 ret i32 %r316}317 318define signext i32 @sdiv_si32_si32_si32(i32 signext %a, i32 signext %b) {319; LA32R-LABEL: sdiv_si32_si32_si32:320; LA32R: # %bb.0: # %entry321; LA32R-NEXT: div.w $a0, $a0, $a1322; LA32R-NEXT: ret323;324; LA32S-LABEL: sdiv_si32_si32_si32:325; LA32S: # %bb.0: # %entry326; LA32S-NEXT: div.w $a0, $a0, $a1327; LA32S-NEXT: ret328;329; LA64-LABEL: sdiv_si32_si32_si32:330; LA64: # %bb.0: # %entry331; LA64-NEXT: div.w $a0, $a0, $a1332; LA64-NEXT: ret333;334; LA32R-TRAP-LABEL: sdiv_si32_si32_si32:335; LA32R-TRAP: # %bb.0: # %entry336; LA32R-TRAP-NEXT: div.w $a0, $a0, $a1337; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB6_2338; LA32R-TRAP-NEXT: # %bb.1: # %entry339; LA32R-TRAP-NEXT: break 7340; LA32R-TRAP-NEXT: .LBB6_2: # %entry341; LA32R-TRAP-NEXT: ret342;343; LA32S-TRAP-LABEL: sdiv_si32_si32_si32:344; LA32S-TRAP: # %bb.0: # %entry345; LA32S-TRAP-NEXT: div.w $a0, $a0, $a1346; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB6_2347; LA32S-TRAP-NEXT: # %bb.1: # %entry348; LA32S-TRAP-NEXT: break 7349; LA32S-TRAP-NEXT: .LBB6_2: # %entry350; LA32S-TRAP-NEXT: ret351;352; LA64-TRAP-LABEL: sdiv_si32_si32_si32:353; LA64-TRAP: # %bb.0: # %entry354; LA64-TRAP-NEXT: div.w $a0, $a0, $a1355; LA64-TRAP-NEXT: bne $a1, $zero, .LBB6_2356; LA64-TRAP-NEXT: # %bb.1: # %entry357; LA64-TRAP-NEXT: break 7358; LA64-TRAP-NEXT: .LBB6_2: # %entry359; LA64-TRAP-NEXT: ret360entry:361 %r = sdiv i32 %a, %b362 ret i32 %r363}364 365define i64 @sdiv_i64(i64 %a, i64 %b) {366; LA32R-LABEL: sdiv_i64:367; LA32R: # %bb.0: # %entry368; LA32R-NEXT: addi.w $sp, $sp, -16369; LA32R-NEXT: .cfi_def_cfa_offset 16370; LA32R-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill371; LA32R-NEXT: .cfi_offset 1, -4372; LA32R-NEXT: bl __divdi3373; LA32R-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload374; LA32R-NEXT: addi.w $sp, $sp, 16375; LA32R-NEXT: ret376;377; LA32S-LABEL: sdiv_i64:378; LA32S: # %bb.0: # %entry379; LA32S-NEXT: addi.w $sp, $sp, -16380; LA32S-NEXT: .cfi_def_cfa_offset 16381; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill382; LA32S-NEXT: .cfi_offset 1, -4383; LA32S-NEXT: bl __divdi3384; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload385; LA32S-NEXT: addi.w $sp, $sp, 16386; LA32S-NEXT: ret387;388; LA64-LABEL: sdiv_i64:389; LA64: # %bb.0: # %entry390; LA64-NEXT: div.d $a0, $a0, $a1391; LA64-NEXT: ret392;393; LA32R-TRAP-LABEL: sdiv_i64:394; LA32R-TRAP: # %bb.0: # %entry395; LA32R-TRAP-NEXT: addi.w $sp, $sp, -16396; LA32R-TRAP-NEXT: .cfi_def_cfa_offset 16397; LA32R-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill398; LA32R-TRAP-NEXT: .cfi_offset 1, -4399; LA32R-TRAP-NEXT: bl __divdi3400; LA32R-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload401; LA32R-TRAP-NEXT: addi.w $sp, $sp, 16402; LA32R-TRAP-NEXT: ret403;404; LA32S-TRAP-LABEL: sdiv_i64:405; LA32S-TRAP: # %bb.0: # %entry406; LA32S-TRAP-NEXT: addi.w $sp, $sp, -16407; LA32S-TRAP-NEXT: .cfi_def_cfa_offset 16408; LA32S-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill409; LA32S-TRAP-NEXT: .cfi_offset 1, -4410; LA32S-TRAP-NEXT: bl __divdi3411; LA32S-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload412; LA32S-TRAP-NEXT: addi.w $sp, $sp, 16413; LA32S-TRAP-NEXT: ret414;415; LA64-TRAP-LABEL: sdiv_i64:416; LA64-TRAP: # %bb.0: # %entry417; LA64-TRAP-NEXT: div.d $a0, $a0, $a1418; LA64-TRAP-NEXT: bne $a1, $zero, .LBB7_2419; LA64-TRAP-NEXT: # %bb.1: # %entry420; LA64-TRAP-NEXT: break 7421; LA64-TRAP-NEXT: .LBB7_2: # %entry422; LA64-TRAP-NEXT: ret423entry:424 %r = sdiv i64 %a, %b425 ret i64 %r426}427 428define i1 @udiv_i1(i1 %a, i1 %b) {429; LA32R-LABEL: udiv_i1:430; LA32R: # %bb.0: # %entry431; LA32R-NEXT: ret432;433; LA32S-LABEL: udiv_i1:434; LA32S: # %bb.0: # %entry435; LA32S-NEXT: ret436;437; LA64-LABEL: udiv_i1:438; LA64: # %bb.0: # %entry439; LA64-NEXT: ret440;441; LA32R-TRAP-LABEL: udiv_i1:442; LA32R-TRAP: # %bb.0: # %entry443; LA32R-TRAP-NEXT: ret444;445; LA32S-TRAP-LABEL: udiv_i1:446; LA32S-TRAP: # %bb.0: # %entry447; LA32S-TRAP-NEXT: ret448;449; LA64-TRAP-LABEL: udiv_i1:450; LA64-TRAP: # %bb.0: # %entry451; LA64-TRAP-NEXT: ret452entry:453 %r = udiv i1 %a, %b454 ret i1 %r455}456 457define i8 @udiv_i8(i8 %a, i8 %b) {458; LA32R-LABEL: udiv_i8:459; LA32R: # %bb.0: # %entry460; LA32R-NEXT: andi $a1, $a1, 255461; LA32R-NEXT: andi $a0, $a0, 255462; LA32R-NEXT: div.wu $a0, $a0, $a1463; LA32R-NEXT: ret464;465; LA32S-LABEL: udiv_i8:466; LA32S: # %bb.0: # %entry467; LA32S-NEXT: andi $a1, $a1, 255468; LA32S-NEXT: andi $a0, $a0, 255469; LA32S-NEXT: div.wu $a0, $a0, $a1470; LA32S-NEXT: ret471;472; LA64-LABEL: udiv_i8:473; LA64: # %bb.0: # %entry474; LA64-NEXT: andi $a1, $a1, 255475; LA64-NEXT: andi $a0, $a0, 255476; LA64-NEXT: div.du $a0, $a0, $a1477; LA64-NEXT: ret478;479; LA32R-TRAP-LABEL: udiv_i8:480; LA32R-TRAP: # %bb.0: # %entry481; LA32R-TRAP-NEXT: andi $a1, $a1, 255482; LA32R-TRAP-NEXT: andi $a0, $a0, 255483; LA32R-TRAP-NEXT: div.wu $a0, $a0, $a1484; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB9_2485; LA32R-TRAP-NEXT: # %bb.1: # %entry486; LA32R-TRAP-NEXT: break 7487; LA32R-TRAP-NEXT: .LBB9_2: # %entry488; LA32R-TRAP-NEXT: ret489;490; LA32S-TRAP-LABEL: udiv_i8:491; LA32S-TRAP: # %bb.0: # %entry492; LA32S-TRAP-NEXT: andi $a1, $a1, 255493; LA32S-TRAP-NEXT: andi $a0, $a0, 255494; LA32S-TRAP-NEXT: div.wu $a0, $a0, $a1495; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB9_2496; LA32S-TRAP-NEXT: # %bb.1: # %entry497; LA32S-TRAP-NEXT: break 7498; LA32S-TRAP-NEXT: .LBB9_2: # %entry499; LA32S-TRAP-NEXT: ret500;501; LA64-TRAP-LABEL: udiv_i8:502; LA64-TRAP: # %bb.0: # %entry503; LA64-TRAP-NEXT: andi $a1, $a1, 255504; LA64-TRAP-NEXT: andi $a0, $a0, 255505; LA64-TRAP-NEXT: div.du $a0, $a0, $a1506; LA64-TRAP-NEXT: bne $a1, $zero, .LBB9_2507; LA64-TRAP-NEXT: # %bb.1: # %entry508; LA64-TRAP-NEXT: break 7509; LA64-TRAP-NEXT: .LBB9_2: # %entry510; LA64-TRAP-NEXT: ret511entry:512 %r = udiv i8 %a, %b513 ret i8 %r514}515 516define i16 @udiv_i16(i16 %a, i16 %b) {517; LA32R-LABEL: udiv_i16:518; LA32R: # %bb.0: # %entry519; LA32R-NEXT: lu12i.w $a2, 15520; LA32R-NEXT: ori $a2, $a2, 4095521; LA32R-NEXT: and $a1, $a1, $a2522; LA32R-NEXT: and $a0, $a0, $a2523; LA32R-NEXT: div.wu $a0, $a0, $a1524; LA32R-NEXT: ret525;526; LA32S-LABEL: udiv_i16:527; LA32S: # %bb.0: # %entry528; LA32S-NEXT: bstrpick.w $a1, $a1, 15, 0529; LA32S-NEXT: bstrpick.w $a0, $a0, 15, 0530; LA32S-NEXT: div.wu $a0, $a0, $a1531; LA32S-NEXT: ret532;533; LA64-LABEL: udiv_i16:534; LA64: # %bb.0: # %entry535; LA64-NEXT: bstrpick.d $a1, $a1, 15, 0536; LA64-NEXT: bstrpick.d $a0, $a0, 15, 0537; LA64-NEXT: div.du $a0, $a0, $a1538; LA64-NEXT: ret539;540; LA32R-TRAP-LABEL: udiv_i16:541; LA32R-TRAP: # %bb.0: # %entry542; LA32R-TRAP-NEXT: lu12i.w $a2, 15543; LA32R-TRAP-NEXT: ori $a2, $a2, 4095544; LA32R-TRAP-NEXT: and $a1, $a1, $a2545; LA32R-TRAP-NEXT: and $a0, $a0, $a2546; LA32R-TRAP-NEXT: div.wu $a0, $a0, $a1547; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB10_2548; LA32R-TRAP-NEXT: # %bb.1: # %entry549; LA32R-TRAP-NEXT: break 7550; LA32R-TRAP-NEXT: .LBB10_2: # %entry551; LA32R-TRAP-NEXT: ret552;553; LA32S-TRAP-LABEL: udiv_i16:554; LA32S-TRAP: # %bb.0: # %entry555; LA32S-TRAP-NEXT: bstrpick.w $a1, $a1, 15, 0556; LA32S-TRAP-NEXT: bstrpick.w $a0, $a0, 15, 0557; LA32S-TRAP-NEXT: div.wu $a0, $a0, $a1558; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB10_2559; LA32S-TRAP-NEXT: # %bb.1: # %entry560; LA32S-TRAP-NEXT: break 7561; LA32S-TRAP-NEXT: .LBB10_2: # %entry562; LA32S-TRAP-NEXT: ret563;564; LA64-TRAP-LABEL: udiv_i16:565; LA64-TRAP: # %bb.0: # %entry566; LA64-TRAP-NEXT: bstrpick.d $a1, $a1, 15, 0567; LA64-TRAP-NEXT: bstrpick.d $a0, $a0, 15, 0568; LA64-TRAP-NEXT: div.du $a0, $a0, $a1569; LA64-TRAP-NEXT: bne $a1, $zero, .LBB10_2570; LA64-TRAP-NEXT: # %bb.1: # %entry571; LA64-TRAP-NEXT: break 7572; LA64-TRAP-NEXT: .LBB10_2: # %entry573; LA64-TRAP-NEXT: ret574entry:575 %r = udiv i16 %a, %b576 ret i16 %r577}578 579define i32 @udiv_i32(i32 %a, i32 %b) {580; LA32R-LABEL: udiv_i32:581; LA32R: # %bb.0: # %entry582; LA32R-NEXT: div.wu $a0, $a0, $a1583; LA32R-NEXT: ret584;585; LA32S-LABEL: udiv_i32:586; LA32S: # %bb.0: # %entry587; LA32S-NEXT: div.wu $a0, $a0, $a1588; LA32S-NEXT: ret589;590; LA64-LABEL: udiv_i32:591; LA64: # %bb.0: # %entry592; LA64-NEXT: addi.w $a1, $a1, 0593; LA64-NEXT: addi.w $a0, $a0, 0594; LA64-NEXT: div.wu $a0, $a0, $a1595; LA64-NEXT: ret596;597; LA32R-TRAP-LABEL: udiv_i32:598; LA32R-TRAP: # %bb.0: # %entry599; LA32R-TRAP-NEXT: div.wu $a0, $a0, $a1600; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB11_2601; LA32R-TRAP-NEXT: # %bb.1: # %entry602; LA32R-TRAP-NEXT: break 7603; LA32R-TRAP-NEXT: .LBB11_2: # %entry604; LA32R-TRAP-NEXT: ret605;606; LA32S-TRAP-LABEL: udiv_i32:607; LA32S-TRAP: # %bb.0: # %entry608; LA32S-TRAP-NEXT: div.wu $a0, $a0, $a1609; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB11_2610; LA32S-TRAP-NEXT: # %bb.1: # %entry611; LA32S-TRAP-NEXT: break 7612; LA32S-TRAP-NEXT: .LBB11_2: # %entry613; LA32S-TRAP-NEXT: ret614;615; LA64-TRAP-LABEL: udiv_i32:616; LA64-TRAP: # %bb.0: # %entry617; LA64-TRAP-NEXT: addi.w $a1, $a1, 0618; LA64-TRAP-NEXT: addi.w $a0, $a0, 0619; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1620; LA64-TRAP-NEXT: bne $a1, $zero, .LBB11_2621; LA64-TRAP-NEXT: # %bb.1: # %entry622; LA64-TRAP-NEXT: break 7623; LA64-TRAP-NEXT: .LBB11_2: # %entry624; LA64-TRAP-NEXT: ret625entry:626 %r = udiv i32 %a, %b627 ret i32 %r628}629 630define i32 @udiv_ui32_si32_si32(i32 signext %a, i32 signext %b) {631; LA32R-LABEL: udiv_ui32_si32_si32:632; LA32R: # %bb.0: # %entry633; LA32R-NEXT: div.wu $a0, $a0, $a1634; LA32R-NEXT: ret635;636; LA32S-LABEL: udiv_ui32_si32_si32:637; LA32S: # %bb.0: # %entry638; LA32S-NEXT: div.wu $a0, $a0, $a1639; LA32S-NEXT: ret640;641; LA64-LABEL: udiv_ui32_si32_si32:642; LA64: # %bb.0: # %entry643; LA64-NEXT: div.wu $a0, $a0, $a1644; LA64-NEXT: ret645;646; LA32R-TRAP-LABEL: udiv_ui32_si32_si32:647; LA32R-TRAP: # %bb.0: # %entry648; LA32R-TRAP-NEXT: div.wu $a0, $a0, $a1649; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB12_2650; LA32R-TRAP-NEXT: # %bb.1: # %entry651; LA32R-TRAP-NEXT: break 7652; LA32R-TRAP-NEXT: .LBB12_2: # %entry653; LA32R-TRAP-NEXT: ret654;655; LA32S-TRAP-LABEL: udiv_ui32_si32_si32:656; LA32S-TRAP: # %bb.0: # %entry657; LA32S-TRAP-NEXT: div.wu $a0, $a0, $a1658; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB12_2659; LA32S-TRAP-NEXT: # %bb.1: # %entry660; LA32S-TRAP-NEXT: break 7661; LA32S-TRAP-NEXT: .LBB12_2: # %entry662; LA32S-TRAP-NEXT: ret663;664; LA64-TRAP-LABEL: udiv_ui32_si32_si32:665; LA64-TRAP: # %bb.0: # %entry666; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1667; LA64-TRAP-NEXT: bne $a1, $zero, .LBB12_2668; LA64-TRAP-NEXT: # %bb.1: # %entry669; LA64-TRAP-NEXT: break 7670; LA64-TRAP-NEXT: .LBB12_2: # %entry671; LA64-TRAP-NEXT: ret672entry:673 %r = udiv i32 %a, %b674 ret i32 %r675}676 677define signext i32 @udiv_si32_ui32_ui32(i32 %a, i32 %b) {678; LA32R-LABEL: udiv_si32_ui32_ui32:679; LA32R: # %bb.0: # %entry680; LA32R-NEXT: div.wu $a0, $a0, $a1681; LA32R-NEXT: ret682;683; LA32S-LABEL: udiv_si32_ui32_ui32:684; LA32S: # %bb.0: # %entry685; LA32S-NEXT: div.wu $a0, $a0, $a1686; LA32S-NEXT: ret687;688; LA64-LABEL: udiv_si32_ui32_ui32:689; LA64: # %bb.0: # %entry690; LA64-NEXT: addi.w $a1, $a1, 0691; LA64-NEXT: addi.w $a0, $a0, 0692; LA64-NEXT: div.wu $a0, $a0, $a1693; LA64-NEXT: ret694;695; LA32R-TRAP-LABEL: udiv_si32_ui32_ui32:696; LA32R-TRAP: # %bb.0: # %entry697; LA32R-TRAP-NEXT: div.wu $a0, $a0, $a1698; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB13_2699; LA32R-TRAP-NEXT: # %bb.1: # %entry700; LA32R-TRAP-NEXT: break 7701; LA32R-TRAP-NEXT: .LBB13_2: # %entry702; LA32R-TRAP-NEXT: ret703;704; LA32S-TRAP-LABEL: udiv_si32_ui32_ui32:705; LA32S-TRAP: # %bb.0: # %entry706; LA32S-TRAP-NEXT: div.wu $a0, $a0, $a1707; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB13_2708; LA32S-TRAP-NEXT: # %bb.1: # %entry709; LA32S-TRAP-NEXT: break 7710; LA32S-TRAP-NEXT: .LBB13_2: # %entry711; LA32S-TRAP-NEXT: ret712;713; LA64-TRAP-LABEL: udiv_si32_ui32_ui32:714; LA64-TRAP: # %bb.0: # %entry715; LA64-TRAP-NEXT: addi.w $a1, $a1, 0716; LA64-TRAP-NEXT: addi.w $a0, $a0, 0717; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1718; LA64-TRAP-NEXT: bne $a1, $zero, .LBB13_2719; LA64-TRAP-NEXT: # %bb.1: # %entry720; LA64-TRAP-NEXT: break 7721; LA64-TRAP-NEXT: .LBB13_2: # %entry722; LA64-TRAP-NEXT: ret723entry:724 %r = udiv i32 %a, %b725 ret i32 %r726}727 728define signext i32 @udiv_si32_si32_si32(i32 signext %a, i32 signext %b) {729; LA32R-LABEL: udiv_si32_si32_si32:730; LA32R: # %bb.0: # %entry731; LA32R-NEXT: div.wu $a0, $a0, $a1732; LA32R-NEXT: ret733;734; LA32S-LABEL: udiv_si32_si32_si32:735; LA32S: # %bb.0: # %entry736; LA32S-NEXT: div.wu $a0, $a0, $a1737; LA32S-NEXT: ret738;739; LA64-LABEL: udiv_si32_si32_si32:740; LA64: # %bb.0: # %entry741; LA64-NEXT: div.wu $a0, $a0, $a1742; LA64-NEXT: ret743;744; LA32R-TRAP-LABEL: udiv_si32_si32_si32:745; LA32R-TRAP: # %bb.0: # %entry746; LA32R-TRAP-NEXT: div.wu $a0, $a0, $a1747; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB14_2748; LA32R-TRAP-NEXT: # %bb.1: # %entry749; LA32R-TRAP-NEXT: break 7750; LA32R-TRAP-NEXT: .LBB14_2: # %entry751; LA32R-TRAP-NEXT: ret752;753; LA32S-TRAP-LABEL: udiv_si32_si32_si32:754; LA32S-TRAP: # %bb.0: # %entry755; LA32S-TRAP-NEXT: div.wu $a0, $a0, $a1756; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB14_2757; LA32S-TRAP-NEXT: # %bb.1: # %entry758; LA32S-TRAP-NEXT: break 7759; LA32S-TRAP-NEXT: .LBB14_2: # %entry760; LA32S-TRAP-NEXT: ret761;762; LA64-TRAP-LABEL: udiv_si32_si32_si32:763; LA64-TRAP: # %bb.0: # %entry764; LA64-TRAP-NEXT: div.wu $a0, $a0, $a1765; LA64-TRAP-NEXT: bne $a1, $zero, .LBB14_2766; LA64-TRAP-NEXT: # %bb.1: # %entry767; LA64-TRAP-NEXT: break 7768; LA64-TRAP-NEXT: .LBB14_2: # %entry769; LA64-TRAP-NEXT: ret770entry:771 %r = udiv i32 %a, %b772 ret i32 %r773}774 775define i64 @udiv_i64(i64 %a, i64 %b) {776; LA32R-LABEL: udiv_i64:777; LA32R: # %bb.0: # %entry778; LA32R-NEXT: addi.w $sp, $sp, -16779; LA32R-NEXT: .cfi_def_cfa_offset 16780; LA32R-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill781; LA32R-NEXT: .cfi_offset 1, -4782; LA32R-NEXT: bl __udivdi3783; LA32R-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload784; LA32R-NEXT: addi.w $sp, $sp, 16785; LA32R-NEXT: ret786;787; LA32S-LABEL: udiv_i64:788; LA32S: # %bb.0: # %entry789; LA32S-NEXT: addi.w $sp, $sp, -16790; LA32S-NEXT: .cfi_def_cfa_offset 16791; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill792; LA32S-NEXT: .cfi_offset 1, -4793; LA32S-NEXT: bl __udivdi3794; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload795; LA32S-NEXT: addi.w $sp, $sp, 16796; LA32S-NEXT: ret797;798; LA64-LABEL: udiv_i64:799; LA64: # %bb.0: # %entry800; LA64-NEXT: div.du $a0, $a0, $a1801; LA64-NEXT: ret802;803; LA32R-TRAP-LABEL: udiv_i64:804; LA32R-TRAP: # %bb.0: # %entry805; LA32R-TRAP-NEXT: addi.w $sp, $sp, -16806; LA32R-TRAP-NEXT: .cfi_def_cfa_offset 16807; LA32R-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill808; LA32R-TRAP-NEXT: .cfi_offset 1, -4809; LA32R-TRAP-NEXT: bl __udivdi3810; LA32R-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload811; LA32R-TRAP-NEXT: addi.w $sp, $sp, 16812; LA32R-TRAP-NEXT: ret813;814; LA32S-TRAP-LABEL: udiv_i64:815; LA32S-TRAP: # %bb.0: # %entry816; LA32S-TRAP-NEXT: addi.w $sp, $sp, -16817; LA32S-TRAP-NEXT: .cfi_def_cfa_offset 16818; LA32S-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill819; LA32S-TRAP-NEXT: .cfi_offset 1, -4820; LA32S-TRAP-NEXT: bl __udivdi3821; LA32S-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload822; LA32S-TRAP-NEXT: addi.w $sp, $sp, 16823; LA32S-TRAP-NEXT: ret824;825; LA64-TRAP-LABEL: udiv_i64:826; LA64-TRAP: # %bb.0: # %entry827; LA64-TRAP-NEXT: div.du $a0, $a0, $a1828; LA64-TRAP-NEXT: bne $a1, $zero, .LBB15_2829; LA64-TRAP-NEXT: # %bb.1: # %entry830; LA64-TRAP-NEXT: break 7831; LA64-TRAP-NEXT: .LBB15_2: # %entry832; LA64-TRAP-NEXT: ret833entry:834 %r = udiv i64 %a, %b835 ret i64 %r836}837 838define i1 @srem_i1(i1 %a, i1 %b) {839; LA32R-LABEL: srem_i1:840; LA32R: # %bb.0: # %entry841; LA32R-NEXT: move $a0, $zero842; LA32R-NEXT: ret843;844; LA32S-LABEL: srem_i1:845; LA32S: # %bb.0: # %entry846; LA32S-NEXT: move $a0, $zero847; LA32S-NEXT: ret848;849; LA64-LABEL: srem_i1:850; LA64: # %bb.0: # %entry851; LA64-NEXT: move $a0, $zero852; LA64-NEXT: ret853;854; LA32R-TRAP-LABEL: srem_i1:855; LA32R-TRAP: # %bb.0: # %entry856; LA32R-TRAP-NEXT: move $a0, $zero857; LA32R-TRAP-NEXT: ret858;859; LA32S-TRAP-LABEL: srem_i1:860; LA32S-TRAP: # %bb.0: # %entry861; LA32S-TRAP-NEXT: move $a0, $zero862; LA32S-TRAP-NEXT: ret863;864; LA64-TRAP-LABEL: srem_i1:865; LA64-TRAP: # %bb.0: # %entry866; LA64-TRAP-NEXT: move $a0, $zero867; LA64-TRAP-NEXT: ret868entry:869 %r = srem i1 %a, %b870 ret i1 %r871}872 873define i8 @srem_i8(i8 %a, i8 %b) {874; LA32R-LABEL: srem_i8:875; LA32R: # %bb.0: # %entry876; LA32R-NEXT: slli.w $a1, $a1, 24877; LA32R-NEXT: srai.w $a1, $a1, 24878; LA32R-NEXT: slli.w $a0, $a0, 24879; LA32R-NEXT: srai.w $a0, $a0, 24880; LA32R-NEXT: mod.w $a0, $a0, $a1881; LA32R-NEXT: ret882;883; LA32S-LABEL: srem_i8:884; LA32S: # %bb.0: # %entry885; LA32S-NEXT: ext.w.b $a1, $a1886; LA32S-NEXT: ext.w.b $a0, $a0887; LA32S-NEXT: mod.w $a0, $a0, $a1888; LA32S-NEXT: ret889;890; LA64-LABEL: srem_i8:891; LA64: # %bb.0: # %entry892; LA64-NEXT: ext.w.b $a1, $a1893; LA64-NEXT: ext.w.b $a0, $a0894; LA64-NEXT: mod.d $a0, $a0, $a1895; LA64-NEXT: ret896;897; LA32R-TRAP-LABEL: srem_i8:898; LA32R-TRAP: # %bb.0: # %entry899; LA32R-TRAP-NEXT: slli.w $a1, $a1, 24900; LA32R-TRAP-NEXT: srai.w $a1, $a1, 24901; LA32R-TRAP-NEXT: slli.w $a0, $a0, 24902; LA32R-TRAP-NEXT: srai.w $a0, $a0, 24903; LA32R-TRAP-NEXT: mod.w $a0, $a0, $a1904; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB17_2905; LA32R-TRAP-NEXT: # %bb.1: # %entry906; LA32R-TRAP-NEXT: break 7907; LA32R-TRAP-NEXT: .LBB17_2: # %entry908; LA32R-TRAP-NEXT: ret909;910; LA32S-TRAP-LABEL: srem_i8:911; LA32S-TRAP: # %bb.0: # %entry912; LA32S-TRAP-NEXT: ext.w.b $a1, $a1913; LA32S-TRAP-NEXT: ext.w.b $a0, $a0914; LA32S-TRAP-NEXT: mod.w $a0, $a0, $a1915; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB17_2916; LA32S-TRAP-NEXT: # %bb.1: # %entry917; LA32S-TRAP-NEXT: break 7918; LA32S-TRAP-NEXT: .LBB17_2: # %entry919; LA32S-TRAP-NEXT: ret920;921; LA64-TRAP-LABEL: srem_i8:922; LA64-TRAP: # %bb.0: # %entry923; LA64-TRAP-NEXT: ext.w.b $a1, $a1924; LA64-TRAP-NEXT: ext.w.b $a0, $a0925; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1926; LA64-TRAP-NEXT: bne $a1, $zero, .LBB17_2927; LA64-TRAP-NEXT: # %bb.1: # %entry928; LA64-TRAP-NEXT: break 7929; LA64-TRAP-NEXT: .LBB17_2: # %entry930; LA64-TRAP-NEXT: ret931entry:932 %r = srem i8 %a, %b933 ret i8 %r934}935 936define i16 @srem_i16(i16 %a, i16 %b) {937; LA32R-LABEL: srem_i16:938; LA32R: # %bb.0: # %entry939; LA32R-NEXT: slli.w $a1, $a1, 16940; LA32R-NEXT: srai.w $a1, $a1, 16941; LA32R-NEXT: slli.w $a0, $a0, 16942; LA32R-NEXT: srai.w $a0, $a0, 16943; LA32R-NEXT: mod.w $a0, $a0, $a1944; LA32R-NEXT: ret945;946; LA32S-LABEL: srem_i16:947; LA32S: # %bb.0: # %entry948; LA32S-NEXT: ext.w.h $a1, $a1949; LA32S-NEXT: ext.w.h $a0, $a0950; LA32S-NEXT: mod.w $a0, $a0, $a1951; LA32S-NEXT: ret952;953; LA64-LABEL: srem_i16:954; LA64: # %bb.0: # %entry955; LA64-NEXT: ext.w.h $a1, $a1956; LA64-NEXT: ext.w.h $a0, $a0957; LA64-NEXT: mod.d $a0, $a0, $a1958; LA64-NEXT: ret959;960; LA32R-TRAP-LABEL: srem_i16:961; LA32R-TRAP: # %bb.0: # %entry962; LA32R-TRAP-NEXT: slli.w $a1, $a1, 16963; LA32R-TRAP-NEXT: srai.w $a1, $a1, 16964; LA32R-TRAP-NEXT: slli.w $a0, $a0, 16965; LA32R-TRAP-NEXT: srai.w $a0, $a0, 16966; LA32R-TRAP-NEXT: mod.w $a0, $a0, $a1967; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB18_2968; LA32R-TRAP-NEXT: # %bb.1: # %entry969; LA32R-TRAP-NEXT: break 7970; LA32R-TRAP-NEXT: .LBB18_2: # %entry971; LA32R-TRAP-NEXT: ret972;973; LA32S-TRAP-LABEL: srem_i16:974; LA32S-TRAP: # %bb.0: # %entry975; LA32S-TRAP-NEXT: ext.w.h $a1, $a1976; LA32S-TRAP-NEXT: ext.w.h $a0, $a0977; LA32S-TRAP-NEXT: mod.w $a0, $a0, $a1978; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB18_2979; LA32S-TRAP-NEXT: # %bb.1: # %entry980; LA32S-TRAP-NEXT: break 7981; LA32S-TRAP-NEXT: .LBB18_2: # %entry982; LA32S-TRAP-NEXT: ret983;984; LA64-TRAP-LABEL: srem_i16:985; LA64-TRAP: # %bb.0: # %entry986; LA64-TRAP-NEXT: ext.w.h $a1, $a1987; LA64-TRAP-NEXT: ext.w.h $a0, $a0988; LA64-TRAP-NEXT: mod.d $a0, $a0, $a1989; LA64-TRAP-NEXT: bne $a1, $zero, .LBB18_2990; LA64-TRAP-NEXT: # %bb.1: # %entry991; LA64-TRAP-NEXT: break 7992; LA64-TRAP-NEXT: .LBB18_2: # %entry993; LA64-TRAP-NEXT: ret994entry:995 %r = srem i16 %a, %b996 ret i16 %r997}998 999define i32 @srem_i32(i32 %a, i32 %b) {1000; LA32R-LABEL: srem_i32:1001; LA32R: # %bb.0: # %entry1002; LA32R-NEXT: mod.w $a0, $a0, $a11003; LA32R-NEXT: ret1004;1005; LA32S-LABEL: srem_i32:1006; LA32S: # %bb.0: # %entry1007; LA32S-NEXT: mod.w $a0, $a0, $a11008; LA32S-NEXT: ret1009;1010; LA64-LABEL: srem_i32:1011; LA64: # %bb.0: # %entry1012; LA64-NEXT: addi.w $a1, $a1, 01013; LA64-NEXT: addi.w $a0, $a0, 01014; LA64-NEXT: mod.w $a0, $a0, $a11015; LA64-NEXT: ret1016;1017; LA32R-TRAP-LABEL: srem_i32:1018; LA32R-TRAP: # %bb.0: # %entry1019; LA32R-TRAP-NEXT: mod.w $a0, $a0, $a11020; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB19_21021; LA32R-TRAP-NEXT: # %bb.1: # %entry1022; LA32R-TRAP-NEXT: break 71023; LA32R-TRAP-NEXT: .LBB19_2: # %entry1024; LA32R-TRAP-NEXT: ret1025;1026; LA32S-TRAP-LABEL: srem_i32:1027; LA32S-TRAP: # %bb.0: # %entry1028; LA32S-TRAP-NEXT: mod.w $a0, $a0, $a11029; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB19_21030; LA32S-TRAP-NEXT: # %bb.1: # %entry1031; LA32S-TRAP-NEXT: break 71032; LA32S-TRAP-NEXT: .LBB19_2: # %entry1033; LA32S-TRAP-NEXT: ret1034;1035; LA64-TRAP-LABEL: srem_i32:1036; LA64-TRAP: # %bb.0: # %entry1037; LA64-TRAP-NEXT: addi.w $a1, $a1, 01038; LA64-TRAP-NEXT: addi.w $a0, $a0, 01039; LA64-TRAP-NEXT: mod.w $a0, $a0, $a11040; LA64-TRAP-NEXT: bne $a1, $zero, .LBB19_21041; LA64-TRAP-NEXT: # %bb.1: # %entry1042; LA64-TRAP-NEXT: break 71043; LA64-TRAP-NEXT: .LBB19_2: # %entry1044; LA64-TRAP-NEXT: ret1045entry:1046 %r = srem i32 %a, %b1047 ret i32 %r1048}1049 1050define i32 @srem_ui32_si32_si32(i32 signext %a, i32 signext %b) {1051; LA32R-LABEL: srem_ui32_si32_si32:1052; LA32R: # %bb.0: # %entry1053; LA32R-NEXT: mod.w $a0, $a0, $a11054; LA32R-NEXT: ret1055;1056; LA32S-LABEL: srem_ui32_si32_si32:1057; LA32S: # %bb.0: # %entry1058; LA32S-NEXT: mod.w $a0, $a0, $a11059; LA32S-NEXT: ret1060;1061; LA64-LABEL: srem_ui32_si32_si32:1062; LA64: # %bb.0: # %entry1063; LA64-NEXT: mod.w $a0, $a0, $a11064; LA64-NEXT: ret1065;1066; LA32R-TRAP-LABEL: srem_ui32_si32_si32:1067; LA32R-TRAP: # %bb.0: # %entry1068; LA32R-TRAP-NEXT: mod.w $a0, $a0, $a11069; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB20_21070; LA32R-TRAP-NEXT: # %bb.1: # %entry1071; LA32R-TRAP-NEXT: break 71072; LA32R-TRAP-NEXT: .LBB20_2: # %entry1073; LA32R-TRAP-NEXT: ret1074;1075; LA32S-TRAP-LABEL: srem_ui32_si32_si32:1076; LA32S-TRAP: # %bb.0: # %entry1077; LA32S-TRAP-NEXT: mod.w $a0, $a0, $a11078; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB20_21079; LA32S-TRAP-NEXT: # %bb.1: # %entry1080; LA32S-TRAP-NEXT: break 71081; LA32S-TRAP-NEXT: .LBB20_2: # %entry1082; LA32S-TRAP-NEXT: ret1083;1084; LA64-TRAP-LABEL: srem_ui32_si32_si32:1085; LA64-TRAP: # %bb.0: # %entry1086; LA64-TRAP-NEXT: mod.w $a0, $a0, $a11087; LA64-TRAP-NEXT: bne $a1, $zero, .LBB20_21088; LA64-TRAP-NEXT: # %bb.1: # %entry1089; LA64-TRAP-NEXT: break 71090; LA64-TRAP-NEXT: .LBB20_2: # %entry1091; LA64-TRAP-NEXT: ret1092entry:1093 %r = srem i32 %a, %b1094 ret i32 %r1095}1096 1097define signext i32 @srem_si32_ui32_ui32(i32 %a, i32 %b) {1098; LA32R-LABEL: srem_si32_ui32_ui32:1099; LA32R: # %bb.0: # %entry1100; LA32R-NEXT: mod.w $a0, $a0, $a11101; LA32R-NEXT: ret1102;1103; LA32S-LABEL: srem_si32_ui32_ui32:1104; LA32S: # %bb.0: # %entry1105; LA32S-NEXT: mod.w $a0, $a0, $a11106; LA32S-NEXT: ret1107;1108; LA64-LABEL: srem_si32_ui32_ui32:1109; LA64: # %bb.0: # %entry1110; LA64-NEXT: addi.w $a1, $a1, 01111; LA64-NEXT: addi.w $a0, $a0, 01112; LA64-NEXT: mod.w $a0, $a0, $a11113; LA64-NEXT: ret1114;1115; LA32R-TRAP-LABEL: srem_si32_ui32_ui32:1116; LA32R-TRAP: # %bb.0: # %entry1117; LA32R-TRAP-NEXT: mod.w $a0, $a0, $a11118; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB21_21119; LA32R-TRAP-NEXT: # %bb.1: # %entry1120; LA32R-TRAP-NEXT: break 71121; LA32R-TRAP-NEXT: .LBB21_2: # %entry1122; LA32R-TRAP-NEXT: ret1123;1124; LA32S-TRAP-LABEL: srem_si32_ui32_ui32:1125; LA32S-TRAP: # %bb.0: # %entry1126; LA32S-TRAP-NEXT: mod.w $a0, $a0, $a11127; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB21_21128; LA32S-TRAP-NEXT: # %bb.1: # %entry1129; LA32S-TRAP-NEXT: break 71130; LA32S-TRAP-NEXT: .LBB21_2: # %entry1131; LA32S-TRAP-NEXT: ret1132;1133; LA64-TRAP-LABEL: srem_si32_ui32_ui32:1134; LA64-TRAP: # %bb.0: # %entry1135; LA64-TRAP-NEXT: addi.w $a1, $a1, 01136; LA64-TRAP-NEXT: addi.w $a0, $a0, 01137; LA64-TRAP-NEXT: mod.w $a0, $a0, $a11138; LA64-TRAP-NEXT: bne $a1, $zero, .LBB21_21139; LA64-TRAP-NEXT: # %bb.1: # %entry1140; LA64-TRAP-NEXT: break 71141; LA64-TRAP-NEXT: .LBB21_2: # %entry1142; LA64-TRAP-NEXT: ret1143entry:1144 %r = srem i32 %a, %b1145 ret i32 %r1146}1147 1148define signext i32 @srem_si32_si32_si32(i32 signext %a, i32 signext %b) {1149; LA32R-LABEL: srem_si32_si32_si32:1150; LA32R: # %bb.0: # %entry1151; LA32R-NEXT: mod.w $a0, $a0, $a11152; LA32R-NEXT: ret1153;1154; LA32S-LABEL: srem_si32_si32_si32:1155; LA32S: # %bb.0: # %entry1156; LA32S-NEXT: mod.w $a0, $a0, $a11157; LA32S-NEXT: ret1158;1159; LA64-LABEL: srem_si32_si32_si32:1160; LA64: # %bb.0: # %entry1161; LA64-NEXT: mod.w $a0, $a0, $a11162; LA64-NEXT: ret1163;1164; LA32R-TRAP-LABEL: srem_si32_si32_si32:1165; LA32R-TRAP: # %bb.0: # %entry1166; LA32R-TRAP-NEXT: mod.w $a0, $a0, $a11167; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB22_21168; LA32R-TRAP-NEXT: # %bb.1: # %entry1169; LA32R-TRAP-NEXT: break 71170; LA32R-TRAP-NEXT: .LBB22_2: # %entry1171; LA32R-TRAP-NEXT: ret1172;1173; LA32S-TRAP-LABEL: srem_si32_si32_si32:1174; LA32S-TRAP: # %bb.0: # %entry1175; LA32S-TRAP-NEXT: mod.w $a0, $a0, $a11176; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB22_21177; LA32S-TRAP-NEXT: # %bb.1: # %entry1178; LA32S-TRAP-NEXT: break 71179; LA32S-TRAP-NEXT: .LBB22_2: # %entry1180; LA32S-TRAP-NEXT: ret1181;1182; LA64-TRAP-LABEL: srem_si32_si32_si32:1183; LA64-TRAP: # %bb.0: # %entry1184; LA64-TRAP-NEXT: mod.w $a0, $a0, $a11185; LA64-TRAP-NEXT: bne $a1, $zero, .LBB22_21186; LA64-TRAP-NEXT: # %bb.1: # %entry1187; LA64-TRAP-NEXT: break 71188; LA64-TRAP-NEXT: .LBB22_2: # %entry1189; LA64-TRAP-NEXT: ret1190entry:1191 %r = srem i32 %a, %b1192 ret i32 %r1193}1194 1195define i64 @srem_i64(i64 %a, i64 %b) {1196; LA32R-LABEL: srem_i64:1197; LA32R: # %bb.0: # %entry1198; LA32R-NEXT: addi.w $sp, $sp, -161199; LA32R-NEXT: .cfi_def_cfa_offset 161200; LA32R-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1201; LA32R-NEXT: .cfi_offset 1, -41202; LA32R-NEXT: bl __moddi31203; LA32R-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1204; LA32R-NEXT: addi.w $sp, $sp, 161205; LA32R-NEXT: ret1206;1207; LA32S-LABEL: srem_i64:1208; LA32S: # %bb.0: # %entry1209; LA32S-NEXT: addi.w $sp, $sp, -161210; LA32S-NEXT: .cfi_def_cfa_offset 161211; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1212; LA32S-NEXT: .cfi_offset 1, -41213; LA32S-NEXT: bl __moddi31214; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1215; LA32S-NEXT: addi.w $sp, $sp, 161216; LA32S-NEXT: ret1217;1218; LA64-LABEL: srem_i64:1219; LA64: # %bb.0: # %entry1220; LA64-NEXT: mod.d $a0, $a0, $a11221; LA64-NEXT: ret1222;1223; LA32R-TRAP-LABEL: srem_i64:1224; LA32R-TRAP: # %bb.0: # %entry1225; LA32R-TRAP-NEXT: addi.w $sp, $sp, -161226; LA32R-TRAP-NEXT: .cfi_def_cfa_offset 161227; LA32R-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1228; LA32R-TRAP-NEXT: .cfi_offset 1, -41229; LA32R-TRAP-NEXT: bl __moddi31230; LA32R-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1231; LA32R-TRAP-NEXT: addi.w $sp, $sp, 161232; LA32R-TRAP-NEXT: ret1233;1234; LA32S-TRAP-LABEL: srem_i64:1235; LA32S-TRAP: # %bb.0: # %entry1236; LA32S-TRAP-NEXT: addi.w $sp, $sp, -161237; LA32S-TRAP-NEXT: .cfi_def_cfa_offset 161238; LA32S-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1239; LA32S-TRAP-NEXT: .cfi_offset 1, -41240; LA32S-TRAP-NEXT: bl __moddi31241; LA32S-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1242; LA32S-TRAP-NEXT: addi.w $sp, $sp, 161243; LA32S-TRAP-NEXT: ret1244;1245; LA64-TRAP-LABEL: srem_i64:1246; LA64-TRAP: # %bb.0: # %entry1247; LA64-TRAP-NEXT: mod.d $a0, $a0, $a11248; LA64-TRAP-NEXT: bne $a1, $zero, .LBB23_21249; LA64-TRAP-NEXT: # %bb.1: # %entry1250; LA64-TRAP-NEXT: break 71251; LA64-TRAP-NEXT: .LBB23_2: # %entry1252; LA64-TRAP-NEXT: ret1253entry:1254 %r = srem i64 %a, %b1255 ret i64 %r1256}1257 1258define i1 @urem_i1(i1 %a, i1 %b) {1259; LA32R-LABEL: urem_i1:1260; LA32R: # %bb.0: # %entry1261; LA32R-NEXT: move $a0, $zero1262; LA32R-NEXT: ret1263;1264; LA32S-LABEL: urem_i1:1265; LA32S: # %bb.0: # %entry1266; LA32S-NEXT: move $a0, $zero1267; LA32S-NEXT: ret1268;1269; LA64-LABEL: urem_i1:1270; LA64: # %bb.0: # %entry1271; LA64-NEXT: move $a0, $zero1272; LA64-NEXT: ret1273;1274; LA32R-TRAP-LABEL: urem_i1:1275; LA32R-TRAP: # %bb.0: # %entry1276; LA32R-TRAP-NEXT: move $a0, $zero1277; LA32R-TRAP-NEXT: ret1278;1279; LA32S-TRAP-LABEL: urem_i1:1280; LA32S-TRAP: # %bb.0: # %entry1281; LA32S-TRAP-NEXT: move $a0, $zero1282; LA32S-TRAP-NEXT: ret1283;1284; LA64-TRAP-LABEL: urem_i1:1285; LA64-TRAP: # %bb.0: # %entry1286; LA64-TRAP-NEXT: move $a0, $zero1287; LA64-TRAP-NEXT: ret1288entry:1289 %r = urem i1 %a, %b1290 ret i1 %r1291}1292 1293define i8 @urem_i8(i8 %a, i8 %b) {1294; LA32R-LABEL: urem_i8:1295; LA32R: # %bb.0: # %entry1296; LA32R-NEXT: andi $a1, $a1, 2551297; LA32R-NEXT: andi $a0, $a0, 2551298; LA32R-NEXT: mod.wu $a0, $a0, $a11299; LA32R-NEXT: ret1300;1301; LA32S-LABEL: urem_i8:1302; LA32S: # %bb.0: # %entry1303; LA32S-NEXT: andi $a1, $a1, 2551304; LA32S-NEXT: andi $a0, $a0, 2551305; LA32S-NEXT: mod.wu $a0, $a0, $a11306; LA32S-NEXT: ret1307;1308; LA64-LABEL: urem_i8:1309; LA64: # %bb.0: # %entry1310; LA64-NEXT: andi $a1, $a1, 2551311; LA64-NEXT: andi $a0, $a0, 2551312; LA64-NEXT: mod.du $a0, $a0, $a11313; LA64-NEXT: ret1314;1315; LA32R-TRAP-LABEL: urem_i8:1316; LA32R-TRAP: # %bb.0: # %entry1317; LA32R-TRAP-NEXT: andi $a1, $a1, 2551318; LA32R-TRAP-NEXT: andi $a0, $a0, 2551319; LA32R-TRAP-NEXT: mod.wu $a0, $a0, $a11320; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB25_21321; LA32R-TRAP-NEXT: # %bb.1: # %entry1322; LA32R-TRAP-NEXT: break 71323; LA32R-TRAP-NEXT: .LBB25_2: # %entry1324; LA32R-TRAP-NEXT: ret1325;1326; LA32S-TRAP-LABEL: urem_i8:1327; LA32S-TRAP: # %bb.0: # %entry1328; LA32S-TRAP-NEXT: andi $a1, $a1, 2551329; LA32S-TRAP-NEXT: andi $a0, $a0, 2551330; LA32S-TRAP-NEXT: mod.wu $a0, $a0, $a11331; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB25_21332; LA32S-TRAP-NEXT: # %bb.1: # %entry1333; LA32S-TRAP-NEXT: break 71334; LA32S-TRAP-NEXT: .LBB25_2: # %entry1335; LA32S-TRAP-NEXT: ret1336;1337; LA64-TRAP-LABEL: urem_i8:1338; LA64-TRAP: # %bb.0: # %entry1339; LA64-TRAP-NEXT: andi $a1, $a1, 2551340; LA64-TRAP-NEXT: andi $a0, $a0, 2551341; LA64-TRAP-NEXT: mod.du $a0, $a0, $a11342; LA64-TRAP-NEXT: bne $a1, $zero, .LBB25_21343; LA64-TRAP-NEXT: # %bb.1: # %entry1344; LA64-TRAP-NEXT: break 71345; LA64-TRAP-NEXT: .LBB25_2: # %entry1346; LA64-TRAP-NEXT: ret1347entry:1348 %r = urem i8 %a, %b1349 ret i8 %r1350}1351 1352define i16 @urem_i16(i16 %a, i16 %b) {1353; LA32R-LABEL: urem_i16:1354; LA32R: # %bb.0: # %entry1355; LA32R-NEXT: lu12i.w $a2, 151356; LA32R-NEXT: ori $a2, $a2, 40951357; LA32R-NEXT: and $a1, $a1, $a21358; LA32R-NEXT: and $a0, $a0, $a21359; LA32R-NEXT: mod.wu $a0, $a0, $a11360; LA32R-NEXT: ret1361;1362; LA32S-LABEL: urem_i16:1363; LA32S: # %bb.0: # %entry1364; LA32S-NEXT: bstrpick.w $a1, $a1, 15, 01365; LA32S-NEXT: bstrpick.w $a0, $a0, 15, 01366; LA32S-NEXT: mod.wu $a0, $a0, $a11367; LA32S-NEXT: ret1368;1369; LA64-LABEL: urem_i16:1370; LA64: # %bb.0: # %entry1371; LA64-NEXT: bstrpick.d $a1, $a1, 15, 01372; LA64-NEXT: bstrpick.d $a0, $a0, 15, 01373; LA64-NEXT: mod.du $a0, $a0, $a11374; LA64-NEXT: ret1375;1376; LA32R-TRAP-LABEL: urem_i16:1377; LA32R-TRAP: # %bb.0: # %entry1378; LA32R-TRAP-NEXT: lu12i.w $a2, 151379; LA32R-TRAP-NEXT: ori $a2, $a2, 40951380; LA32R-TRAP-NEXT: and $a1, $a1, $a21381; LA32R-TRAP-NEXT: and $a0, $a0, $a21382; LA32R-TRAP-NEXT: mod.wu $a0, $a0, $a11383; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB26_21384; LA32R-TRAP-NEXT: # %bb.1: # %entry1385; LA32R-TRAP-NEXT: break 71386; LA32R-TRAP-NEXT: .LBB26_2: # %entry1387; LA32R-TRAP-NEXT: ret1388;1389; LA32S-TRAP-LABEL: urem_i16:1390; LA32S-TRAP: # %bb.0: # %entry1391; LA32S-TRAP-NEXT: bstrpick.w $a1, $a1, 15, 01392; LA32S-TRAP-NEXT: bstrpick.w $a0, $a0, 15, 01393; LA32S-TRAP-NEXT: mod.wu $a0, $a0, $a11394; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB26_21395; LA32S-TRAP-NEXT: # %bb.1: # %entry1396; LA32S-TRAP-NEXT: break 71397; LA32S-TRAP-NEXT: .LBB26_2: # %entry1398; LA32S-TRAP-NEXT: ret1399;1400; LA64-TRAP-LABEL: urem_i16:1401; LA64-TRAP: # %bb.0: # %entry1402; LA64-TRAP-NEXT: bstrpick.d $a1, $a1, 15, 01403; LA64-TRAP-NEXT: bstrpick.d $a0, $a0, 15, 01404; LA64-TRAP-NEXT: mod.du $a0, $a0, $a11405; LA64-TRAP-NEXT: bne $a1, $zero, .LBB26_21406; LA64-TRAP-NEXT: # %bb.1: # %entry1407; LA64-TRAP-NEXT: break 71408; LA64-TRAP-NEXT: .LBB26_2: # %entry1409; LA64-TRAP-NEXT: ret1410entry:1411 %r = urem i16 %a, %b1412 ret i16 %r1413}1414 1415define i32 @urem_i32(i32 %a, i32 %b) {1416; LA32R-LABEL: urem_i32:1417; LA32R: # %bb.0: # %entry1418; LA32R-NEXT: mod.wu $a0, $a0, $a11419; LA32R-NEXT: ret1420;1421; LA32S-LABEL: urem_i32:1422; LA32S: # %bb.0: # %entry1423; LA32S-NEXT: mod.wu $a0, $a0, $a11424; LA32S-NEXT: ret1425;1426; LA64-LABEL: urem_i32:1427; LA64: # %bb.0: # %entry1428; LA64-NEXT: addi.w $a1, $a1, 01429; LA64-NEXT: addi.w $a0, $a0, 01430; LA64-NEXT: mod.wu $a0, $a0, $a11431; LA64-NEXT: ret1432;1433; LA32R-TRAP-LABEL: urem_i32:1434; LA32R-TRAP: # %bb.0: # %entry1435; LA32R-TRAP-NEXT: mod.wu $a0, $a0, $a11436; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB27_21437; LA32R-TRAP-NEXT: # %bb.1: # %entry1438; LA32R-TRAP-NEXT: break 71439; LA32R-TRAP-NEXT: .LBB27_2: # %entry1440; LA32R-TRAP-NEXT: ret1441;1442; LA32S-TRAP-LABEL: urem_i32:1443; LA32S-TRAP: # %bb.0: # %entry1444; LA32S-TRAP-NEXT: mod.wu $a0, $a0, $a11445; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB27_21446; LA32S-TRAP-NEXT: # %bb.1: # %entry1447; LA32S-TRAP-NEXT: break 71448; LA32S-TRAP-NEXT: .LBB27_2: # %entry1449; LA32S-TRAP-NEXT: ret1450;1451; LA64-TRAP-LABEL: urem_i32:1452; LA64-TRAP: # %bb.0: # %entry1453; LA64-TRAP-NEXT: addi.w $a1, $a1, 01454; LA64-TRAP-NEXT: addi.w $a0, $a0, 01455; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a11456; LA64-TRAP-NEXT: bne $a1, $zero, .LBB27_21457; LA64-TRAP-NEXT: # %bb.1: # %entry1458; LA64-TRAP-NEXT: break 71459; LA64-TRAP-NEXT: .LBB27_2: # %entry1460; LA64-TRAP-NEXT: ret1461entry:1462 %r = urem i32 %a, %b1463 ret i32 %r1464}1465 1466define i32 @urem_ui32_si32_si32(i32 signext %a, i32 signext %b) {1467; LA32R-LABEL: urem_ui32_si32_si32:1468; LA32R: # %bb.0: # %entry1469; LA32R-NEXT: mod.wu $a0, $a0, $a11470; LA32R-NEXT: ret1471;1472; LA32S-LABEL: urem_ui32_si32_si32:1473; LA32S: # %bb.0: # %entry1474; LA32S-NEXT: mod.wu $a0, $a0, $a11475; LA32S-NEXT: ret1476;1477; LA64-LABEL: urem_ui32_si32_si32:1478; LA64: # %bb.0: # %entry1479; LA64-NEXT: mod.wu $a0, $a0, $a11480; LA64-NEXT: ret1481;1482; LA32R-TRAP-LABEL: urem_ui32_si32_si32:1483; LA32R-TRAP: # %bb.0: # %entry1484; LA32R-TRAP-NEXT: mod.wu $a0, $a0, $a11485; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB28_21486; LA32R-TRAP-NEXT: # %bb.1: # %entry1487; LA32R-TRAP-NEXT: break 71488; LA32R-TRAP-NEXT: .LBB28_2: # %entry1489; LA32R-TRAP-NEXT: ret1490;1491; LA32S-TRAP-LABEL: urem_ui32_si32_si32:1492; LA32S-TRAP: # %bb.0: # %entry1493; LA32S-TRAP-NEXT: mod.wu $a0, $a0, $a11494; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB28_21495; LA32S-TRAP-NEXT: # %bb.1: # %entry1496; LA32S-TRAP-NEXT: break 71497; LA32S-TRAP-NEXT: .LBB28_2: # %entry1498; LA32S-TRAP-NEXT: ret1499;1500; LA64-TRAP-LABEL: urem_ui32_si32_si32:1501; LA64-TRAP: # %bb.0: # %entry1502; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a11503; LA64-TRAP-NEXT: bne $a1, $zero, .LBB28_21504; LA64-TRAP-NEXT: # %bb.1: # %entry1505; LA64-TRAP-NEXT: break 71506; LA64-TRAP-NEXT: .LBB28_2: # %entry1507; LA64-TRAP-NEXT: ret1508entry:1509 %r = urem i32 %a, %b1510 ret i32 %r1511}1512 1513define signext i32 @urem_si32_ui32_ui32(i32 %a, i32 %b) {1514; LA32R-LABEL: urem_si32_ui32_ui32:1515; LA32R: # %bb.0: # %entry1516; LA32R-NEXT: mod.wu $a0, $a0, $a11517; LA32R-NEXT: ret1518;1519; LA32S-LABEL: urem_si32_ui32_ui32:1520; LA32S: # %bb.0: # %entry1521; LA32S-NEXT: mod.wu $a0, $a0, $a11522; LA32S-NEXT: ret1523;1524; LA64-LABEL: urem_si32_ui32_ui32:1525; LA64: # %bb.0: # %entry1526; LA64-NEXT: addi.w $a1, $a1, 01527; LA64-NEXT: addi.w $a0, $a0, 01528; LA64-NEXT: mod.wu $a0, $a0, $a11529; LA64-NEXT: ret1530;1531; LA32R-TRAP-LABEL: urem_si32_ui32_ui32:1532; LA32R-TRAP: # %bb.0: # %entry1533; LA32R-TRAP-NEXT: mod.wu $a0, $a0, $a11534; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB29_21535; LA32R-TRAP-NEXT: # %bb.1: # %entry1536; LA32R-TRAP-NEXT: break 71537; LA32R-TRAP-NEXT: .LBB29_2: # %entry1538; LA32R-TRAP-NEXT: ret1539;1540; LA32S-TRAP-LABEL: urem_si32_ui32_ui32:1541; LA32S-TRAP: # %bb.0: # %entry1542; LA32S-TRAP-NEXT: mod.wu $a0, $a0, $a11543; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB29_21544; LA32S-TRAP-NEXT: # %bb.1: # %entry1545; LA32S-TRAP-NEXT: break 71546; LA32S-TRAP-NEXT: .LBB29_2: # %entry1547; LA32S-TRAP-NEXT: ret1548;1549; LA64-TRAP-LABEL: urem_si32_ui32_ui32:1550; LA64-TRAP: # %bb.0: # %entry1551; LA64-TRAP-NEXT: addi.w $a1, $a1, 01552; LA64-TRAP-NEXT: addi.w $a0, $a0, 01553; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a11554; LA64-TRAP-NEXT: bne $a1, $zero, .LBB29_21555; LA64-TRAP-NEXT: # %bb.1: # %entry1556; LA64-TRAP-NEXT: break 71557; LA64-TRAP-NEXT: .LBB29_2: # %entry1558; LA64-TRAP-NEXT: ret1559entry:1560 %r = urem i32 %a, %b1561 ret i32 %r1562}1563 1564define signext i32 @urem_si32_si32_si32(i32 signext %a, i32 signext %b) {1565; LA32R-LABEL: urem_si32_si32_si32:1566; LA32R: # %bb.0: # %entry1567; LA32R-NEXT: mod.wu $a0, $a0, $a11568; LA32R-NEXT: ret1569;1570; LA32S-LABEL: urem_si32_si32_si32:1571; LA32S: # %bb.0: # %entry1572; LA32S-NEXT: mod.wu $a0, $a0, $a11573; LA32S-NEXT: ret1574;1575; LA64-LABEL: urem_si32_si32_si32:1576; LA64: # %bb.0: # %entry1577; LA64-NEXT: mod.wu $a0, $a0, $a11578; LA64-NEXT: ret1579;1580; LA32R-TRAP-LABEL: urem_si32_si32_si32:1581; LA32R-TRAP: # %bb.0: # %entry1582; LA32R-TRAP-NEXT: mod.wu $a0, $a0, $a11583; LA32R-TRAP-NEXT: bne $a1, $zero, .LBB30_21584; LA32R-TRAP-NEXT: # %bb.1: # %entry1585; LA32R-TRAP-NEXT: break 71586; LA32R-TRAP-NEXT: .LBB30_2: # %entry1587; LA32R-TRAP-NEXT: ret1588;1589; LA32S-TRAP-LABEL: urem_si32_si32_si32:1590; LA32S-TRAP: # %bb.0: # %entry1591; LA32S-TRAP-NEXT: mod.wu $a0, $a0, $a11592; LA32S-TRAP-NEXT: bne $a1, $zero, .LBB30_21593; LA32S-TRAP-NEXT: # %bb.1: # %entry1594; LA32S-TRAP-NEXT: break 71595; LA32S-TRAP-NEXT: .LBB30_2: # %entry1596; LA32S-TRAP-NEXT: ret1597;1598; LA64-TRAP-LABEL: urem_si32_si32_si32:1599; LA64-TRAP: # %bb.0: # %entry1600; LA64-TRAP-NEXT: mod.wu $a0, $a0, $a11601; LA64-TRAP-NEXT: bne $a1, $zero, .LBB30_21602; LA64-TRAP-NEXT: # %bb.1: # %entry1603; LA64-TRAP-NEXT: break 71604; LA64-TRAP-NEXT: .LBB30_2: # %entry1605; LA64-TRAP-NEXT: ret1606entry:1607 %r = urem i32 %a, %b1608 ret i32 %r1609}1610 1611define i64 @urem_i64(i64 %a, i64 %b) {1612; LA32R-LABEL: urem_i64:1613; LA32R: # %bb.0: # %entry1614; LA32R-NEXT: addi.w $sp, $sp, -161615; LA32R-NEXT: .cfi_def_cfa_offset 161616; LA32R-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1617; LA32R-NEXT: .cfi_offset 1, -41618; LA32R-NEXT: bl __umoddi31619; LA32R-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1620; LA32R-NEXT: addi.w $sp, $sp, 161621; LA32R-NEXT: ret1622;1623; LA32S-LABEL: urem_i64:1624; LA32S: # %bb.0: # %entry1625; LA32S-NEXT: addi.w $sp, $sp, -161626; LA32S-NEXT: .cfi_def_cfa_offset 161627; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1628; LA32S-NEXT: .cfi_offset 1, -41629; LA32S-NEXT: bl __umoddi31630; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1631; LA32S-NEXT: addi.w $sp, $sp, 161632; LA32S-NEXT: ret1633;1634; LA64-LABEL: urem_i64:1635; LA64: # %bb.0: # %entry1636; LA64-NEXT: mod.du $a0, $a0, $a11637; LA64-NEXT: ret1638;1639; LA32R-TRAP-LABEL: urem_i64:1640; LA32R-TRAP: # %bb.0: # %entry1641; LA32R-TRAP-NEXT: addi.w $sp, $sp, -161642; LA32R-TRAP-NEXT: .cfi_def_cfa_offset 161643; LA32R-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1644; LA32R-TRAP-NEXT: .cfi_offset 1, -41645; LA32R-TRAP-NEXT: bl __umoddi31646; LA32R-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1647; LA32R-TRAP-NEXT: addi.w $sp, $sp, 161648; LA32R-TRAP-NEXT: ret1649;1650; LA32S-TRAP-LABEL: urem_i64:1651; LA32S-TRAP: # %bb.0: # %entry1652; LA32S-TRAP-NEXT: addi.w $sp, $sp, -161653; LA32S-TRAP-NEXT: .cfi_def_cfa_offset 161654; LA32S-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1655; LA32S-TRAP-NEXT: .cfi_offset 1, -41656; LA32S-TRAP-NEXT: bl __umoddi31657; LA32S-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1658; LA32S-TRAP-NEXT: addi.w $sp, $sp, 161659; LA32S-TRAP-NEXT: ret1660;1661; LA64-TRAP-LABEL: urem_i64:1662; LA64-TRAP: # %bb.0: # %entry1663; LA64-TRAP-NEXT: mod.du $a0, $a0, $a11664; LA64-TRAP-NEXT: bne $a1, $zero, .LBB31_21665; LA64-TRAP-NEXT: # %bb.1: # %entry1666; LA64-TRAP-NEXT: break 71667; LA64-TRAP-NEXT: .LBB31_2: # %entry1668; LA64-TRAP-NEXT: ret1669entry:1670 %r = urem i64 %a, %b1671 ret i64 %r1672}1673 1674define signext i32 @pr107414(i32 signext %x) {1675; LA32R-LABEL: pr107414:1676; LA32R: # %bb.0: # %entry1677; LA32R-NEXT: addi.w $sp, $sp, -161678; LA32R-NEXT: .cfi_def_cfa_offset 161679; LA32R-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1680; LA32R-NEXT: .cfi_offset 1, -41681; LA32R-NEXT: move $a2, $a01682; LA32R-NEXT: srai.w $a3, $a0, 311683; LA32R-NEXT: lu12i.w $a0, -2668311684; LA32R-NEXT: ori $a0, $a0, 33371685; LA32R-NEXT: move $a1, $zero1686; LA32R-NEXT: bl __divdi31687; LA32R-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1688; LA32R-NEXT: addi.w $sp, $sp, 161689; LA32R-NEXT: ret1690;1691; LA32S-LABEL: pr107414:1692; LA32S: # %bb.0: # %entry1693; LA32S-NEXT: addi.w $sp, $sp, -161694; LA32S-NEXT: .cfi_def_cfa_offset 161695; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1696; LA32S-NEXT: .cfi_offset 1, -41697; LA32S-NEXT: move $a2, $a01698; LA32S-NEXT: srai.w $a3, $a0, 311699; LA32S-NEXT: lu12i.w $a0, -2668311700; LA32S-NEXT: ori $a0, $a0, 33371701; LA32S-NEXT: move $a1, $zero1702; LA32S-NEXT: bl __divdi31703; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1704; LA32S-NEXT: addi.w $sp, $sp, 161705; LA32S-NEXT: ret1706;1707; LA64-LABEL: pr107414:1708; LA64: # %bb.0: # %entry1709; LA64-NEXT: lu12i.w $a1, -2668311710; LA64-NEXT: ori $a1, $a1, 33371711; LA64-NEXT: lu32i.d $a1, 01712; LA64-NEXT: div.d $a0, $a1, $a01713; LA64-NEXT: addi.w $a0, $a0, 01714; LA64-NEXT: ret1715;1716; LA32R-TRAP-LABEL: pr107414:1717; LA32R-TRAP: # %bb.0: # %entry1718; LA32R-TRAP-NEXT: addi.w $sp, $sp, -161719; LA32R-TRAP-NEXT: .cfi_def_cfa_offset 161720; LA32R-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1721; LA32R-TRAP-NEXT: .cfi_offset 1, -41722; LA32R-TRAP-NEXT: move $a2, $a01723; LA32R-TRAP-NEXT: srai.w $a3, $a0, 311724; LA32R-TRAP-NEXT: lu12i.w $a0, -2668311725; LA32R-TRAP-NEXT: ori $a0, $a0, 33371726; LA32R-TRAP-NEXT: move $a1, $zero1727; LA32R-TRAP-NEXT: bl __divdi31728; LA32R-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1729; LA32R-TRAP-NEXT: addi.w $sp, $sp, 161730; LA32R-TRAP-NEXT: ret1731;1732; LA32S-TRAP-LABEL: pr107414:1733; LA32S-TRAP: # %bb.0: # %entry1734; LA32S-TRAP-NEXT: addi.w $sp, $sp, -161735; LA32S-TRAP-NEXT: .cfi_def_cfa_offset 161736; LA32S-TRAP-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1737; LA32S-TRAP-NEXT: .cfi_offset 1, -41738; LA32S-TRAP-NEXT: move $a2, $a01739; LA32S-TRAP-NEXT: srai.w $a3, $a0, 311740; LA32S-TRAP-NEXT: lu12i.w $a0, -2668311741; LA32S-TRAP-NEXT: ori $a0, $a0, 33371742; LA32S-TRAP-NEXT: move $a1, $zero1743; LA32S-TRAP-NEXT: bl __divdi31744; LA32S-TRAP-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1745; LA32S-TRAP-NEXT: addi.w $sp, $sp, 161746; LA32S-TRAP-NEXT: ret1747;1748; LA64-TRAP-LABEL: pr107414:1749; LA64-TRAP: # %bb.0: # %entry1750; LA64-TRAP-NEXT: lu12i.w $a1, -2668311751; LA64-TRAP-NEXT: ori $a1, $a1, 33371752; LA64-TRAP-NEXT: lu32i.d $a1, 01753; LA64-TRAP-NEXT: div.d $a1, $a1, $a01754; LA64-TRAP-NEXT: bne $a0, $zero, .LBB32_21755; LA64-TRAP-NEXT: # %bb.1: # %entry1756; LA64-TRAP-NEXT: break 71757; LA64-TRAP-NEXT: .LBB32_2: # %entry1758; LA64-TRAP-NEXT: addi.w $a0, $a1, 01759; LA64-TRAP-NEXT: ret1760entry:1761 %conv = sext i32 %x to i641762 %div = sdiv i64 3202030857, %conv1763 %conv1 = trunc i64 %div to i321764 ret i32 %conv11765}1766