brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · 95c3418 Raw
237 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d < %s | FileCheck %s --check-prefix=LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d < %s | FileCheck %s --check-prefix=LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA645 6;; Exercise the 'lshr' LLVM IR: https://llvm.org/docs/LangRef.html#lshr-instruction7 8define i1 @lshr_i1(i1 %x, i1 %y) {9; LA32R-LABEL: lshr_i1:10; LA32R:       # %bb.0:11; LA32R-NEXT:    ret12;13; LA32S-LABEL: lshr_i1:14; LA32S:       # %bb.0:15; LA32S-NEXT:    ret16;17; LA64-LABEL: lshr_i1:18; LA64:       # %bb.0:19; LA64-NEXT:    ret20  %lshr = lshr i1 %x, %y21  ret i1 %lshr22}23 24define i8 @lshr_i8(i8 %x, i8 %y) {25; LA32R-LABEL: lshr_i8:26; LA32R:       # %bb.0:27; LA32R-NEXT:    andi $a0, $a0, 25528; LA32R-NEXT:    srl.w $a0, $a0, $a129; LA32R-NEXT:    ret30;31; LA32S-LABEL: lshr_i8:32; LA32S:       # %bb.0:33; LA32S-NEXT:    andi $a0, $a0, 25534; LA32S-NEXT:    srl.w $a0, $a0, $a135; LA32S-NEXT:    ret36;37; LA64-LABEL: lshr_i8:38; LA64:       # %bb.0:39; LA64-NEXT:    andi $a0, $a0, 25540; LA64-NEXT:    srl.d $a0, $a0, $a141; LA64-NEXT:    ret42  %lshr = lshr i8 %x, %y43  ret i8 %lshr44}45 46define i16 @lshr_i16(i16 %x, i16 %y) {47; LA32R-LABEL: lshr_i16:48; LA32R:       # %bb.0:49; LA32R-NEXT:    lu12i.w $a2, 1550; LA32R-NEXT:    ori $a2, $a2, 409551; LA32R-NEXT:    and $a0, $a0, $a252; LA32R-NEXT:    srl.w $a0, $a0, $a153; LA32R-NEXT:    ret54;55; LA32S-LABEL: lshr_i16:56; LA32S:       # %bb.0:57; LA32S-NEXT:    bstrpick.w $a0, $a0, 15, 058; LA32S-NEXT:    srl.w $a0, $a0, $a159; LA32S-NEXT:    ret60;61; LA64-LABEL: lshr_i16:62; LA64:       # %bb.0:63; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 064; LA64-NEXT:    srl.d $a0, $a0, $a165; LA64-NEXT:    ret66  %lshr = lshr i16 %x, %y67  ret i16 %lshr68}69 70define i32 @lshr_i32(i32 %x, i32 %y) {71; LA32R-LABEL: lshr_i32:72; LA32R:       # %bb.0:73; LA32R-NEXT:    srl.w $a0, $a0, $a174; LA32R-NEXT:    ret75;76; LA32S-LABEL: lshr_i32:77; LA32S:       # %bb.0:78; LA32S-NEXT:    srl.w $a0, $a0, $a179; LA32S-NEXT:    ret80;81; LA64-LABEL: lshr_i32:82; LA64:       # %bb.0:83; LA64-NEXT:    srl.w $a0, $a0, $a184; LA64-NEXT:    ret85  %lshr = lshr i32 %x, %y86  ret i32 %lshr87}88 89define i64 @lshr_i64(i64 %x, i64 %y) {90; LA32R-LABEL: lshr_i64:91; LA32R:       # %bb.0:92; LA32R-NEXT:    addi.w $a3, $a2, -3293; LA32R-NEXT:    bltz $a3, .LBB4_294; LA32R-NEXT:  # %bb.1:95; LA32R-NEXT:    srl.w $a0, $a1, $a396; LA32R-NEXT:    b .LBB4_397; LA32R-NEXT:  .LBB4_2:98; LA32R-NEXT:    srl.w $a0, $a0, $a299; LA32R-NEXT:    xori $a4, $a2, 31100; LA32R-NEXT:    slli.w $a5, $a1, 1101; LA32R-NEXT:    sll.w $a4, $a5, $a4102; LA32R-NEXT:    or $a0, $a0, $a4103; LA32R-NEXT:  .LBB4_3:104; LA32R-NEXT:    slti $a3, $a3, 0105; LA32R-NEXT:    sub.w $a3, $zero, $a3106; LA32R-NEXT:    srl.w $a1, $a1, $a2107; LA32R-NEXT:    and $a1, $a3, $a1108; LA32R-NEXT:    ret109;110; LA32S-LABEL: lshr_i64:111; LA32S:       # %bb.0:112; LA32S-NEXT:    srl.w $a0, $a0, $a2113; LA32S-NEXT:    xori $a3, $a2, 31114; LA32S-NEXT:    slli.w $a4, $a1, 1115; LA32S-NEXT:    sll.w $a3, $a4, $a3116; LA32S-NEXT:    or $a0, $a0, $a3117; LA32S-NEXT:    addi.w $a3, $a2, -32118; LA32S-NEXT:    slti $a4, $a3, 0119; LA32S-NEXT:    maskeqz $a0, $a0, $a4120; LA32S-NEXT:    srl.w $a5, $a1, $a3121; LA32S-NEXT:    masknez $a4, $a5, $a4122; LA32S-NEXT:    or $a0, $a0, $a4123; LA32S-NEXT:    srl.w $a1, $a1, $a2124; LA32S-NEXT:    srai.w $a2, $a3, 31125; LA32S-NEXT:    and $a1, $a2, $a1126; LA32S-NEXT:    ret127;128; LA64-LABEL: lshr_i64:129; LA64:       # %bb.0:130; LA64-NEXT:    srl.d $a0, $a0, $a1131; LA64-NEXT:    ret132  %lshr = lshr i64 %x, %y133  ret i64 %lshr134}135 136define i1 @lshr_i1_3(i1 %x) {137; LA32R-LABEL: lshr_i1_3:138; LA32R:       # %bb.0:139; LA32R-NEXT:    ret140;141; LA32S-LABEL: lshr_i1_3:142; LA32S:       # %bb.0:143; LA32S-NEXT:    ret144;145; LA64-LABEL: lshr_i1_3:146; LA64:       # %bb.0:147; LA64-NEXT:    ret148  %lshr = lshr i1 %x, 3149  ret i1 %lshr150}151 152define i8 @lshr_i8_3(i8 %x) {153; LA32R-LABEL: lshr_i8_3:154; LA32R:       # %bb.0:155; LA32R-NEXT:    andi $a0, $a0, 248156; LA32R-NEXT:    srli.w $a0, $a0, 3157; LA32R-NEXT:    ret158;159; LA32S-LABEL: lshr_i8_3:160; LA32S:       # %bb.0:161; LA32S-NEXT:    bstrpick.w $a0, $a0, 7, 3162; LA32S-NEXT:    ret163;164; LA64-LABEL: lshr_i8_3:165; LA64:       # %bb.0:166; LA64-NEXT:    bstrpick.d $a0, $a0, 7, 3167; LA64-NEXT:    ret168  %lshr = lshr i8 %x, 3169  ret i8 %lshr170}171 172define i16 @lshr_i16_3(i16 %x) {173; LA32R-LABEL: lshr_i16_3:174; LA32R:       # %bb.0:175; LA32R-NEXT:    lu12i.w $a1, 15176; LA32R-NEXT:    ori $a1, $a1, 4088177; LA32R-NEXT:    and $a0, $a0, $a1178; LA32R-NEXT:    srli.w $a0, $a0, 3179; LA32R-NEXT:    ret180;181; LA32S-LABEL: lshr_i16_3:182; LA32S:       # %bb.0:183; LA32S-NEXT:    bstrpick.w $a0, $a0, 15, 3184; LA32S-NEXT:    ret185;186; LA64-LABEL: lshr_i16_3:187; LA64:       # %bb.0:188; LA64-NEXT:    bstrpick.d $a0, $a0, 15, 3189; LA64-NEXT:    ret190  %lshr = lshr i16 %x, 3191  ret i16 %lshr192}193 194define i32 @lshr_i32_3(i32 %x) {195; LA32R-LABEL: lshr_i32_3:196; LA32R:       # %bb.0:197; LA32R-NEXT:    srli.w $a0, $a0, 3198; LA32R-NEXT:    ret199;200; LA32S-LABEL: lshr_i32_3:201; LA32S:       # %bb.0:202; LA32S-NEXT:    srli.w $a0, $a0, 3203; LA32S-NEXT:    ret204;205; LA64-LABEL: lshr_i32_3:206; LA64:       # %bb.0:207; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 3208; LA64-NEXT:    ret209  %lshr = lshr i32 %x, 3210  ret i32 %lshr211}212 213define i64 @lshr_i64_3(i64 %x) {214; LA32R-LABEL: lshr_i64_3:215; LA32R:       # %bb.0:216; LA32R-NEXT:    slli.w $a2, $a1, 29217; LA32R-NEXT:    srli.w $a0, $a0, 3218; LA32R-NEXT:    or $a0, $a0, $a2219; LA32R-NEXT:    srli.w $a1, $a1, 3220; LA32R-NEXT:    ret221;222; LA32S-LABEL: lshr_i64_3:223; LA32S:       # %bb.0:224; LA32S-NEXT:    slli.w $a2, $a1, 29225; LA32S-NEXT:    srli.w $a0, $a0, 3226; LA32S-NEXT:    or $a0, $a0, $a2227; LA32S-NEXT:    srli.w $a1, $a1, 3228; LA32S-NEXT:    ret229;230; LA64-LABEL: lshr_i64_3:231; LA64:       # %bb.0:232; LA64-NEXT:    srli.d $a0, $a0, 3233; LA64-NEXT:    ret234  %lshr = lshr i64 %x, 3235  ret i64 %lshr236}237