brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 2031011 Raw
168 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5;; Exercise the 'ashr' LLVM IR: https://llvm.org/docs/LangRef.html#ashr-instruction6 7define i1 @ashr_i1(i1 %x, i1 %y) {8; LA32-LABEL: ashr_i1:9; LA32:       # %bb.0:10; LA32-NEXT:    ret11;12; LA64-LABEL: ashr_i1:13; LA64:       # %bb.0:14; LA64-NEXT:    ret15  %ashr = ashr i1 %x, %y16  ret i1 %ashr17}18 19define i8 @ashr_i8(i8 %x, i8 %y) {20; LA32-LABEL: ashr_i8:21; LA32:       # %bb.0:22; LA32-NEXT:    slli.w $a0, $a0, 2423; LA32-NEXT:    srai.w $a0, $a0, 2424; LA32-NEXT:    sra.w $a0, $a0, $a125; LA32-NEXT:    ret26;27; LA64-LABEL: ashr_i8:28; LA64:       # %bb.0:29; LA64-NEXT:    ext.w.b $a0, $a030; LA64-NEXT:    sra.d $a0, $a0, $a131; LA64-NEXT:    ret32  %ashr = ashr i8 %x, %y33  ret i8 %ashr34}35 36define i16 @ashr_i16(i16 %x, i16 %y) {37; LA32-LABEL: ashr_i16:38; LA32:       # %bb.0:39; LA32-NEXT:    slli.w $a0, $a0, 1640; LA32-NEXT:    srai.w $a0, $a0, 1641; LA32-NEXT:    sra.w $a0, $a0, $a142; LA32-NEXT:    ret43;44; LA64-LABEL: ashr_i16:45; LA64:       # %bb.0:46; LA64-NEXT:    ext.w.h $a0, $a047; LA64-NEXT:    sra.d $a0, $a0, $a148; LA64-NEXT:    ret49  %ashr = ashr i16 %x, %y50  ret i16 %ashr51}52 53define i32 @ashr_i32(i32 %x, i32 %y) {54; LA32-LABEL: ashr_i32:55; LA32:       # %bb.0:56; LA32-NEXT:    sra.w $a0, $a0, $a157; LA32-NEXT:    ret58;59; LA64-LABEL: ashr_i32:60; LA64:       # %bb.0:61; LA64-NEXT:    sra.w $a0, $a0, $a162; LA64-NEXT:    ret63  %ashr = ashr i32 %x, %y64  ret i32 %ashr65}66 67define i64 @ashr_i64(i64 %x, i64 %y) {68; LA32-LABEL: ashr_i64:69; LA32:       # %bb.0:70; LA32-NEXT:    addi.w $a3, $a2, -3271; LA32-NEXT:    bltz $a3, .LBB4_272; LA32-NEXT:  # %bb.1:73; LA32-NEXT:    sra.w $a0, $a1, $a374; LA32-NEXT:    srai.w $a1, $a1, 3175; LA32-NEXT:    ret76; LA32-NEXT:  .LBB4_2:77; LA32-NEXT:    srl.w $a0, $a0, $a278; LA32-NEXT:    xori $a3, $a2, 3179; LA32-NEXT:    slli.w $a4, $a1, 180; LA32-NEXT:    sll.w $a3, $a4, $a381; LA32-NEXT:    or $a0, $a0, $a382; LA32-NEXT:    sra.w $a1, $a1, $a283; LA32-NEXT:    ret84;85; LA64-LABEL: ashr_i64:86; LA64:       # %bb.0:87; LA64-NEXT:    sra.d $a0, $a0, $a188; LA64-NEXT:    ret89  %ashr = ashr i64 %x, %y90  ret i64 %ashr91}92 93define i1 @ashr_i1_3(i1 %x) {94; LA32-LABEL: ashr_i1_3:95; LA32:       # %bb.0:96; LA32-NEXT:    ret97;98; LA64-LABEL: ashr_i1_3:99; LA64:       # %bb.0:100; LA64-NEXT:    ret101  %ashr = ashr i1 %x, 3102  ret i1 %ashr103}104 105define i8 @ashr_i8_3(i8 %x) {106; LA32-LABEL: ashr_i8_3:107; LA32:       # %bb.0:108; LA32-NEXT:    slli.w $a0, $a0, 24109; LA32-NEXT:    srai.w $a0, $a0, 27110; LA32-NEXT:    ret111;112; LA64-LABEL: ashr_i8_3:113; LA64:       # %bb.0:114; LA64-NEXT:    ext.w.b $a0, $a0115; LA64-NEXT:    srai.d $a0, $a0, 3116; LA64-NEXT:    ret117  %ashr = ashr i8 %x, 3118  ret i8 %ashr119}120 121define i16 @ashr_i16_3(i16 %x) {122; LA32-LABEL: ashr_i16_3:123; LA32:       # %bb.0:124; LA32-NEXT:    slli.w $a0, $a0, 16125; LA32-NEXT:    srai.w $a0, $a0, 19126; LA32-NEXT:    ret127;128; LA64-LABEL: ashr_i16_3:129; LA64:       # %bb.0:130; LA64-NEXT:    ext.w.h $a0, $a0131; LA64-NEXT:    srai.d $a0, $a0, 3132; LA64-NEXT:    ret133  %ashr = ashr i16 %x, 3134  ret i16 %ashr135}136 137define i32 @ashr_i32_3(i32 %x) {138; LA32-LABEL: ashr_i32_3:139; LA32:       # %bb.0:140; LA32-NEXT:    srai.w $a0, $a0, 3141; LA32-NEXT:    ret142;143; LA64-LABEL: ashr_i32_3:144; LA64:       # %bb.0:145; LA64-NEXT:    addi.w $a0, $a0, 0146; LA64-NEXT:    srai.d $a0, $a0, 3147; LA64-NEXT:    ret148  %ashr = ashr i32 %x, 3149  ret i32 %ashr150}151 152define i64 @ashr_i64_3(i64 %x) {153; LA32-LABEL: ashr_i64_3:154; LA32:       # %bb.0:155; LA32-NEXT:    slli.w $a2, $a1, 29156; LA32-NEXT:    srli.w $a0, $a0, 3157; LA32-NEXT:    or $a0, $a0, $a2158; LA32-NEXT:    srai.w $a1, $a1, 3159; LA32-NEXT:    ret160;161; LA64-LABEL: ashr_i64_3:162; LA64:       # %bb.0:163; LA64-NEXT:    srai.d $a0, $a0, 3164; LA64-NEXT:    ret165  %ashr = ashr i64 %x, 3166  ret i64 %ashr167}168