brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · c13bc1e Raw
152 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 bare integers 'select' LLVM IR: https://llvm.org/docs/LangRef.html#select-instruction6 7define i1 @bare_select_i1(i1 %a, i1 %b, i1 %c) {8; LA32-LABEL: bare_select_i1:9; LA32:       # %bb.0:10; LA32-NEXT:    andi $a3, $a0, 111; LA32-NEXT:    move $a0, $a112; LA32-NEXT:    bne $a3, $zero, .LBB0_213; LA32-NEXT:  # %bb.1:14; LA32-NEXT:    move $a0, $a215; LA32-NEXT:  .LBB0_2:16; LA32-NEXT:    ret17;18; LA64-LABEL: bare_select_i1:19; LA64:       # %bb.0:20; LA64-NEXT:    andi $a0, $a0, 121; LA64-NEXT:    masknez $a2, $a2, $a022; LA64-NEXT:    maskeqz $a0, $a1, $a023; LA64-NEXT:    or $a0, $a0, $a224; LA64-NEXT:    ret25  %res = select i1 %a, i1 %b, i1 %c26  ret i1 %res27}28 29define i8 @bare_select_i8(i1 %a, i8 %b, i8 %c) {30; LA32-LABEL: bare_select_i8:31; LA32:       # %bb.0:32; LA32-NEXT:    andi $a3, $a0, 133; LA32-NEXT:    move $a0, $a134; LA32-NEXT:    bne $a3, $zero, .LBB1_235; LA32-NEXT:  # %bb.1:36; LA32-NEXT:    move $a0, $a237; LA32-NEXT:  .LBB1_2:38; LA32-NEXT:    ret39;40; LA64-LABEL: bare_select_i8:41; LA64:       # %bb.0:42; LA64-NEXT:    andi $a0, $a0, 143; LA64-NEXT:    masknez $a2, $a2, $a044; LA64-NEXT:    maskeqz $a0, $a1, $a045; LA64-NEXT:    or $a0, $a0, $a246; LA64-NEXT:    ret47  %res = select i1 %a, i8 %b, i8 %c48  ret i8 %res49}50 51define i16 @bare_select_i16(i1 %a, i16 %b, i16 %c) {52; LA32-LABEL: bare_select_i16:53; LA32:       # %bb.0:54; LA32-NEXT:    andi $a3, $a0, 155; LA32-NEXT:    move $a0, $a156; LA32-NEXT:    bne $a3, $zero, .LBB2_257; LA32-NEXT:  # %bb.1:58; LA32-NEXT:    move $a0, $a259; LA32-NEXT:  .LBB2_2:60; LA32-NEXT:    ret61;62; LA64-LABEL: bare_select_i16:63; LA64:       # %bb.0:64; LA64-NEXT:    andi $a0, $a0, 165; LA64-NEXT:    masknez $a2, $a2, $a066; LA64-NEXT:    maskeqz $a0, $a1, $a067; LA64-NEXT:    or $a0, $a0, $a268; LA64-NEXT:    ret69  %res = select i1 %a, i16 %b, i16 %c70  ret i16 %res71}72 73define i32 @bare_select_i32(i1 %a, i32 %b, i32 %c) {74; LA32-LABEL: bare_select_i32:75; LA32:       # %bb.0:76; LA32-NEXT:    andi $a3, $a0, 177; LA32-NEXT:    move $a0, $a178; LA32-NEXT:    bne $a3, $zero, .LBB3_279; LA32-NEXT:  # %bb.1:80; LA32-NEXT:    move $a0, $a281; LA32-NEXT:  .LBB3_2:82; LA32-NEXT:    ret83;84; LA64-LABEL: bare_select_i32:85; LA64:       # %bb.0:86; LA64-NEXT:    andi $a0, $a0, 187; LA64-NEXT:    masknez $a2, $a2, $a088; LA64-NEXT:    maskeqz $a0, $a1, $a089; LA64-NEXT:    or $a0, $a0, $a290; LA64-NEXT:    ret91  %res = select i1 %a, i32 %b, i32 %c92  ret i32 %res93}94 95define i64 @bare_select_i64(i1 %a, i64 %b, i64 %c) {96; LA32-LABEL: bare_select_i64:97; LA32:       # %bb.0:98; LA32-NEXT:    andi $a5, $a0, 199; LA32-NEXT:    move $a0, $a1100; LA32-NEXT:    bne $a5, $zero, .LBB4_2101; LA32-NEXT:  # %bb.1:102; LA32-NEXT:    move $a0, $a3103; LA32-NEXT:    move $a2, $a4104; LA32-NEXT:  .LBB4_2:105; LA32-NEXT:    move $a1, $a2106; LA32-NEXT:    ret107;108; LA64-LABEL: bare_select_i64:109; LA64:       # %bb.0:110; LA64-NEXT:    andi $a0, $a0, 1111; LA64-NEXT:    masknez $a2, $a2, $a0112; LA64-NEXT:    maskeqz $a0, $a1, $a0113; LA64-NEXT:    or $a0, $a0, $a2114; LA64-NEXT:    ret115  %res = select i1 %a, i64 %b, i64 %c116  ret i64 %res117}118 119define i16 @bare_select_zero_i16(i1 %a, i16 %b) {120; LA32-LABEL: bare_select_zero_i16:121; LA32:       # %bb.0:122; LA32-NEXT:    andi $a0, $a0, 1123; LA32-NEXT:    addi.w $a0, $a0, -1124; LA32-NEXT:    and $a0, $a0, $a1125; LA32-NEXT:    ret126;127; LA64-LABEL: bare_select_zero_i16:128; LA64:       # %bb.0:129; LA64-NEXT:    andi $a0, $a0, 1130; LA64-NEXT:    masknez $a0, $a1, $a0131; LA64-NEXT:    ret132  %res = select i1 %a, i16 0, i16 %b133  ret i16 %res134}135 136define i32 @bare_select_zero_i32(i1 %a, i32 %b) {137; LA32-LABEL: bare_select_zero_i32:138; LA32:       # %bb.0:139; LA32-NEXT:    andi $a0, $a0, 1140; LA32-NEXT:    sub.w $a0, $zero, $a0141; LA32-NEXT:    and $a0, $a0, $a1142; LA32-NEXT:    ret143;144; LA64-LABEL: bare_select_zero_i32:145; LA64:       # %bb.0:146; LA64-NEXT:    andi $a0, $a0, 1147; LA64-NEXT:    maskeqz $a0, $a1, $a0148; LA64-NEXT:    ret149  %res = select i1 %a, i32 %b, i32 0150  ret i32 %res151}152