185 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; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -mattr=+mips32r2 -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32R24 5declare i32 @llvm.bitreverse.i32(i32)6define i32 @bitreverse_i32(i32 signext %a) {7; MIPS32-LABEL: bitreverse_i32:8; MIPS32: # %bb.0: # %entry9; MIPS32-NEXT: sll $2, $4, 2410; MIPS32-NEXT: srl $1, $4, 2411; MIPS32-NEXT: or $1, $1, $212; MIPS32-NEXT: andi $2, $4, 6528013; MIPS32-NEXT: sll $2, $2, 814; MIPS32-NEXT: or $1, $1, $215; MIPS32-NEXT: srl $2, $4, 816; MIPS32-NEXT: andi $2, $2, 6528017; MIPS32-NEXT: or $2, $1, $218; MIPS32-NEXT: lui $1, 6168019; MIPS32-NEXT: ori $3, $1, 6168020; MIPS32-NEXT: and $1, $2, $321; MIPS32-NEXT: srl $1, $1, 422; MIPS32-NEXT: sll $2, $2, 423; MIPS32-NEXT: and $2, $2, $324; MIPS32-NEXT: or $2, $1, $225; MIPS32-NEXT: lui $1, 5242826; MIPS32-NEXT: ori $3, $1, 5242827; MIPS32-NEXT: and $1, $2, $328; MIPS32-NEXT: srl $1, $1, 229; MIPS32-NEXT: sll $2, $2, 230; MIPS32-NEXT: and $2, $2, $331; MIPS32-NEXT: or $2, $1, $232; MIPS32-NEXT: lui $1, 4369033; MIPS32-NEXT: ori $3, $1, 4369034; MIPS32-NEXT: and $1, $2, $335; MIPS32-NEXT: srl $1, $1, 136; MIPS32-NEXT: sll $2, $2, 137; MIPS32-NEXT: and $2, $2, $338; MIPS32-NEXT: or $2, $1, $239; MIPS32-NEXT: jr $ra40; MIPS32-NEXT: nop41;42; MIPS32R2-LABEL: bitreverse_i32:43; MIPS32R2: # %bb.0: # %entry44; MIPS32R2-NEXT: wsbh $1, $445; MIPS32R2-NEXT: rotr $2, $1, 1646; MIPS32R2-NEXT: lui $1, 6168047; MIPS32R2-NEXT: ori $3, $1, 6168048; MIPS32R2-NEXT: and $1, $2, $349; MIPS32R2-NEXT: srl $1, $1, 450; MIPS32R2-NEXT: sll $2, $2, 451; MIPS32R2-NEXT: and $2, $2, $352; MIPS32R2-NEXT: or $2, $1, $253; MIPS32R2-NEXT: lui $1, 5242854; MIPS32R2-NEXT: ori $3, $1, 5242855; MIPS32R2-NEXT: and $1, $2, $356; MIPS32R2-NEXT: srl $1, $1, 257; MIPS32R2-NEXT: sll $2, $2, 258; MIPS32R2-NEXT: and $2, $2, $359; MIPS32R2-NEXT: or $2, $1, $260; MIPS32R2-NEXT: lui $1, 4369061; MIPS32R2-NEXT: ori $3, $1, 4369062; MIPS32R2-NEXT: and $1, $2, $363; MIPS32R2-NEXT: srl $1, $1, 164; MIPS32R2-NEXT: sll $2, $2, 165; MIPS32R2-NEXT: and $2, $2, $366; MIPS32R2-NEXT: or $2, $1, $267; MIPS32R2-NEXT: jr $ra68; MIPS32R2-NEXT: nop69entry:70 %0 = call i32 @llvm.bitreverse.i32(i32 %a)71 ret i32 %072}73 74declare i64 @llvm.bitreverse.i64(i64)75define i64 @bitreverse_i64(i64 signext %a) {76; MIPS32-LABEL: bitreverse_i64:77; MIPS32: # %bb.0: # %entry78; MIPS32-NEXT: move $3, $479; MIPS32-NEXT: sll $2, $5, 2480; MIPS32-NEXT: srl $1, $5, 2481; MIPS32-NEXT: or $1, $1, $282; MIPS32-NEXT: andi $2, $5, 6528083; MIPS32-NEXT: sll $2, $2, 884; MIPS32-NEXT: or $1, $1, $285; MIPS32-NEXT: srl $2, $5, 886; MIPS32-NEXT: andi $2, $2, 6528087; MIPS32-NEXT: or $2, $1, $288; MIPS32-NEXT: lui $1, 6168089; MIPS32-NEXT: ori $6, $1, 6168090; MIPS32-NEXT: and $1, $2, $691; MIPS32-NEXT: srl $1, $1, 492; MIPS32-NEXT: sll $2, $2, 493; MIPS32-NEXT: and $2, $2, $694; MIPS32-NEXT: or $2, $1, $295; MIPS32-NEXT: lui $1, 5242896; MIPS32-NEXT: ori $5, $1, 5242897; MIPS32-NEXT: and $1, $2, $598; MIPS32-NEXT: srl $1, $1, 299; MIPS32-NEXT: sll $2, $2, 2100; MIPS32-NEXT: and $2, $2, $5101; MIPS32-NEXT: or $2, $1, $2102; MIPS32-NEXT: lui $1, 43690103; MIPS32-NEXT: ori $4, $1, 43690104; MIPS32-NEXT: and $1, $2, $4105; MIPS32-NEXT: srl $1, $1, 1106; MIPS32-NEXT: sll $2, $2, 1107; MIPS32-NEXT: and $2, $2, $4108; MIPS32-NEXT: or $2, $1, $2109; MIPS32-NEXT: sll $7, $3, 24110; MIPS32-NEXT: srl $1, $3, 24111; MIPS32-NEXT: or $1, $1, $7112; MIPS32-NEXT: andi $7, $3, 65280113; MIPS32-NEXT: sll $7, $7, 8114; MIPS32-NEXT: or $1, $1, $7115; MIPS32-NEXT: srl $3, $3, 8116; MIPS32-NEXT: andi $3, $3, 65280117; MIPS32-NEXT: or $3, $1, $3118; MIPS32-NEXT: and $1, $3, $6119; MIPS32-NEXT: srl $1, $1, 4120; MIPS32-NEXT: sll $3, $3, 4121; MIPS32-NEXT: and $3, $3, $6122; MIPS32-NEXT: or $3, $1, $3123; MIPS32-NEXT: and $1, $3, $5124; MIPS32-NEXT: srl $1, $1, 2125; MIPS32-NEXT: sll $3, $3, 2126; MIPS32-NEXT: and $3, $3, $5127; MIPS32-NEXT: or $3, $1, $3128; MIPS32-NEXT: and $1, $3, $4129; MIPS32-NEXT: srl $1, $1, 1130; MIPS32-NEXT: sll $3, $3, 1131; MIPS32-NEXT: and $3, $3, $4132; MIPS32-NEXT: or $3, $1, $3133; MIPS32-NEXT: jr $ra134; MIPS32-NEXT: nop135;136; MIPS32R2-LABEL: bitreverse_i64:137; MIPS32R2: # %bb.0: # %entry138; MIPS32R2-NEXT: move $1, $4139; MIPS32R2-NEXT: wsbh $2, $5140; MIPS32R2-NEXT: rotr $3, $2, 16141; MIPS32R2-NEXT: lui $2, 61680142; MIPS32R2-NEXT: ori $6, $2, 61680143; MIPS32R2-NEXT: and $2, $3, $6144; MIPS32R2-NEXT: srl $2, $2, 4145; MIPS32R2-NEXT: sll $3, $3, 4146; MIPS32R2-NEXT: and $3, $3, $6147; MIPS32R2-NEXT: or $3, $2, $3148; MIPS32R2-NEXT: lui $2, 52428149; MIPS32R2-NEXT: ori $5, $2, 52428150; MIPS32R2-NEXT: and $2, $3, $5151; MIPS32R2-NEXT: srl $2, $2, 2152; MIPS32R2-NEXT: sll $3, $3, 2153; MIPS32R2-NEXT: and $3, $3, $5154; MIPS32R2-NEXT: or $3, $2, $3155; MIPS32R2-NEXT: lui $2, 43690156; MIPS32R2-NEXT: ori $4, $2, 43690157; MIPS32R2-NEXT: and $2, $3, $4158; MIPS32R2-NEXT: srl $2, $2, 1159; MIPS32R2-NEXT: sll $3, $3, 1160; MIPS32R2-NEXT: and $3, $3, $4161; MIPS32R2-NEXT: or $2, $2, $3162; MIPS32R2-NEXT: wsbh $1, $1163; MIPS32R2-NEXT: rotr $3, $1, 16164; MIPS32R2-NEXT: and $1, $3, $6165; MIPS32R2-NEXT: srl $1, $1, 4166; MIPS32R2-NEXT: sll $3, $3, 4167; MIPS32R2-NEXT: and $3, $3, $6168; MIPS32R2-NEXT: or $3, $1, $3169; MIPS32R2-NEXT: and $1, $3, $5170; MIPS32R2-NEXT: srl $1, $1, 2171; MIPS32R2-NEXT: sll $3, $3, 2172; MIPS32R2-NEXT: and $3, $3, $5173; MIPS32R2-NEXT: or $3, $1, $3174; MIPS32R2-NEXT: and $1, $3, $4175; MIPS32R2-NEXT: srl $1, $1, 1176; MIPS32R2-NEXT: sll $3, $3, 1177; MIPS32R2-NEXT: and $3, $3, $4178; MIPS32R2-NEXT: or $3, $1, $3179; MIPS32R2-NEXT: jr $ra180; MIPS32R2-NEXT: nop181entry:182 %0 = call i64 @llvm.bitreverse.i64(i64 %a)183 ret i64 %0184}185