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