brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.9 KiB · 50f35b3 Raw
323 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 i16 @llvm.bitreverse.i16(i16)10declare i32 @llvm.bitreverse.i32(i32)11declare i64 @llvm.bitreverse.i64(i64)12declare i16 @llvm.bswap.i16(i16)13declare i32 @llvm.bswap.i32(i32)14declare i64 @llvm.bswap.i64(i64)15 16define i16 @test_bswap_bitreverse_i16(i16 %a) nounwind {17; LA32R-LABEL: test_bswap_bitreverse_i16:18; LA32R:       # %bb.0:19; LA32R-NEXT:    andi $a1, $a0, 385520; LA32R-NEXT:    slli.w $a1, $a1, 421; LA32R-NEXT:    srli.w $a0, $a0, 422; LA32R-NEXT:    andi $a0, $a0, 385523; LA32R-NEXT:    or $a0, $a0, $a124; LA32R-NEXT:    srli.w $a1, $a0, 225; LA32R-NEXT:    lu12i.w $a2, 326; LA32R-NEXT:    ori $a2, $a2, 81927; LA32R-NEXT:    and $a1, $a1, $a228; LA32R-NEXT:    and $a0, $a0, $a229; LA32R-NEXT:    slli.w $a0, $a0, 230; LA32R-NEXT:    or $a0, $a1, $a031; LA32R-NEXT:    srli.w $a1, $a0, 132; LA32R-NEXT:    lu12i.w $a2, 533; LA32R-NEXT:    ori $a2, $a2, 136534; LA32R-NEXT:    and $a1, $a1, $a235; LA32R-NEXT:    and $a0, $a0, $a236; LA32R-NEXT:    slli.w $a0, $a0, 137; LA32R-NEXT:    or $a0, $a1, $a038; LA32R-NEXT:    ret39;40; LA32S-LABEL: test_bswap_bitreverse_i16:41; LA32S:       # %bb.0:42; LA32S-NEXT:    revb.2h $a0, $a043; LA32S-NEXT:    bitrev.w $a0, $a044; LA32S-NEXT:    srli.w $a0, $a0, 1645; LA32S-NEXT:    ret46;47; LA64-LABEL: test_bswap_bitreverse_i16:48; LA64:       # %bb.0:49; LA64-NEXT:    revb.2h $a0, $a050; LA64-NEXT:    bitrev.d $a0, $a051; LA64-NEXT:    srli.d $a0, $a0, 4852; LA64-NEXT:    ret53  %tmp = call i16 @llvm.bswap.i16(i16 %a)54  %tmp2 = call i16 @llvm.bitreverse.i16(i16 %tmp)55  ret i16 %tmp256}57 58define i32 @test_bswap_bitreverse_i32(i32 %a) nounwind {59; LA32R-LABEL: test_bswap_bitreverse_i32:60; LA32R:       # %bb.0:61; LA32R-NEXT:    srli.w $a1, $a0, 462; LA32R-NEXT:    lu12i.w $a2, 6168063; LA32R-NEXT:    ori $a2, $a2, 385564; LA32R-NEXT:    and $a1, $a1, $a265; LA32R-NEXT:    and $a0, $a0, $a266; LA32R-NEXT:    slli.w $a0, $a0, 467; LA32R-NEXT:    or $a0, $a1, $a068; LA32R-NEXT:    srli.w $a1, $a0, 269; LA32R-NEXT:    lu12i.w $a2, 20971570; LA32R-NEXT:    ori $a2, $a2, 81971; LA32R-NEXT:    and $a1, $a1, $a272; LA32R-NEXT:    and $a0, $a0, $a273; LA32R-NEXT:    slli.w $a0, $a0, 274; LA32R-NEXT:    or $a0, $a1, $a075; LA32R-NEXT:    srli.w $a1, $a0, 176; LA32R-NEXT:    lu12i.w $a2, 34952577; LA32R-NEXT:    ori $a2, $a2, 136578; LA32R-NEXT:    and $a1, $a1, $a279; LA32R-NEXT:    and $a0, $a0, $a280; LA32R-NEXT:    slli.w $a0, $a0, 181; LA32R-NEXT:    or $a0, $a1, $a082; LA32R-NEXT:    ret83;84; LA32S-LABEL: test_bswap_bitreverse_i32:85; LA32S:       # %bb.0:86; LA32S-NEXT:    bitrev.4b $a0, $a087; LA32S-NEXT:    ret88;89; LA64-LABEL: test_bswap_bitreverse_i32:90; LA64:       # %bb.0:91; LA64-NEXT:    bitrev.4b $a0, $a092; LA64-NEXT:    ret93  %tmp = call i32 @llvm.bswap.i32(i32 %a)94  %tmp2 = call i32 @llvm.bitreverse.i32(i32 %tmp)95  ret i32 %tmp296}97 98define i64 @test_bswap_bitreverse_i64(i64 %a) nounwind {99; LA32R-LABEL: test_bswap_bitreverse_i64:100; LA32R:       # %bb.0:101; LA32R-NEXT:    srli.w $a2, $a0, 4102; LA32R-NEXT:    lu12i.w $a3, 61680103; LA32R-NEXT:    ori $a3, $a3, 3855104; LA32R-NEXT:    and $a2, $a2, $a3105; LA32R-NEXT:    and $a0, $a0, $a3106; LA32R-NEXT:    slli.w $a0, $a0, 4107; LA32R-NEXT:    or $a0, $a2, $a0108; LA32R-NEXT:    srli.w $a2, $a0, 2109; LA32R-NEXT:    lu12i.w $a4, 209715110; LA32R-NEXT:    ori $a4, $a4, 819111; LA32R-NEXT:    and $a2, $a2, $a4112; LA32R-NEXT:    and $a0, $a0, $a4113; LA32R-NEXT:    slli.w $a0, $a0, 2114; LA32R-NEXT:    or $a0, $a2, $a0115; LA32R-NEXT:    srli.w $a2, $a0, 1116; LA32R-NEXT:    lu12i.w $a5, 349525117; LA32R-NEXT:    ori $a5, $a5, 1365118; LA32R-NEXT:    and $a2, $a2, $a5119; LA32R-NEXT:    and $a0, $a0, $a5120; LA32R-NEXT:    slli.w $a0, $a0, 1121; LA32R-NEXT:    or $a0, $a2, $a0122; LA32R-NEXT:    srli.w $a2, $a1, 4123; LA32R-NEXT:    and $a2, $a2, $a3124; LA32R-NEXT:    and $a1, $a1, $a3125; LA32R-NEXT:    slli.w $a1, $a1, 4126; LA32R-NEXT:    or $a1, $a2, $a1127; LA32R-NEXT:    srli.w $a2, $a1, 2128; LA32R-NEXT:    and $a2, $a2, $a4129; LA32R-NEXT:    and $a1, $a1, $a4130; LA32R-NEXT:    slli.w $a1, $a1, 2131; LA32R-NEXT:    or $a1, $a2, $a1132; LA32R-NEXT:    srli.w $a2, $a1, 1133; LA32R-NEXT:    and $a2, $a2, $a5134; LA32R-NEXT:    and $a1, $a1, $a5135; LA32R-NEXT:    slli.w $a1, $a1, 1136; LA32R-NEXT:    or $a1, $a2, $a1137; LA32R-NEXT:    ret138;139; LA32S-LABEL: test_bswap_bitreverse_i64:140; LA32S:       # %bb.0:141; LA32S-NEXT:    bitrev.4b $a0, $a0142; LA32S-NEXT:    bitrev.4b $a1, $a1143; LA32S-NEXT:    ret144;145; LA64-LABEL: test_bswap_bitreverse_i64:146; LA64:       # %bb.0:147; LA64-NEXT:    bitrev.8b $a0, $a0148; LA64-NEXT:    ret149  %tmp = call i64 @llvm.bswap.i64(i64 %a)150  %tmp2 = call i64 @llvm.bitreverse.i64(i64 %tmp)151  ret i64 %tmp2152}153 154define i16 @test_bitreverse_bswap_i16(i16 %a) nounwind {155; LA32R-LABEL: test_bitreverse_bswap_i16:156; LA32R:       # %bb.0:157; LA32R-NEXT:    andi $a1, $a0, 3855158; LA32R-NEXT:    slli.w $a1, $a1, 4159; LA32R-NEXT:    srli.w $a0, $a0, 4160; LA32R-NEXT:    andi $a0, $a0, 3855161; LA32R-NEXT:    or $a0, $a0, $a1162; LA32R-NEXT:    srli.w $a1, $a0, 2163; LA32R-NEXT:    lu12i.w $a2, 3164; LA32R-NEXT:    ori $a2, $a2, 819165; LA32R-NEXT:    and $a1, $a1, $a2166; LA32R-NEXT:    and $a0, $a0, $a2167; LA32R-NEXT:    slli.w $a0, $a0, 2168; LA32R-NEXT:    or $a0, $a1, $a0169; LA32R-NEXT:    srli.w $a1, $a0, 1170; LA32R-NEXT:    lu12i.w $a2, 5171; LA32R-NEXT:    ori $a2, $a2, 1365172; LA32R-NEXT:    and $a1, $a1, $a2173; LA32R-NEXT:    and $a0, $a0, $a2174; LA32R-NEXT:    slli.w $a0, $a0, 1175; LA32R-NEXT:    or $a0, $a1, $a0176; LA32R-NEXT:    ret177;178; LA32S-LABEL: test_bitreverse_bswap_i16:179; LA32S:       # %bb.0:180; LA32S-NEXT:    revb.2h $a0, $a0181; LA32S-NEXT:    bitrev.w $a0, $a0182; LA32S-NEXT:    srli.w $a0, $a0, 16183; LA32S-NEXT:    ret184;185; LA64-LABEL: test_bitreverse_bswap_i16:186; LA64:       # %bb.0:187; LA64-NEXT:    revb.2h $a0, $a0188; LA64-NEXT:    bitrev.d $a0, $a0189; LA64-NEXT:    srli.d $a0, $a0, 48190; LA64-NEXT:    ret191  %tmp = call i16 @llvm.bitreverse.i16(i16 %a)192  %tmp2 = call i16 @llvm.bswap.i16(i16 %tmp)193  ret i16 %tmp2194}195 196define i32 @test_bitreverse_bswap_i32(i32 %a) nounwind {197; LA32R-LABEL: test_bitreverse_bswap_i32:198; LA32R:       # %bb.0:199; LA32R-NEXT:    srli.w $a1, $a0, 4200; LA32R-NEXT:    lu12i.w $a2, 61680201; LA32R-NEXT:    ori $a2, $a2, 3855202; LA32R-NEXT:    and $a1, $a1, $a2203; LA32R-NEXT:    and $a0, $a0, $a2204; LA32R-NEXT:    slli.w $a0, $a0, 4205; LA32R-NEXT:    or $a0, $a1, $a0206; LA32R-NEXT:    srli.w $a1, $a0, 2207; LA32R-NEXT:    lu12i.w $a2, 209715208; LA32R-NEXT:    ori $a2, $a2, 819209; LA32R-NEXT:    and $a1, $a1, $a2210; LA32R-NEXT:    and $a0, $a0, $a2211; LA32R-NEXT:    slli.w $a0, $a0, 2212; LA32R-NEXT:    or $a0, $a1, $a0213; LA32R-NEXT:    srli.w $a1, $a0, 1214; LA32R-NEXT:    lu12i.w $a2, 349525215; LA32R-NEXT:    ori $a2, $a2, 1365216; LA32R-NEXT:    and $a1, $a1, $a2217; LA32R-NEXT:    and $a0, $a0, $a2218; LA32R-NEXT:    slli.w $a0, $a0, 1219; LA32R-NEXT:    or $a0, $a1, $a0220; LA32R-NEXT:    ret221;222; LA32S-LABEL: test_bitreverse_bswap_i32:223; LA32S:       # %bb.0:224; LA32S-NEXT:    bitrev.4b $a0, $a0225; LA32S-NEXT:    ret226;227; LA64-LABEL: test_bitreverse_bswap_i32:228; LA64:       # %bb.0:229; LA64-NEXT:    bitrev.4b $a0, $a0230; LA64-NEXT:    ret231  %tmp = call i32 @llvm.bitreverse.i32(i32 %a)232  %tmp2 = call i32 @llvm.bswap.i32(i32 %tmp)233  ret i32 %tmp2234}235 236define i64 @test_bitreverse_bswap_i64(i64 %a) nounwind {237; LA32R-LABEL: test_bitreverse_bswap_i64:238; LA32R:       # %bb.0:239; LA32R-NEXT:    srli.w $a2, $a0, 4240; LA32R-NEXT:    lu12i.w $a3, 61680241; LA32R-NEXT:    ori $a3, $a3, 3855242; LA32R-NEXT:    and $a2, $a2, $a3243; LA32R-NEXT:    and $a0, $a0, $a3244; LA32R-NEXT:    slli.w $a0, $a0, 4245; LA32R-NEXT:    or $a0, $a2, $a0246; LA32R-NEXT:    srli.w $a2, $a0, 2247; LA32R-NEXT:    lu12i.w $a4, 209715248; LA32R-NEXT:    ori $a4, $a4, 819249; LA32R-NEXT:    and $a2, $a2, $a4250; LA32R-NEXT:    and $a0, $a0, $a4251; LA32R-NEXT:    slli.w $a0, $a0, 2252; LA32R-NEXT:    or $a0, $a2, $a0253; LA32R-NEXT:    srli.w $a2, $a0, 1254; LA32R-NEXT:    lu12i.w $a5, 349525255; LA32R-NEXT:    ori $a5, $a5, 1365256; LA32R-NEXT:    and $a2, $a2, $a5257; LA32R-NEXT:    and $a0, $a0, $a5258; LA32R-NEXT:    slli.w $a0, $a0, 1259; LA32R-NEXT:    or $a0, $a2, $a0260; LA32R-NEXT:    srli.w $a2, $a1, 4261; LA32R-NEXT:    and $a2, $a2, $a3262; LA32R-NEXT:    and $a1, $a1, $a3263; LA32R-NEXT:    slli.w $a1, $a1, 4264; LA32R-NEXT:    or $a1, $a2, $a1265; LA32R-NEXT:    srli.w $a2, $a1, 2266; LA32R-NEXT:    and $a2, $a2, $a4267; LA32R-NEXT:    and $a1, $a1, $a4268; LA32R-NEXT:    slli.w $a1, $a1, 2269; LA32R-NEXT:    or $a1, $a2, $a1270; LA32R-NEXT:    srli.w $a2, $a1, 1271; LA32R-NEXT:    and $a2, $a2, $a5272; LA32R-NEXT:    and $a1, $a1, $a5273; LA32R-NEXT:    slli.w $a1, $a1, 1274; LA32R-NEXT:    or $a1, $a2, $a1275; LA32R-NEXT:    ret276;277; LA32S-LABEL: test_bitreverse_bswap_i64:278; LA32S:       # %bb.0:279; LA32S-NEXT:    bitrev.4b $a0, $a0280; LA32S-NEXT:    bitrev.4b $a1, $a1281; LA32S-NEXT:    ret282;283; LA64-LABEL: test_bitreverse_bswap_i64:284; LA64:       # %bb.0:285; LA64-NEXT:    bitrev.8b $a0, $a0286; LA64-NEXT:    ret287  %tmp = call i64 @llvm.bitreverse.i64(i64 %a)288  %tmp2 = call i64 @llvm.bswap.i64(i64 %tmp)289  ret i64 %tmp2290}291 292define i32 @pr55484(i32 %0) {293; LA32R-LABEL: pr55484:294; LA32R:       # %bb.0:295; LA32R-NEXT:    slli.w $a1, $a0, 8296; LA32R-NEXT:    slli.w $a0, $a0, 24297; LA32R-NEXT:    or $a0, $a0, $a1298; LA32R-NEXT:    srai.w $a0, $a0, 16299; LA32R-NEXT:    ret300;301; LA32S-LABEL: pr55484:302; LA32S:       # %bb.0:303; LA32S-NEXT:    srli.w $a1, $a0, 8304; LA32S-NEXT:    slli.w $a0, $a0, 8305; LA32S-NEXT:    or $a0, $a1, $a0306; LA32S-NEXT:    ext.w.h $a0, $a0307; LA32S-NEXT:    ret308;309; LA64-LABEL: pr55484:310; LA64:       # %bb.0:311; LA64-NEXT:    srli.d $a1, $a0, 8312; LA64-NEXT:    slli.d $a0, $a0, 8313; LA64-NEXT:    or $a0, $a1, $a0314; LA64-NEXT:    ext.w.h $a0, $a0315; LA64-NEXT:    ret316  %2 = lshr i32 %0, 8317  %3 = shl i32 %0, 8318  %4 = or i32 %2, %3319  %5 = trunc i32 %4 to i16320  %6 = sext i16 %5 to i32321  ret i32 %6322}323