283 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS323 4; sdiv5define signext i8 @sdiv_i8(i8 signext %a, i8 signext %b) {6; MIPS32-LABEL: sdiv_i8:7; MIPS32: # %bb.0: # %entry8; MIPS32-NEXT: div $zero, $5, $49; MIPS32-NEXT: teq $4, $zero, 710; MIPS32-NEXT: mflo $111; MIPS32-NEXT: sll $1, $1, 2412; MIPS32-NEXT: sra $2, $1, 2413; MIPS32-NEXT: jr $ra14; MIPS32-NEXT: nop15entry:16 %div = sdiv i8 %b, %a17 ret i8 %div18}19 20define signext i16 @sdiv_i16(i16 signext %a, i16 signext %b) {21; MIPS32-LABEL: sdiv_i16:22; MIPS32: # %bb.0: # %entry23; MIPS32-NEXT: div $zero, $5, $424; MIPS32-NEXT: teq $4, $zero, 725; MIPS32-NEXT: mflo $126; MIPS32-NEXT: sll $1, $1, 1627; MIPS32-NEXT: sra $2, $1, 1628; MIPS32-NEXT: jr $ra29; MIPS32-NEXT: nop30entry:31 %div = sdiv i16 %b, %a32 ret i16 %div33}34 35define signext i32 @sdiv_i32(i32 signext %a, i32 signext %b) {36; MIPS32-LABEL: sdiv_i32:37; MIPS32: # %bb.0: # %entry38; MIPS32-NEXT: div $zero, $5, $439; MIPS32-NEXT: teq $4, $zero, 740; MIPS32-NEXT: mflo $241; MIPS32-NEXT: jr $ra42; MIPS32-NEXT: nop43entry:44 %div = sdiv i32 %b, %a45 ret i32 %div46}47 48define signext i64 @sdiv_i64(i64 signext %a, i64 signext %b) {49; MIPS32-LABEL: sdiv_i64:50; MIPS32: # %bb.0: # %entry51; MIPS32-NEXT: addiu $sp, $sp, -3252; MIPS32-NEXT: .cfi_def_cfa_offset 3253; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill54; MIPS32-NEXT: .cfi_offset 31, -455; MIPS32-NEXT: sw $4, 20($sp) # 4-byte Folded Spill56; MIPS32-NEXT: sw $5, 24($sp) # 4-byte Folded Spill57; MIPS32-NEXT: move $4, $658; MIPS32-NEXT: lw $6, 20($sp) # 4-byte Folded Reload59; MIPS32-NEXT: move $5, $760; MIPS32-NEXT: lw $7, 24($sp) # 4-byte Folded Reload61; MIPS32-NEXT: jal __divdi362; MIPS32-NEXT: nop63; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload64; MIPS32-NEXT: addiu $sp, $sp, 3265; MIPS32-NEXT: jr $ra66; MIPS32-NEXT: nop67entry:68 %div = sdiv i64 %b, %a69 ret i64 %div70}71 72; srem73define signext i8 @srem_i8(i8 signext %a, i8 signext %b) {74; MIPS32-LABEL: srem_i8:75; MIPS32: # %bb.0: # %entry76; MIPS32-NEXT: div $zero, $5, $477; MIPS32-NEXT: teq $4, $zero, 778; MIPS32-NEXT: mflo $179; MIPS32-NEXT: sll $1, $1, 2480; MIPS32-NEXT: sra $2, $1, 2481; MIPS32-NEXT: jr $ra82; MIPS32-NEXT: nop83entry:84 %div = sdiv i8 %b, %a85 ret i8 %div86}87 88define signext i16 @srem_i16(i16 signext %a, i16 signext %b) {89; MIPS32-LABEL: srem_i16:90; MIPS32: # %bb.0: # %entry91; MIPS32-NEXT: div $zero, $5, $492; MIPS32-NEXT: teq $4, $zero, 793; MIPS32-NEXT: mfhi $194; MIPS32-NEXT: sll $1, $1, 1695; MIPS32-NEXT: sra $2, $1, 1696; MIPS32-NEXT: jr $ra97; MIPS32-NEXT: nop98entry:99 %rem = srem i16 %b, %a100 ret i16 %rem101}102 103define signext i32 @srem_i32(i32 signext %a, i32 signext %b) {104; MIPS32-LABEL: srem_i32:105; MIPS32: # %bb.0: # %entry106; MIPS32-NEXT: div $zero, $5, $4107; MIPS32-NEXT: teq $4, $zero, 7108; MIPS32-NEXT: mfhi $2109; MIPS32-NEXT: jr $ra110; MIPS32-NEXT: nop111entry:112 %rem = srem i32 %b, %a113 ret i32 %rem114}115 116define signext i64 @srem_i64(i64 signext %a, i64 signext %b) {117; MIPS32-LABEL: srem_i64:118; MIPS32: # %bb.0: # %entry119; MIPS32-NEXT: addiu $sp, $sp, -32120; MIPS32-NEXT: .cfi_def_cfa_offset 32121; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill122; MIPS32-NEXT: .cfi_offset 31, -4123; MIPS32-NEXT: sw $4, 20($sp) # 4-byte Folded Spill124; MIPS32-NEXT: sw $5, 24($sp) # 4-byte Folded Spill125; MIPS32-NEXT: move $4, $6126; MIPS32-NEXT: lw $6, 20($sp) # 4-byte Folded Reload127; MIPS32-NEXT: move $5, $7128; MIPS32-NEXT: lw $7, 24($sp) # 4-byte Folded Reload129; MIPS32-NEXT: jal __moddi3130; MIPS32-NEXT: nop131; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload132; MIPS32-NEXT: addiu $sp, $sp, 32133; MIPS32-NEXT: jr $ra134; MIPS32-NEXT: nop135entry:136 %rem = srem i64 %b, %a137 ret i64 %rem138}139 140; udiv141define signext i8 @udiv_i8(i8 signext %a, i8 signext %b) {142; MIPS32-LABEL: udiv_i8:143; MIPS32: # %bb.0: # %entry144; MIPS32-NEXT: andi $2, $5, 255145; MIPS32-NEXT: andi $1, $4, 255146; MIPS32-NEXT: divu $zero, $2, $1147; MIPS32-NEXT: teq $1, $zero, 7148; MIPS32-NEXT: mflo $1149; MIPS32-NEXT: sll $1, $1, 24150; MIPS32-NEXT: sra $2, $1, 24151; MIPS32-NEXT: jr $ra152; MIPS32-NEXT: nop153entry:154 %div = udiv i8 %b, %a155 ret i8 %div156}157 158define signext i16 @udiv_i16(i16 signext %a, i16 signext %b) {159; MIPS32-LABEL: udiv_i16:160; MIPS32: # %bb.0: # %entry161; MIPS32-NEXT: andi $2, $5, 65535162; MIPS32-NEXT: andi $1, $4, 65535163; MIPS32-NEXT: divu $zero, $2, $1164; MIPS32-NEXT: teq $1, $zero, 7165; MIPS32-NEXT: mflo $1166; MIPS32-NEXT: sll $1, $1, 16167; MIPS32-NEXT: sra $2, $1, 16168; MIPS32-NEXT: jr $ra169; MIPS32-NEXT: nop170entry:171 %div = udiv i16 %b, %a172 ret i16 %div173}174 175define signext i32 @udiv_i32(i32 signext %a, i32 signext %b) {176; MIPS32-LABEL: udiv_i32:177; MIPS32: # %bb.0: # %entry178; MIPS32-NEXT: divu $zero, $5, $4179; MIPS32-NEXT: teq $4, $zero, 7180; MIPS32-NEXT: mflo $2181; MIPS32-NEXT: jr $ra182; MIPS32-NEXT: nop183entry:184 %div = udiv i32 %b, %a185 ret i32 %div186}187 188define signext i64 @udiv_i64(i64 signext %a, i64 signext %b) {189; MIPS32-LABEL: udiv_i64:190; MIPS32: # %bb.0: # %entry191; MIPS32-NEXT: addiu $sp, $sp, -32192; MIPS32-NEXT: .cfi_def_cfa_offset 32193; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill194; MIPS32-NEXT: .cfi_offset 31, -4195; MIPS32-NEXT: sw $4, 20($sp) # 4-byte Folded Spill196; MIPS32-NEXT: sw $5, 24($sp) # 4-byte Folded Spill197; MIPS32-NEXT: move $4, $6198; MIPS32-NEXT: lw $6, 20($sp) # 4-byte Folded Reload199; MIPS32-NEXT: move $5, $7200; MIPS32-NEXT: lw $7, 24($sp) # 4-byte Folded Reload201; MIPS32-NEXT: jal __udivdi3202; MIPS32-NEXT: nop203; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload204; MIPS32-NEXT: addiu $sp, $sp, 32205; MIPS32-NEXT: jr $ra206; MIPS32-NEXT: nop207entry:208 %div = udiv i64 %b, %a209 ret i64 %div210}211 212; urem213define signext i8 @urem_i8(i8 signext %a, i8 signext %b) {214; MIPS32-LABEL: urem_i8:215; MIPS32: # %bb.0: # %entry216; MIPS32-NEXT: andi $2, $5, 255217; MIPS32-NEXT: andi $1, $4, 255218; MIPS32-NEXT: divu $zero, $2, $1219; MIPS32-NEXT: teq $1, $zero, 7220; MIPS32-NEXT: mfhi $1221; MIPS32-NEXT: sll $1, $1, 24222; MIPS32-NEXT: sra $2, $1, 24223; MIPS32-NEXT: jr $ra224; MIPS32-NEXT: nop225entry:226 %rem = urem i8 %b, %a227 ret i8 %rem228}229 230define signext i16 @urem_i16(i16 signext %a, i16 signext %b) {231; MIPS32-LABEL: urem_i16:232; MIPS32: # %bb.0: # %entry233; MIPS32-NEXT: andi $2, $5, 65535234; MIPS32-NEXT: andi $1, $4, 65535235; MIPS32-NEXT: divu $zero, $2, $1236; MIPS32-NEXT: teq $1, $zero, 7237; MIPS32-NEXT: mfhi $1238; MIPS32-NEXT: sll $1, $1, 16239; MIPS32-NEXT: sra $2, $1, 16240; MIPS32-NEXT: jr $ra241; MIPS32-NEXT: nop242entry:243 %rem = urem i16 %b, %a244 ret i16 %rem245}246 247define signext i32 @urem_i32(i32 signext %a, i32 signext %b) {248; MIPS32-LABEL: urem_i32:249; MIPS32: # %bb.0: # %entry250; MIPS32-NEXT: divu $zero, $5, $4251; MIPS32-NEXT: teq $4, $zero, 7252; MIPS32-NEXT: mfhi $2253; MIPS32-NEXT: jr $ra254; MIPS32-NEXT: nop255entry:256 %rem = urem i32 %b, %a257 ret i32 %rem258}259 260define signext i64 @urem_i64(i64 signext %a, i64 signext %b) {261; MIPS32-LABEL: urem_i64:262; MIPS32: # %bb.0: # %entry263; MIPS32-NEXT: addiu $sp, $sp, -32264; MIPS32-NEXT: .cfi_def_cfa_offset 32265; MIPS32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill266; MIPS32-NEXT: .cfi_offset 31, -4267; MIPS32-NEXT: sw $4, 20($sp) # 4-byte Folded Spill268; MIPS32-NEXT: sw $5, 24($sp) # 4-byte Folded Spill269; MIPS32-NEXT: move $4, $6270; MIPS32-NEXT: lw $6, 20($sp) # 4-byte Folded Reload271; MIPS32-NEXT: move $5, $7272; MIPS32-NEXT: lw $7, 24($sp) # 4-byte Folded Reload273; MIPS32-NEXT: jal __umoddi3274; MIPS32-NEXT: nop275; MIPS32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload276; MIPS32-NEXT: addiu $sp, $sp, 32277; MIPS32-NEXT: jr $ra278; MIPS32-NEXT: nop279entry:280 %rem = urem i64 %b, %a281 ret i64 %rem282}283