690 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d --verify-machineinstrs < %s \3; RUN: | FileCheck %s --check-prefix=LA32R4; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d --verify-machineinstrs < %s \5; RUN: | FileCheck %s --check-prefix=LA32S6; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs < %s \7; RUN: | FileCheck %s --check-prefix=LA648 9declare i7 @llvm.bitreverse.i7(i7)10declare i8 @llvm.bitreverse.i8(i8)11declare i16 @llvm.bitreverse.i16(i16)12declare i24 @llvm.bitreverse.i24(i24)13declare i32 @llvm.bitreverse.i32(i32)14declare i48 @llvm.bitreverse.i48(i48)15declare i64 @llvm.bitreverse.i64(i64)16declare i77 @llvm.bitreverse.i77(i77)17declare i128 @llvm.bitreverse.i128(i128)18 19define i8 @test_bitreverse_i8(i8 %a) nounwind {20; LA32R-LABEL: test_bitreverse_i8:21; LA32R: # %bb.0:22; LA32R-NEXT: andi $a1, $a0, 24023; LA32R-NEXT: andi $a0, $a0, 1524; LA32R-NEXT: slli.w $a0, $a0, 425; LA32R-NEXT: srli.w $a1, $a1, 426; LA32R-NEXT: or $a0, $a1, $a027; LA32R-NEXT: andi $a1, $a0, 5128; LA32R-NEXT: slli.w $a1, $a1, 229; LA32R-NEXT: srli.w $a0, $a0, 230; LA32R-NEXT: andi $a0, $a0, 5131; LA32R-NEXT: or $a0, $a0, $a132; LA32R-NEXT: andi $a1, $a0, 8533; LA32R-NEXT: slli.w $a1, $a1, 134; LA32R-NEXT: srli.w $a0, $a0, 135; LA32R-NEXT: andi $a0, $a0, 8536; LA32R-NEXT: or $a0, $a0, $a137; LA32R-NEXT: ret38;39; LA32S-LABEL: test_bitreverse_i8:40; LA32S: # %bb.0:41; LA32S-NEXT: bitrev.4b $a0, $a042; LA32S-NEXT: ret43;44; LA64-LABEL: test_bitreverse_i8:45; LA64: # %bb.0:46; LA64-NEXT: bitrev.4b $a0, $a047; LA64-NEXT: ret48 %tmp = call i8 @llvm.bitreverse.i8(i8 %a)49 ret i8 %tmp50}51 52define i16 @test_bitreverse_i16(i16 %a) nounwind {53; LA32R-LABEL: test_bitreverse_i16:54; LA32R: # %bb.0:55; LA32R-NEXT: lu12i.w $a1, 1556; LA32R-NEXT: ori $a1, $a1, 384057; LA32R-NEXT: and $a1, $a0, $a158; LA32R-NEXT: srli.w $a1, $a1, 859; LA32R-NEXT: slli.w $a0, $a0, 860; LA32R-NEXT: or $a0, $a0, $a161; LA32R-NEXT: andi $a1, $a0, 385562; LA32R-NEXT: slli.w $a1, $a1, 463; LA32R-NEXT: srli.w $a0, $a0, 464; LA32R-NEXT: andi $a0, $a0, 385565; LA32R-NEXT: or $a0, $a0, $a166; LA32R-NEXT: srli.w $a1, $a0, 267; LA32R-NEXT: lu12i.w $a2, 368; LA32R-NEXT: ori $a2, $a2, 81969; LA32R-NEXT: and $a1, $a1, $a270; LA32R-NEXT: and $a0, $a0, $a271; LA32R-NEXT: slli.w $a0, $a0, 272; LA32R-NEXT: or $a0, $a1, $a073; LA32R-NEXT: srli.w $a1, $a0, 174; LA32R-NEXT: lu12i.w $a2, 575; LA32R-NEXT: ori $a2, $a2, 136576; LA32R-NEXT: and $a1, $a1, $a277; LA32R-NEXT: and $a0, $a0, $a278; LA32R-NEXT: slli.w $a0, $a0, 179; LA32R-NEXT: or $a0, $a1, $a080; LA32R-NEXT: ret81;82; LA32S-LABEL: test_bitreverse_i16:83; LA32S: # %bb.0:84; LA32S-NEXT: bitrev.w $a0, $a085; LA32S-NEXT: srli.w $a0, $a0, 1686; LA32S-NEXT: ret87;88; LA64-LABEL: test_bitreverse_i16:89; LA64: # %bb.0:90; LA64-NEXT: bitrev.d $a0, $a091; LA64-NEXT: srli.d $a0, $a0, 4892; LA64-NEXT: ret93 %tmp = call i16 @llvm.bitreverse.i16(i16 %a)94 ret i16 %tmp95}96 97define i32 @test_bitreverse_i32(i32 %a) nounwind {98; LA32R-LABEL: test_bitreverse_i32:99; LA32R: # %bb.0:100; LA32R-NEXT: srli.w $a1, $a0, 8101; LA32R-NEXT: lu12i.w $a2, 15102; LA32R-NEXT: ori $a2, $a2, 3840103; LA32R-NEXT: and $a1, $a1, $a2104; LA32R-NEXT: srli.w $a3, $a0, 24105; LA32R-NEXT: or $a1, $a1, $a3106; LA32R-NEXT: and $a2, $a0, $a2107; LA32R-NEXT: slli.w $a2, $a2, 8108; LA32R-NEXT: slli.w $a0, $a0, 24109; LA32R-NEXT: or $a0, $a0, $a2110; LA32R-NEXT: or $a0, $a0, $a1111; LA32R-NEXT: srli.w $a1, $a0, 4112; LA32R-NEXT: lu12i.w $a2, 61680113; LA32R-NEXT: ori $a2, $a2, 3855114; LA32R-NEXT: and $a1, $a1, $a2115; LA32R-NEXT: and $a0, $a0, $a2116; LA32R-NEXT: slli.w $a0, $a0, 4117; LA32R-NEXT: or $a0, $a1, $a0118; LA32R-NEXT: srli.w $a1, $a0, 2119; LA32R-NEXT: lu12i.w $a2, 209715120; LA32R-NEXT: ori $a2, $a2, 819121; LA32R-NEXT: and $a1, $a1, $a2122; LA32R-NEXT: and $a0, $a0, $a2123; LA32R-NEXT: slli.w $a0, $a0, 2124; LA32R-NEXT: or $a0, $a1, $a0125; LA32R-NEXT: srli.w $a1, $a0, 1126; LA32R-NEXT: lu12i.w $a2, 349525127; LA32R-NEXT: ori $a2, $a2, 1365128; LA32R-NEXT: and $a1, $a1, $a2129; LA32R-NEXT: and $a0, $a0, $a2130; LA32R-NEXT: slli.w $a0, $a0, 1131; LA32R-NEXT: or $a0, $a1, $a0132; LA32R-NEXT: ret133;134; LA32S-LABEL: test_bitreverse_i32:135; LA32S: # %bb.0:136; LA32S-NEXT: bitrev.w $a0, $a0137; LA32S-NEXT: ret138;139; LA64-LABEL: test_bitreverse_i32:140; LA64: # %bb.0:141; LA64-NEXT: bitrev.w $a0, $a0142; LA64-NEXT: ret143 %tmp = call i32 @llvm.bitreverse.i32(i32 %a)144 ret i32 %tmp145}146 147define i64 @test_bitreverse_i64(i64 %a) nounwind {148; LA32R-LABEL: test_bitreverse_i64:149; LA32R: # %bb.0:150; LA32R-NEXT: srli.w $a2, $a1, 8151; LA32R-NEXT: lu12i.w $a3, 15152; LA32R-NEXT: ori $a3, $a3, 3840153; LA32R-NEXT: and $a2, $a2, $a3154; LA32R-NEXT: srli.w $a4, $a1, 24155; LA32R-NEXT: or $a2, $a2, $a4156; LA32R-NEXT: and $a4, $a1, $a3157; LA32R-NEXT: slli.w $a4, $a4, 8158; LA32R-NEXT: slli.w $a1, $a1, 24159; LA32R-NEXT: or $a1, $a1, $a4160; LA32R-NEXT: or $a1, $a1, $a2161; LA32R-NEXT: srli.w $a2, $a1, 4162; LA32R-NEXT: lu12i.w $a4, 61680163; LA32R-NEXT: ori $a4, $a4, 3855164; LA32R-NEXT: and $a2, $a2, $a4165; LA32R-NEXT: and $a1, $a1, $a4166; LA32R-NEXT: slli.w $a1, $a1, 4167; LA32R-NEXT: or $a1, $a2, $a1168; LA32R-NEXT: srli.w $a2, $a1, 2169; LA32R-NEXT: lu12i.w $a5, 209715170; LA32R-NEXT: ori $a5, $a5, 819171; LA32R-NEXT: and $a2, $a2, $a5172; LA32R-NEXT: and $a1, $a1, $a5173; LA32R-NEXT: slli.w $a1, $a1, 2174; LA32R-NEXT: or $a1, $a2, $a1175; LA32R-NEXT: srli.w $a2, $a1, 1176; LA32R-NEXT: lu12i.w $a6, 349525177; LA32R-NEXT: ori $a6, $a6, 1365178; LA32R-NEXT: and $a2, $a2, $a6179; LA32R-NEXT: and $a1, $a1, $a6180; LA32R-NEXT: slli.w $a1, $a1, 1181; LA32R-NEXT: or $a2, $a2, $a1182; LA32R-NEXT: srli.w $a1, $a0, 8183; LA32R-NEXT: and $a1, $a1, $a3184; LA32R-NEXT: srli.w $a7, $a0, 24185; LA32R-NEXT: or $a1, $a1, $a7186; LA32R-NEXT: and $a3, $a0, $a3187; LA32R-NEXT: slli.w $a3, $a3, 8188; LA32R-NEXT: slli.w $a0, $a0, 24189; LA32R-NEXT: or $a0, $a0, $a3190; LA32R-NEXT: or $a0, $a0, $a1191; LA32R-NEXT: srli.w $a1, $a0, 4192; LA32R-NEXT: and $a1, $a1, $a4193; LA32R-NEXT: and $a0, $a0, $a4194; LA32R-NEXT: slli.w $a0, $a0, 4195; LA32R-NEXT: or $a0, $a1, $a0196; LA32R-NEXT: srli.w $a1, $a0, 2197; LA32R-NEXT: and $a1, $a1, $a5198; LA32R-NEXT: and $a0, $a0, $a5199; LA32R-NEXT: slli.w $a0, $a0, 2200; LA32R-NEXT: or $a0, $a1, $a0201; LA32R-NEXT: srli.w $a1, $a0, 1202; LA32R-NEXT: and $a1, $a1, $a6203; LA32R-NEXT: and $a0, $a0, $a6204; LA32R-NEXT: slli.w $a0, $a0, 1205; LA32R-NEXT: or $a1, $a1, $a0206; LA32R-NEXT: move $a0, $a2207; LA32R-NEXT: ret208;209; LA32S-LABEL: test_bitreverse_i64:210; LA32S: # %bb.0:211; LA32S-NEXT: bitrev.w $a2, $a1212; LA32S-NEXT: bitrev.w $a1, $a0213; LA32S-NEXT: move $a0, $a2214; LA32S-NEXT: ret215;216; LA64-LABEL: test_bitreverse_i64:217; LA64: # %bb.0:218; LA64-NEXT: bitrev.d $a0, $a0219; LA64-NEXT: ret220 %tmp = call i64 @llvm.bitreverse.i64(i64 %a)221 ret i64 %tmp222}223 224;; Bitreverse on non-native integer widths.225 226define i7 @test_bitreverse_i7(i7 %a) nounwind {227; LA32R-LABEL: test_bitreverse_i7:228; LA32R: # %bb.0:229; LA32R-NEXT: srli.w $a1, $a0, 8230; LA32R-NEXT: lu12i.w $a2, 15231; LA32R-NEXT: ori $a2, $a2, 3840232; LA32R-NEXT: and $a1, $a1, $a2233; LA32R-NEXT: srli.w $a3, $a0, 24234; LA32R-NEXT: or $a1, $a1, $a3235; LA32R-NEXT: and $a2, $a0, $a2236; LA32R-NEXT: slli.w $a2, $a2, 8237; LA32R-NEXT: slli.w $a0, $a0, 24238; LA32R-NEXT: or $a0, $a0, $a2239; LA32R-NEXT: or $a0, $a0, $a1240; LA32R-NEXT: srli.w $a1, $a0, 4241; LA32R-NEXT: lu12i.w $a2, 61680242; LA32R-NEXT: ori $a2, $a2, 3855243; LA32R-NEXT: and $a1, $a1, $a2244; LA32R-NEXT: and $a0, $a0, $a2245; LA32R-NEXT: slli.w $a0, $a0, 4246; LA32R-NEXT: or $a0, $a1, $a0247; LA32R-NEXT: srli.w $a1, $a0, 2248; LA32R-NEXT: lu12i.w $a2, 209715249; LA32R-NEXT: ori $a2, $a2, 819250; LA32R-NEXT: and $a1, $a1, $a2251; LA32R-NEXT: and $a0, $a0, $a2252; LA32R-NEXT: slli.w $a0, $a0, 2253; LA32R-NEXT: or $a0, $a1, $a0254; LA32R-NEXT: srli.w $a1, $a0, 1255; LA32R-NEXT: lu12i.w $a2, 344064256; LA32R-NEXT: and $a1, $a1, $a2257; LA32R-NEXT: lu12i.w $a2, 348160258; LA32R-NEXT: and $a0, $a0, $a2259; LA32R-NEXT: slli.w $a0, $a0, 1260; LA32R-NEXT: or $a0, $a1, $a0261; LA32R-NEXT: srli.w $a0, $a0, 25262; LA32R-NEXT: ret263;264; LA32S-LABEL: test_bitreverse_i7:265; LA32S: # %bb.0:266; LA32S-NEXT: bitrev.w $a0, $a0267; LA32S-NEXT: srli.w $a0, $a0, 25268; LA32S-NEXT: ret269;270; LA64-LABEL: test_bitreverse_i7:271; LA64: # %bb.0:272; LA64-NEXT: bitrev.d $a0, $a0273; LA64-NEXT: srli.d $a0, $a0, 57274; LA64-NEXT: ret275 %tmp = call i7 @llvm.bitreverse.i7(i7 %a)276 ret i7 %tmp277}278 279define i24 @test_bitreverse_i24(i24 %a) nounwind {280; LA32R-LABEL: test_bitreverse_i24:281; LA32R: # %bb.0:282; LA32R-NEXT: srli.w $a1, $a0, 8283; LA32R-NEXT: lu12i.w $a2, 15284; LA32R-NEXT: ori $a2, $a2, 3840285; LA32R-NEXT: and $a1, $a1, $a2286; LA32R-NEXT: srli.w $a3, $a0, 24287; LA32R-NEXT: or $a1, $a1, $a3288; LA32R-NEXT: and $a2, $a0, $a2289; LA32R-NEXT: slli.w $a2, $a2, 8290; LA32R-NEXT: slli.w $a0, $a0, 24291; LA32R-NEXT: or $a0, $a0, $a2292; LA32R-NEXT: or $a0, $a0, $a1293; LA32R-NEXT: srli.w $a1, $a0, 4294; LA32R-NEXT: lu12i.w $a2, 61680295; LA32R-NEXT: ori $a2, $a2, 3855296; LA32R-NEXT: and $a1, $a1, $a2297; LA32R-NEXT: and $a0, $a0, $a2298; LA32R-NEXT: slli.w $a0, $a0, 4299; LA32R-NEXT: or $a0, $a1, $a0300; LA32R-NEXT: srli.w $a1, $a0, 2301; LA32R-NEXT: lu12i.w $a2, 209715302; LA32R-NEXT: ori $a2, $a2, 819303; LA32R-NEXT: and $a1, $a1, $a2304; LA32R-NEXT: and $a0, $a0, $a2305; LA32R-NEXT: slli.w $a0, $a0, 2306; LA32R-NEXT: or $a0, $a1, $a0307; LA32R-NEXT: srli.w $a1, $a0, 1308; LA32R-NEXT: lu12i.w $a2, 349525309; LA32R-NEXT: ori $a2, $a2, 1280310; LA32R-NEXT: and $a1, $a1, $a2311; LA32R-NEXT: and $a0, $a0, $a2312; LA32R-NEXT: slli.w $a0, $a0, 1313; LA32R-NEXT: or $a0, $a1, $a0314; LA32R-NEXT: srli.w $a0, $a0, 8315; LA32R-NEXT: ret316;317; LA32S-LABEL: test_bitreverse_i24:318; LA32S: # %bb.0:319; LA32S-NEXT: bitrev.w $a0, $a0320; LA32S-NEXT: srli.w $a0, $a0, 8321; LA32S-NEXT: ret322;323; LA64-LABEL: test_bitreverse_i24:324; LA64: # %bb.0:325; LA64-NEXT: bitrev.d $a0, $a0326; LA64-NEXT: srli.d $a0, $a0, 40327; LA64-NEXT: ret328 %tmp = call i24 @llvm.bitreverse.i24(i24 %a)329 ret i24 %tmp330}331 332define i48 @test_bitreverse_i48(i48 %a) nounwind {333; LA32R-LABEL: test_bitreverse_i48:334; LA32R: # %bb.0:335; LA32R-NEXT: srli.w $a2, $a0, 8336; LA32R-NEXT: lu12i.w $a3, 15337; LA32R-NEXT: ori $a3, $a3, 3840338; LA32R-NEXT: and $a2, $a2, $a3339; LA32R-NEXT: srli.w $a4, $a0, 24340; LA32R-NEXT: or $a2, $a2, $a4341; LA32R-NEXT: and $a4, $a0, $a3342; LA32R-NEXT: slli.w $a4, $a4, 8343; LA32R-NEXT: slli.w $a0, $a0, 24344; LA32R-NEXT: or $a0, $a0, $a4345; LA32R-NEXT: or $a0, $a0, $a2346; LA32R-NEXT: srli.w $a2, $a0, 4347; LA32R-NEXT: lu12i.w $a4, 61680348; LA32R-NEXT: ori $a4, $a4, 3855349; LA32R-NEXT: and $a2, $a2, $a4350; LA32R-NEXT: and $a0, $a0, $a4351; LA32R-NEXT: slli.w $a0, $a0, 4352; LA32R-NEXT: or $a0, $a2, $a0353; LA32R-NEXT: srli.w $a2, $a0, 2354; LA32R-NEXT: lu12i.w $a5, 209715355; LA32R-NEXT: ori $a5, $a5, 819356; LA32R-NEXT: and $a2, $a2, $a5357; LA32R-NEXT: and $a0, $a0, $a5358; LA32R-NEXT: slli.w $a0, $a0, 2359; LA32R-NEXT: or $a0, $a2, $a0360; LA32R-NEXT: srli.w $a2, $a0, 1361; LA32R-NEXT: lu12i.w $a6, 349525362; LA32R-NEXT: ori $a6, $a6, 1365363; LA32R-NEXT: and $a2, $a2, $a6364; LA32R-NEXT: and $a0, $a0, $a6365; LA32R-NEXT: slli.w $a0, $a0, 1366; LA32R-NEXT: or $a2, $a2, $a0367; LA32R-NEXT: slli.w $a0, $a2, 16368; LA32R-NEXT: srli.w $a6, $a1, 8369; LA32R-NEXT: and $a6, $a6, $a3370; LA32R-NEXT: srli.w $a7, $a1, 24371; LA32R-NEXT: or $a6, $a6, $a7372; LA32R-NEXT: and $a3, $a1, $a3373; LA32R-NEXT: slli.w $a3, $a3, 8374; LA32R-NEXT: slli.w $a1, $a1, 24375; LA32R-NEXT: or $a1, $a1, $a3376; LA32R-NEXT: or $a1, $a1, $a6377; LA32R-NEXT: srli.w $a3, $a1, 4378; LA32R-NEXT: and $a3, $a3, $a4379; LA32R-NEXT: and $a1, $a1, $a4380; LA32R-NEXT: slli.w $a1, $a1, 4381; LA32R-NEXT: or $a1, $a3, $a1382; LA32R-NEXT: srli.w $a3, $a1, 2383; LA32R-NEXT: and $a3, $a3, $a5384; LA32R-NEXT: and $a1, $a1, $a5385; LA32R-NEXT: slli.w $a1, $a1, 2386; LA32R-NEXT: or $a1, $a3, $a1387; LA32R-NEXT: srli.w $a3, $a1, 1388; LA32R-NEXT: lu12i.w $a4, 349520389; LA32R-NEXT: and $a3, $a3, $a4390; LA32R-NEXT: and $a1, $a1, $a4391; LA32R-NEXT: slli.w $a1, $a1, 1392; LA32R-NEXT: or $a1, $a3, $a1393; LA32R-NEXT: srli.w $a1, $a1, 16394; LA32R-NEXT: or $a0, $a1, $a0395; LA32R-NEXT: srli.w $a1, $a2, 16396; LA32R-NEXT: ret397;398; LA32S-LABEL: test_bitreverse_i48:399; LA32S: # %bb.0:400; LA32S-NEXT: bitrev.w $a2, $a0401; LA32S-NEXT: bitrev.w $a0, $a1402; LA32S-NEXT: bytepick.w $a0, $a0, $a2, 2403; LA32S-NEXT: srli.w $a1, $a2, 16404; LA32S-NEXT: ret405;406; LA64-LABEL: test_bitreverse_i48:407; LA64: # %bb.0:408; LA64-NEXT: bitrev.d $a0, $a0409; LA64-NEXT: srli.d $a0, $a0, 16410; LA64-NEXT: ret411 %tmp = call i48 @llvm.bitreverse.i48(i48 %a)412 ret i48 %tmp413}414 415define i77 @test_bitreverse_i77(i77 %a) nounwind {416; LA32R-LABEL: test_bitreverse_i77:417; LA32R: # %bb.0:418; LA32R-NEXT: ld.w $a3, $a1, 4419; LA32R-NEXT: ld.w $a2, $a1, 0420; LA32R-NEXT: ld.w $a5, $a1, 8421; LA32R-NEXT: srli.w $a4, $a3, 8422; LA32R-NEXT: lu12i.w $a1, 15423; LA32R-NEXT: ori $a1, $a1, 3840424; LA32R-NEXT: and $a4, $a4, $a1425; LA32R-NEXT: srli.w $a6, $a3, 24426; LA32R-NEXT: or $a4, $a4, $a6427; LA32R-NEXT: and $a6, $a3, $a1428; LA32R-NEXT: slli.w $a6, $a6, 8429; LA32R-NEXT: slli.w $a3, $a3, 24430; LA32R-NEXT: or $a3, $a3, $a6431; LA32R-NEXT: or $a4, $a3, $a4432; LA32R-NEXT: srli.w $a6, $a4, 4433; LA32R-NEXT: lu12i.w $a3, 61680434; LA32R-NEXT: ori $a3, $a3, 3855435; LA32R-NEXT: and $a6, $a6, $a3436; LA32R-NEXT: and $a4, $a4, $a3437; LA32R-NEXT: slli.w $a4, $a4, 4438; LA32R-NEXT: or $a6, $a6, $a4439; LA32R-NEXT: srli.w $a7, $a6, 2440; LA32R-NEXT: lu12i.w $a4, 209715441; LA32R-NEXT: ori $a4, $a4, 819442; LA32R-NEXT: and $a7, $a7, $a4443; LA32R-NEXT: and $a6, $a6, $a4444; LA32R-NEXT: slli.w $a6, $a6, 2445; LA32R-NEXT: or $a6, $a7, $a6446; LA32R-NEXT: srli.w $a7, $a6, 1447; LA32R-NEXT: lu12i.w $t0, 349525448; LA32R-NEXT: ori $t0, $t0, 1365449; LA32R-NEXT: and $a7, $a7, $t0450; LA32R-NEXT: and $a6, $a6, $t0451; LA32R-NEXT: slli.w $a6, $a6, 1452; LA32R-NEXT: or $a6, $a7, $a6453; LA32R-NEXT: slli.w $a7, $a6, 13454; LA32R-NEXT: srli.w $t1, $a5, 8455; LA32R-NEXT: and $t1, $t1, $a1456; LA32R-NEXT: srli.w $t2, $a5, 24457; LA32R-NEXT: or $t1, $t1, $t2458; LA32R-NEXT: and $t2, $a5, $a1459; LA32R-NEXT: slli.w $t2, $t2, 8460; LA32R-NEXT: slli.w $a5, $a5, 24461; LA32R-NEXT: or $a5, $a5, $t2462; LA32R-NEXT: or $a5, $a5, $t1463; LA32R-NEXT: srli.w $t1, $a5, 4464; LA32R-NEXT: and $t1, $t1, $a3465; LA32R-NEXT: and $a5, $a5, $a3466; LA32R-NEXT: slli.w $a5, $a5, 4467; LA32R-NEXT: or $a5, $t1, $a5468; LA32R-NEXT: srli.w $t1, $a5, 2469; LA32R-NEXT: and $t1, $t1, $a4470; LA32R-NEXT: and $a5, $a5, $a4471; LA32R-NEXT: slli.w $a5, $a5, 2472; LA32R-NEXT: or $a5, $t1, $a5473; LA32R-NEXT: srli.w $t1, $a5, 1474; LA32R-NEXT: lu12i.w $t2, 349440475; LA32R-NEXT: and $t1, $t1, $t2476; LA32R-NEXT: lu12i.w $t2, 349504477; LA32R-NEXT: and $a5, $a5, $t2478; LA32R-NEXT: slli.w $a5, $a5, 1479; LA32R-NEXT: or $a5, $t1, $a5480; LA32R-NEXT: srli.w $a5, $a5, 19481; LA32R-NEXT: or $a5, $a5, $a7482; LA32R-NEXT: srli.w $a6, $a6, 19483; LA32R-NEXT: srli.w $a7, $a2, 8484; LA32R-NEXT: and $a7, $a7, $a1485; LA32R-NEXT: srli.w $t1, $a2, 24486; LA32R-NEXT: or $a7, $a7, $t1487; LA32R-NEXT: and $a1, $a2, $a1488; LA32R-NEXT: slli.w $a1, $a1, 8489; LA32R-NEXT: slli.w $a2, $a2, 24490; LA32R-NEXT: or $a1, $a2, $a1491; LA32R-NEXT: or $a1, $a1, $a7492; LA32R-NEXT: srli.w $a2, $a1, 4493; LA32R-NEXT: and $a2, $a2, $a3494; LA32R-NEXT: and $a1, $a1, $a3495; LA32R-NEXT: slli.w $a1, $a1, 4496; LA32R-NEXT: or $a1, $a2, $a1497; LA32R-NEXT: srli.w $a2, $a1, 2498; LA32R-NEXT: and $a2, $a2, $a4499; LA32R-NEXT: and $a1, $a1, $a4500; LA32R-NEXT: slli.w $a1, $a1, 2501; LA32R-NEXT: or $a1, $a2, $a1502; LA32R-NEXT: srli.w $a2, $a1, 1503; LA32R-NEXT: and $a2, $a2, $t0504; LA32R-NEXT: and $a1, $a1, $t0505; LA32R-NEXT: slli.w $a1, $a1, 1506; LA32R-NEXT: or $a1, $a2, $a1507; LA32R-NEXT: slli.w $a2, $a1, 13508; LA32R-NEXT: or $a2, $a2, $a6509; LA32R-NEXT: srli.w $a1, $a1, 19510; LA32R-NEXT: st.h $a1, $a0, 8511; LA32R-NEXT: st.w $a2, $a0, 4512; LA32R-NEXT: st.w $a5, $a0, 0513; LA32R-NEXT: ret514;515; LA32S-LABEL: test_bitreverse_i77:516; LA32S: # %bb.0:517; LA32S-NEXT: ld.w $a2, $a1, 4518; LA32S-NEXT: ld.w $a3, $a1, 8519; LA32S-NEXT: ld.w $a1, $a1, 0520; LA32S-NEXT: bitrev.w $a2, $a2521; LA32S-NEXT: slli.w $a4, $a2, 13522; LA32S-NEXT: bitrev.w $a3, $a3523; LA32S-NEXT: srli.w $a3, $a3, 19524; LA32S-NEXT: or $a3, $a3, $a4525; LA32S-NEXT: srli.w $a2, $a2, 19526; LA32S-NEXT: bitrev.w $a1, $a1527; LA32S-NEXT: slli.w $a4, $a1, 13528; LA32S-NEXT: or $a2, $a4, $a2529; LA32S-NEXT: srli.w $a1, $a1, 19530; LA32S-NEXT: st.h $a1, $a0, 8531; LA32S-NEXT: st.w $a2, $a0, 4532; LA32S-NEXT: st.w $a3, $a0, 0533; LA32S-NEXT: ret534;535; LA64-LABEL: test_bitreverse_i77:536; LA64: # %bb.0:537; LA64-NEXT: bitrev.d $a2, $a0538; LA64-NEXT: slli.d $a0, $a2, 13539; LA64-NEXT: bitrev.d $a1, $a1540; LA64-NEXT: srli.d $a1, $a1, 51541; LA64-NEXT: or $a0, $a1, $a0542; LA64-NEXT: srli.d $a1, $a2, 51543; LA64-NEXT: ret544 %tmp = call i77 @llvm.bitreverse.i77(i77 %a)545 ret i77 %tmp546}547 548define i128 @test_bitreverse_i128(i128 %a) nounwind {549; LA32R-LABEL: test_bitreverse_i128:550; LA32R: # %bb.0:551; LA32R-NEXT: ld.w $a3, $a1, 12552; LA32R-NEXT: ld.w $a2, $a1, 0553; LA32R-NEXT: ld.w $a7, $a1, 4554; LA32R-NEXT: ld.w $t0, $a1, 8555; LA32R-NEXT: srli.w $a4, $a3, 8556; LA32R-NEXT: lu12i.w $a1, 15557; LA32R-NEXT: ori $a1, $a1, 3840558; LA32R-NEXT: and $a4, $a4, $a1559; LA32R-NEXT: srli.w $a5, $a3, 24560; LA32R-NEXT: or $a4, $a4, $a5561; LA32R-NEXT: and $a5, $a3, $a1562; LA32R-NEXT: slli.w $a5, $a5, 8563; LA32R-NEXT: slli.w $a3, $a3, 24564; LA32R-NEXT: or $a3, $a3, $a5565; LA32R-NEXT: or $a4, $a3, $a4566; LA32R-NEXT: srli.w $a5, $a4, 4567; LA32R-NEXT: lu12i.w $a3, 61680568; LA32R-NEXT: ori $a3, $a3, 3855569; LA32R-NEXT: and $a5, $a5, $a3570; LA32R-NEXT: and $a4, $a4, $a3571; LA32R-NEXT: slli.w $a4, $a4, 4572; LA32R-NEXT: or $a5, $a5, $a4573; LA32R-NEXT: srli.w $a6, $a5, 2574; LA32R-NEXT: lu12i.w $a4, 209715575; LA32R-NEXT: ori $a4, $a4, 819576; LA32R-NEXT: and $a6, $a6, $a4577; LA32R-NEXT: and $a5, $a5, $a4578; LA32R-NEXT: slli.w $a5, $a5, 2579; LA32R-NEXT: or $a5, $a6, $a5580; LA32R-NEXT: srli.w $t1, $a5, 1581; LA32R-NEXT: lu12i.w $a6, 349525582; LA32R-NEXT: ori $a6, $a6, 1365583; LA32R-NEXT: and $t1, $t1, $a6584; LA32R-NEXT: and $a5, $a5, $a6585; LA32R-NEXT: slli.w $a5, $a5, 1586; LA32R-NEXT: or $a5, $t1, $a5587; LA32R-NEXT: srli.w $t1, $t0, 8588; LA32R-NEXT: and $t1, $t1, $a1589; LA32R-NEXT: srli.w $t2, $t0, 24590; LA32R-NEXT: or $t1, $t1, $t2591; LA32R-NEXT: and $t2, $t0, $a1592; LA32R-NEXT: slli.w $t2, $t2, 8593; LA32R-NEXT: slli.w $t0, $t0, 24594; LA32R-NEXT: or $t0, $t0, $t2595; LA32R-NEXT: or $t0, $t0, $t1596; LA32R-NEXT: srli.w $t1, $t0, 4597; LA32R-NEXT: and $t1, $t1, $a3598; LA32R-NEXT: and $t0, $t0, $a3599; LA32R-NEXT: slli.w $t0, $t0, 4600; LA32R-NEXT: or $t0, $t1, $t0601; LA32R-NEXT: srli.w $t1, $t0, 2602; LA32R-NEXT: and $t1, $t1, $a4603; LA32R-NEXT: and $t0, $t0, $a4604; LA32R-NEXT: slli.w $t0, $t0, 2605; LA32R-NEXT: or $t0, $t1, $t0606; LA32R-NEXT: srli.w $t1, $t0, 1607; LA32R-NEXT: and $t1, $t1, $a6608; LA32R-NEXT: and $t0, $t0, $a6609; LA32R-NEXT: slli.w $t0, $t0, 1610; LA32R-NEXT: or $t0, $t1, $t0611; LA32R-NEXT: srli.w $t1, $a7, 8612; LA32R-NEXT: and $t1, $t1, $a1613; LA32R-NEXT: srli.w $t2, $a7, 24614; LA32R-NEXT: or $t1, $t1, $t2615; LA32R-NEXT: and $t2, $a7, $a1616; LA32R-NEXT: slli.w $t2, $t2, 8617; LA32R-NEXT: slli.w $a7, $a7, 24618; LA32R-NEXT: or $a7, $a7, $t2619; LA32R-NEXT: or $a7, $a7, $t1620; LA32R-NEXT: srli.w $t1, $a7, 4621; LA32R-NEXT: and $t1, $t1, $a3622; LA32R-NEXT: and $a7, $a7, $a3623; LA32R-NEXT: slli.w $a7, $a7, 4624; LA32R-NEXT: or $a7, $t1, $a7625; LA32R-NEXT: srli.w $t1, $a7, 2626; LA32R-NEXT: and $t1, $t1, $a4627; LA32R-NEXT: and $a7, $a7, $a4628; LA32R-NEXT: slli.w $a7, $a7, 2629; LA32R-NEXT: or $a7, $t1, $a7630; LA32R-NEXT: srli.w $t1, $a7, 1631; LA32R-NEXT: and $t1, $t1, $a6632; LA32R-NEXT: and $a7, $a7, $a6633; LA32R-NEXT: slli.w $a7, $a7, 1634; LA32R-NEXT: or $a7, $t1, $a7635; LA32R-NEXT: srli.w $t1, $a2, 8636; LA32R-NEXT: and $t1, $t1, $a1637; LA32R-NEXT: srli.w $t2, $a2, 24638; LA32R-NEXT: or $t1, $t1, $t2639; LA32R-NEXT: and $a1, $a2, $a1640; LA32R-NEXT: slli.w $a1, $a1, 8641; LA32R-NEXT: slli.w $a2, $a2, 24642; LA32R-NEXT: or $a1, $a2, $a1643; LA32R-NEXT: or $a1, $a1, $t1644; LA32R-NEXT: srli.w $a2, $a1, 4645; LA32R-NEXT: and $a2, $a2, $a3646; LA32R-NEXT: and $a1, $a1, $a3647; LA32R-NEXT: slli.w $a1, $a1, 4648; LA32R-NEXT: or $a1, $a2, $a1649; LA32R-NEXT: srli.w $a2, $a1, 2650; LA32R-NEXT: and $a2, $a2, $a4651; LA32R-NEXT: and $a1, $a1, $a4652; LA32R-NEXT: slli.w $a1, $a1, 2653; LA32R-NEXT: or $a1, $a2, $a1654; LA32R-NEXT: srli.w $a2, $a1, 1655; LA32R-NEXT: and $a2, $a2, $a6656; LA32R-NEXT: and $a1, $a1, $a6657; LA32R-NEXT: slli.w $a1, $a1, 1658; LA32R-NEXT: or $a1, $a2, $a1659; LA32R-NEXT: st.w $a1, $a0, 12660; LA32R-NEXT: st.w $a7, $a0, 8661; LA32R-NEXT: st.w $t0, $a0, 4662; LA32R-NEXT: st.w $a5, $a0, 0663; LA32R-NEXT: ret664;665; LA32S-LABEL: test_bitreverse_i128:666; LA32S: # %bb.0:667; LA32S-NEXT: ld.w $a2, $a1, 12668; LA32S-NEXT: ld.w $a3, $a1, 8669; LA32S-NEXT: ld.w $a4, $a1, 4670; LA32S-NEXT: ld.w $a1, $a1, 0671; LA32S-NEXT: bitrev.w $a2, $a2672; LA32S-NEXT: bitrev.w $a3, $a3673; LA32S-NEXT: bitrev.w $a4, $a4674; LA32S-NEXT: bitrev.w $a1, $a1675; LA32S-NEXT: st.w $a1, $a0, 12676; LA32S-NEXT: st.w $a4, $a0, 8677; LA32S-NEXT: st.w $a3, $a0, 4678; LA32S-NEXT: st.w $a2, $a0, 0679; LA32S-NEXT: ret680;681; LA64-LABEL: test_bitreverse_i128:682; LA64: # %bb.0:683; LA64-NEXT: bitrev.d $a2, $a1684; LA64-NEXT: bitrev.d $a1, $a0685; LA64-NEXT: move $a0, $a2686; LA64-NEXT: ret687 %tmp = call i128 @llvm.bitreverse.i128(i128 %a)688 ret i128 %tmp689}690