423 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 4define i1 @and_i1(i1 %a, i1 %b) {5; MIPS32-LABEL: and_i1:6; MIPS32: # %bb.0: # %entry7; MIPS32-NEXT: and $2, $5, $48; MIPS32-NEXT: jr $ra9; MIPS32-NEXT: nop10entry:11 %and = and i1 %b, %a12 ret i1 %and13}14 15define i8 @and_i8(i8 %a, i8 %b) {16; MIPS32-LABEL: and_i8:17; MIPS32: # %bb.0: # %entry18; MIPS32-NEXT: and $2, $5, $419; MIPS32-NEXT: jr $ra20; MIPS32-NEXT: nop21entry:22 %and = and i8 %b, %a23 ret i8 %and24}25 26define i16 @and_i16(i16 %a, i16 %b) {27; MIPS32-LABEL: and_i16:28; MIPS32: # %bb.0: # %entry29; MIPS32-NEXT: and $2, $5, $430; MIPS32-NEXT: jr $ra31; MIPS32-NEXT: nop32entry:33 %and = and i16 %b, %a34 ret i16 %and35}36 37define i32 @and_i32(i32 %a, i32 %b) {38; MIPS32-LABEL: and_i32:39; MIPS32: # %bb.0: # %entry40; MIPS32-NEXT: and $2, $5, $441; MIPS32-NEXT: jr $ra42; MIPS32-NEXT: nop43entry:44 %and = and i32 %b, %a45 ret i32 %and46}47 48define i64 @and_i64(i64 %a, i64 %b) {49; MIPS32-LABEL: and_i64:50; MIPS32: # %bb.0: # %entry51; MIPS32-NEXT: and $2, $6, $452; MIPS32-NEXT: and $3, $7, $553; MIPS32-NEXT: jr $ra54; MIPS32-NEXT: nop55entry:56 %and = and i64 %b, %a57 ret i64 %and58}59 60define i32 @and_imm(i32 %a) {61; MIPS32-LABEL: and_imm:62; MIPS32: # %bb.0: # %entry63; MIPS32-NEXT: andi $2, $4, 25564; MIPS32-NEXT: jr $ra65; MIPS32-NEXT: nop66entry:67 %and = and i32 %a, 25568 ret i32 %and69}70 71define i32 @and_not_imm32ZExt16(i32 %a) {72; MIPS32-LABEL: and_not_imm32ZExt16:73; MIPS32: # %bb.0: # %entry74; MIPS32-NEXT: addiu $1, $zero, 6528075; MIPS32-NEXT: and $2, $4, $176; MIPS32-NEXT: jr $ra77; MIPS32-NEXT: nop78entry:79 %and = and i32 %a, -25680 ret i32 %and81}82 83define i1 @or_i1(i1 %a, i1 %b) {84; MIPS32-LABEL: or_i1:85; MIPS32: # %bb.0: # %entry86; MIPS32-NEXT: or $2, $5, $487; MIPS32-NEXT: jr $ra88; MIPS32-NEXT: nop89entry:90 %or = or i1 %b, %a91 ret i1 %or92}93 94define i8 @or_i8(i8 %a, i8 %b) {95; MIPS32-LABEL: or_i8:96; MIPS32: # %bb.0: # %entry97; MIPS32-NEXT: or $2, $5, $498; MIPS32-NEXT: jr $ra99; MIPS32-NEXT: nop100entry:101 %or = or i8 %b, %a102 ret i8 %or103}104 105define i16 @or_i16(i16 %a, i16 %b) {106; MIPS32-LABEL: or_i16:107; MIPS32: # %bb.0: # %entry108; MIPS32-NEXT: or $2, $5, $4109; MIPS32-NEXT: jr $ra110; MIPS32-NEXT: nop111entry:112 %or = or i16 %b, %a113 ret i16 %or114}115 116define i32 @or_i32(i32 %a, i32 %b) {117; MIPS32-LABEL: or_i32:118; MIPS32: # %bb.0: # %entry119; MIPS32-NEXT: or $2, $5, $4120; MIPS32-NEXT: jr $ra121; MIPS32-NEXT: nop122entry:123 %or = or i32 %b, %a124 ret i32 %or125}126 127define i64 @or_i64(i64 %a, i64 %b) {128; MIPS32-LABEL: or_i64:129; MIPS32: # %bb.0: # %entry130; MIPS32-NEXT: or $2, $6, $4131; MIPS32-NEXT: or $3, $7, $5132; MIPS32-NEXT: jr $ra133; MIPS32-NEXT: nop134entry:135 %or = or i64 %b, %a136 ret i64 %or137}138 139define i32 @or_imm(i32 %a) {140; MIPS32-LABEL: or_imm:141; MIPS32: # %bb.0: # %entry142; MIPS32-NEXT: ori $2, $4, 65535143; MIPS32-NEXT: jr $ra144; MIPS32-NEXT: nop145entry:146 %or = or i32 %a, 65535147 ret i32 %or148}149 150define i32 @or_not_imm32ZExt16(i32 %a) {151; MIPS32-LABEL: or_not_imm32ZExt16:152; MIPS32: # %bb.0: # %entry153; MIPS32-NEXT: lui $1, 1154; MIPS32-NEXT: or $2, $4, $1155; MIPS32-NEXT: jr $ra156; MIPS32-NEXT: nop157entry:158 %or = or i32 %a, 65536159 ret i32 %or160}161 162define i1 @xor_i1(i1 %a, i1 %b) {163; MIPS32-LABEL: xor_i1:164; MIPS32: # %bb.0: # %entry165; MIPS32-NEXT: xor $2, $5, $4166; MIPS32-NEXT: jr $ra167; MIPS32-NEXT: nop168entry:169 %xor = xor i1 %b, %a170 ret i1 %xor171}172 173define i8 @xor_i8(i8 %a, i8 %b) {174; MIPS32-LABEL: xor_i8:175; MIPS32: # %bb.0: # %entry176; MIPS32-NEXT: xor $2, $5, $4177; MIPS32-NEXT: jr $ra178; MIPS32-NEXT: nop179entry:180 %xor = xor i8 %b, %a181 ret i8 %xor182}183 184define i16 @xor_i16(i16 %a, i16 %b) {185; MIPS32-LABEL: xor_i16:186; MIPS32: # %bb.0: # %entry187; MIPS32-NEXT: xor $2, $5, $4188; MIPS32-NEXT: jr $ra189; MIPS32-NEXT: nop190entry:191 %xor = xor i16 %b, %a192 ret i16 %xor193}194 195define i32 @xor_i32(i32 %a, i32 %b) {196; MIPS32-LABEL: xor_i32:197; MIPS32: # %bb.0: # %entry198; MIPS32-NEXT: xor $2, $5, $4199; MIPS32-NEXT: jr $ra200; MIPS32-NEXT: nop201entry:202 %xor = xor i32 %b, %a203 ret i32 %xor204}205 206define i64 @xor_i64(i64 %a, i64 %b) {207; MIPS32-LABEL: xor_i64:208; MIPS32: # %bb.0: # %entry209; MIPS32-NEXT: xor $2, $6, $4210; MIPS32-NEXT: xor $3, $7, $5211; MIPS32-NEXT: jr $ra212; MIPS32-NEXT: nop213entry:214 %xor = xor i64 %b, %a215 ret i64 %xor216}217 218define i32 @xor_imm(i32 %a) {219; MIPS32-LABEL: xor_imm:220; MIPS32: # %bb.0: # %entry221; MIPS32-NEXT: xori $2, $4, 1222; MIPS32-NEXT: jr $ra223; MIPS32-NEXT: nop224entry:225 %xor = xor i32 %a, 1226 ret i32 %xor227}228 229define i32 @xor_not_imm32ZExt16(i32 %a) {230; MIPS32-LABEL: xor_not_imm32ZExt16:231; MIPS32: # %bb.0: # %entry232; MIPS32-NEXT: not $2, $4233; MIPS32-NEXT: jr $ra234; MIPS32-NEXT: nop235entry:236 %xor = xor i32 %a, -1237 ret i32 %xor238}239 240define i32 @shl(i32 %a) {241; MIPS32-LABEL: shl:242; MIPS32: # %bb.0: # %entry243; MIPS32-NEXT: sll $2, $4, 1244; MIPS32-NEXT: jr $ra245; MIPS32-NEXT: nop246entry:247 %shl = shl i32 %a, 1248 ret i32 %shl249}250 251define i32 @ashr(i32 %a) {252; MIPS32-LABEL: ashr:253; MIPS32: # %bb.0: # %entry254; MIPS32-NEXT: sra $2, $4, 1255; MIPS32-NEXT: jr $ra256; MIPS32-NEXT: nop257entry:258 %shr = ashr i32 %a, 1259 ret i32 %shr260}261 262define i32 @lshr(i32 %a) {263; MIPS32-LABEL: lshr:264; MIPS32: # %bb.0: # %entry265; MIPS32-NEXT: srl $2, $4, 1266; MIPS32-NEXT: jr $ra267; MIPS32-NEXT: nop268entry:269 %shr = lshr i32 %a, 1270 ret i32 %shr271}272 273define i32 @shlv(i32 %a, i32 %b) {274; MIPS32-LABEL: shlv:275; MIPS32: # %bb.0: # %entry276; MIPS32-NEXT: sllv $2, $4, $5277; MIPS32-NEXT: jr $ra278; MIPS32-NEXT: nop279entry:280 %shl = shl i32 %a, %b281 ret i32 %shl282}283 284define i32 @ashrv(i32 %a, i32 %b) {285; MIPS32-LABEL: ashrv:286; MIPS32: # %bb.0: # %entry287; MIPS32-NEXT: srav $2, $4, $5288; MIPS32-NEXT: jr $ra289; MIPS32-NEXT: nop290entry:291 %shr = ashr i32 %a, %b292 ret i32 %shr293}294 295define i32 @lshrv(i32 %a, i32 %b) {296; MIPS32-LABEL: lshrv:297; MIPS32: # %bb.0: # %entry298; MIPS32-NEXT: srlv $2, $4, $5299; MIPS32-NEXT: jr $ra300; MIPS32-NEXT: nop301entry:302 %shr = lshr i32 %a, %b303 ret i32 %shr304}305 306define i16 @shl_i16(i16 %a) {307; MIPS32-LABEL: shl_i16:308; MIPS32: # %bb.0: # %entry309; MIPS32-NEXT: sll $2, $4, 2310; MIPS32-NEXT: jr $ra311; MIPS32-NEXT: nop312entry:313 %shl = shl i16 %a, 2314 ret i16 %shl315}316 317define i8 @ashr_i8(i8 %a) {318; MIPS32-LABEL: ashr_i8:319; MIPS32: # %bb.0: # %entry320; MIPS32-NEXT: sll $1, $4, 24321; MIPS32-NEXT: sra $1, $1, 24322; MIPS32-NEXT: sra $2, $1, 2323; MIPS32-NEXT: jr $ra324; MIPS32-NEXT: nop325entry:326 %0 = ashr i8 %a, 2327 ret i8 %0328}329 330define i16 @lshr_i16(i16 %a) {331; MIPS32-LABEL: lshr_i16:332; MIPS32: # %bb.0: # %entry333; MIPS32-NEXT: andi $1, $4, 65535334; MIPS32-NEXT: srl $2, $1, 2335; MIPS32-NEXT: jr $ra336; MIPS32-NEXT: nop337entry:338 %0 = lshr i16 %a, 2339 ret i16 %0340}341 342define i64 @shl_i64(i64 %a, i64 %b) {343; MIPS32-LABEL: shl_i64:344; MIPS32: # %bb.0: # %entry345; MIPS32-NEXT: move $3, $4346; MIPS32-NEXT: ori $4, $zero, 32347; MIPS32-NEXT: subu $8, $6, $4348; MIPS32-NEXT: subu $1, $4, $6349; MIPS32-NEXT: ori $2, $zero, 0350; MIPS32-NEXT: sltu $4, $6, $4351; MIPS32-NEXT: sllv $7, $3, $6352; MIPS32-NEXT: srlv $1, $3, $1353; MIPS32-NEXT: sllv $9, $5, $6354; MIPS32-NEXT: or $1, $1, $9355; MIPS32-NEXT: sllv $3, $3, $8356; MIPS32-NEXT: movn $2, $7, $4357; MIPS32-NEXT: movn $3, $1, $4358; MIPS32-NEXT: movz $3, $5, $6359; MIPS32-NEXT: jr $ra360; MIPS32-NEXT: nop361entry:362 %shl = shl i64 %a, %b363 ret i64 %shl364}365 366define i64 @ashl_i64(i64 %a, i64 %b) {367; MIPS32-LABEL: ashl_i64:368; MIPS32: # %bb.0: # %entry369; MIPS32-NEXT: addiu $sp, $sp, -8370; MIPS32-NEXT: .cfi_def_cfa_offset 8371; MIPS32-NEXT: sw $4, 4($sp) # 4-byte Folded Spill372; MIPS32-NEXT: move $2, $5373; MIPS32-NEXT: lw $5, 4($sp) # 4-byte Folded Reload374; MIPS32-NEXT: ori $1, $zero, 32375; MIPS32-NEXT: subu $8, $6, $1376; MIPS32-NEXT: subu $7, $1, $6377; MIPS32-NEXT: sltu $4, $6, $1378; MIPS32-NEXT: srav $1, $2, $6379; MIPS32-NEXT: srlv $3, $5, $6380; MIPS32-NEXT: sllv $7, $2, $7381; MIPS32-NEXT: or $7, $3, $7382; MIPS32-NEXT: sra $3, $2, 31383; MIPS32-NEXT: srav $2, $2, $8384; MIPS32-NEXT: movn $2, $7, $4385; MIPS32-NEXT: movz $2, $5, $6386; MIPS32-NEXT: movn $3, $1, $4387; MIPS32-NEXT: addiu $sp, $sp, 8388; MIPS32-NEXT: jr $ra389; MIPS32-NEXT: nop390entry:391 %shr = ashr i64 %a, %b392 ret i64 %shr393}394 395define i64 @lshr_i64(i64 %a, i64 %b) {396; MIPS32-LABEL: lshr_i64:397; MIPS32: # %bb.0: # %entry398; MIPS32-NEXT: addiu $sp, $sp, -8399; MIPS32-NEXT: .cfi_def_cfa_offset 8400; MIPS32-NEXT: sw $4, 4($sp) # 4-byte Folded Spill401; MIPS32-NEXT: move $2, $5402; MIPS32-NEXT: lw $5, 4($sp) # 4-byte Folded Reload403; MIPS32-NEXT: ori $1, $zero, 32404; MIPS32-NEXT: subu $8, $6, $1405; MIPS32-NEXT: subu $9, $1, $6406; MIPS32-NEXT: ori $3, $zero, 0407; MIPS32-NEXT: sltu $4, $6, $1408; MIPS32-NEXT: srlv $1, $2, $6409; MIPS32-NEXT: srlv $7, $5, $6410; MIPS32-NEXT: sllv $9, $2, $9411; MIPS32-NEXT: or $7, $7, $9412; MIPS32-NEXT: srlv $2, $2, $8413; MIPS32-NEXT: movn $2, $7, $4414; MIPS32-NEXT: movz $2, $5, $6415; MIPS32-NEXT: movn $3, $1, $4416; MIPS32-NEXT: addiu $sp, $sp, 8417; MIPS32-NEXT: jr $ra418; MIPS32-NEXT: nop419entry:420 %shr = lshr i64 %a, %b421 ret i64 %shr422}423