brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · c8c66fa Raw
194 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=MIPS323define i32 @mul_i32(i32 %x, i32 %y) {4; MIPS32-LABEL: mul_i32:5; MIPS32:       # %bb.0: # %entry6; MIPS32-NEXT:    mul $2, $4, $57; MIPS32-NEXT:    jr $ra8; MIPS32-NEXT:    nop9entry:10  %z = mul i32 %x, %y11  ret i32 %z12}13 14define signext i8 @mul_i8_sext(i8 signext %a, i8 signext %b) {15; MIPS32-LABEL: mul_i8_sext:16; MIPS32:       # %bb.0: # %entry17; MIPS32-NEXT:    mul $1, $5, $418; MIPS32-NEXT:    sll $1, $1, 2419; MIPS32-NEXT:    sra $2, $1, 2420; MIPS32-NEXT:    jr $ra21; MIPS32-NEXT:    nop22entry:23  %mul = mul i8 %b, %a24  ret i8 %mul25}26 27define zeroext i8 @mul_i8_zext(i8 zeroext %a, i8 zeroext %b) {28; MIPS32-LABEL: mul_i8_zext:29; MIPS32:       # %bb.0: # %entry30; MIPS32-NEXT:    mul $1, $5, $431; MIPS32-NEXT:    andi $2, $1, 25532; MIPS32-NEXT:    jr $ra33; MIPS32-NEXT:    nop34entry:35  %mul = mul i8 %b, %a36  ret i8 %mul37}38 39define i8 @mul_i8_aext(i8 %a, i8 %b) {40; MIPS32-LABEL: mul_i8_aext:41; MIPS32:       # %bb.0: # %entry42; MIPS32-NEXT:    mul $2, $5, $443; MIPS32-NEXT:    jr $ra44; MIPS32-NEXT:    nop45entry:46  %mul = mul i8 %b, %a47  ret i8 %mul48}49 50define signext i16 @mul_i16_sext(i16 signext %a, i16 signext %b) {51; MIPS32-LABEL: mul_i16_sext:52; MIPS32:       # %bb.0: # %entry53; MIPS32-NEXT:    mul $1, $5, $454; MIPS32-NEXT:    sll $1, $1, 1655; MIPS32-NEXT:    sra $2, $1, 1656; MIPS32-NEXT:    jr $ra57; MIPS32-NEXT:    nop58entry:59  %mul = mul i16 %b, %a60  ret i16 %mul61}62 63define zeroext i16 @mul_i16_zext(i16 zeroext %a, i16 zeroext %b) {64; MIPS32-LABEL: mul_i16_zext:65; MIPS32:       # %bb.0: # %entry66; MIPS32-NEXT:    mul $1, $5, $467; MIPS32-NEXT:    andi $2, $1, 6553568; MIPS32-NEXT:    jr $ra69; MIPS32-NEXT:    nop70entry:71  %mul = mul i16 %b, %a72  ret i16 %mul73}74 75define i16 @mul_i16_aext(i16 %a, i16 %b) {76; MIPS32-LABEL: mul_i16_aext:77; MIPS32:       # %bb.0: # %entry78; MIPS32-NEXT:    mul $2, $5, $479; MIPS32-NEXT:    jr $ra80; MIPS32-NEXT:    nop81entry:82  %mul = mul i16 %b, %a83  ret i16 %mul84}85 86define i64 @mul_i64(i64 %a, i64 %b) {87; MIPS32-LABEL: mul_i64:88; MIPS32:       # %bb.0: # %entry89; MIPS32-NEXT:    move $3, $490; MIPS32-NEXT:    mul $2, $6, $391; MIPS32-NEXT:    mul $1, $7, $392; MIPS32-NEXT:    mul $4, $6, $593; MIPS32-NEXT:    multu $6, $394; MIPS32-NEXT:    mfhi $395; MIPS32-NEXT:    addu $1, $1, $496; MIPS32-NEXT:    addu $3, $1, $397; MIPS32-NEXT:    jr $ra98; MIPS32-NEXT:    nop99entry:100  %mul = mul i64 %b, %a101  ret i64 %mul102}103 104define i128 @mul_i128(i128 %a, i128 %b) {105; MIPS32-LABEL: mul_i128:106; MIPS32:       # %bb.0: # %entry107; MIPS32-NEXT:    move $14, $4108; MIPS32-NEXT:    move $13, $5109; MIPS32-NEXT:    move $12, $6110; MIPS32-NEXT:    move $9, $7111; MIPS32-NEXT:    addiu $1, $sp, 16112; MIPS32-NEXT:    lw $6, 0($1)113; MIPS32-NEXT:    addiu $1, $sp, 20114; MIPS32-NEXT:    lw $7, 0($1)115; MIPS32-NEXT:    addiu $1, $sp, 24116; MIPS32-NEXT:    lw $8, 0($1)117; MIPS32-NEXT:    addiu $1, $sp, 28118; MIPS32-NEXT:    lw $1, 0($1)119; MIPS32-NEXT:    mul $2, $6, $14120; MIPS32-NEXT:    mul $3, $7, $14121; MIPS32-NEXT:    mul $4, $6, $13122; MIPS32-NEXT:    multu $6, $14123; MIPS32-NEXT:    mfhi $5124; MIPS32-NEXT:    addu $3, $3, $4125; MIPS32-NEXT:    sltu $4, $3, $4126; MIPS32-NEXT:    addu $3, $3, $5127; MIPS32-NEXT:    sltu $5, $3, $5128; MIPS32-NEXT:    addu $10, $4, $5129; MIPS32-NEXT:    mul $4, $8, $14130; MIPS32-NEXT:    mul $5, $7, $13131; MIPS32-NEXT:    mul $24, $6, $12132; MIPS32-NEXT:    multu $7, $14133; MIPS32-NEXT:    mfhi $15134; MIPS32-NEXT:    multu $6, $13135; MIPS32-NEXT:    mfhi $11136; MIPS32-NEXT:    addu $4, $4, $5137; MIPS32-NEXT:    sltu $5, $4, $5138; MIPS32-NEXT:    addu $4, $4, $24139; MIPS32-NEXT:    sltu $24, $4, $24140; MIPS32-NEXT:    addu $5, $5, $24141; MIPS32-NEXT:    addu $4, $4, $15142; MIPS32-NEXT:    sltu $15, $4, $15143; MIPS32-NEXT:    addu $5, $5, $15144; MIPS32-NEXT:    addu $4, $4, $11145; MIPS32-NEXT:    sltu $11, $4, $11146; MIPS32-NEXT:    addu $5, $5, $11147; MIPS32-NEXT:    addu $4, $4, $10148; MIPS32-NEXT:    sltu $10, $4, $10149; MIPS32-NEXT:    addu $5, $5, $10150; MIPS32-NEXT:    mul $1, $1, $14151; MIPS32-NEXT:    mul $11, $8, $13152; MIPS32-NEXT:    mul $10, $7, $12153; MIPS32-NEXT:    mul $9, $6, $9154; MIPS32-NEXT:    multu $8, $14155; MIPS32-NEXT:    mfhi $8156; MIPS32-NEXT:    multu $7, $13157; MIPS32-NEXT:    mfhi $7158; MIPS32-NEXT:    multu $6, $12159; MIPS32-NEXT:    mfhi $6160; MIPS32-NEXT:    addu $1, $1, $11161; MIPS32-NEXT:    addu $1, $1, $10162; MIPS32-NEXT:    addu $1, $1, $9163; MIPS32-NEXT:    addu $1, $1, $8164; MIPS32-NEXT:    addu $1, $1, $7165; MIPS32-NEXT:    addu $1, $1, $6166; MIPS32-NEXT:    addu $5, $1, $5167; MIPS32-NEXT:    jr $ra168; MIPS32-NEXT:    nop169entry:170  %mul = mul i128 %b, %a171  ret i128 %mul172}173 174declare { i32, i1 } @llvm.umul.with.overflow.i32(i32, i32)175define void @umul_with_overflow(i32 %lhs, i32 %rhs, ptr %pmul, ptr %pcarry_flag) {176; MIPS32-LABEL: umul_with_overflow:177; MIPS32:       # %bb.0:178; MIPS32-NEXT:    multu $4, $5179; MIPS32-NEXT:    mfhi $2180; MIPS32-NEXT:    mul $1, $4, $5181; MIPS32-NEXT:    sltu $2, $zero, $2182; MIPS32-NEXT:    andi $2, $2, 1183; MIPS32-NEXT:    sb $2, 0($7)184; MIPS32-NEXT:    sw $1, 0($6)185; MIPS32-NEXT:    jr $ra186; MIPS32-NEXT:    nop187  %res = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %lhs, i32 %rhs)188  %carry_flag = extractvalue { i32, i1 } %res, 1189  %mul = extractvalue { i32, i1 } %res, 0190  store i1 %carry_flag, ptr %pcarry_flag191  store i32 %mul, ptr %pmul192  ret void193}194