brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.0 KiB · ec69f51 Raw
326 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 5define signext i32 @select_const_int_one_away(i1 zeroext %a) nounwind {6; LA32-LABEL: select_const_int_one_away:7; LA32:       # %bb.0:8; LA32-NEXT:    ori $a1, $zero, 49; LA32-NEXT:    sub.w $a0, $a1, $a010; LA32-NEXT:    ret11;12; LA64-LABEL: select_const_int_one_away:13; LA64:       # %bb.0:14; LA64-NEXT:    ori $a1, $zero, 415; LA64-NEXT:    sub.d $a0, $a1, $a016; LA64-NEXT:    ret17  %1 = select i1 %a, i32 3, i32 418  ret i32 %119}20 21define signext i32 @select_const_int_pow2_zero(i1 zeroext %a) nounwind {22; LA32-LABEL: select_const_int_pow2_zero:23; LA32:       # %bb.0:24; LA32-NEXT:    slli.w $a0, $a0, 225; LA32-NEXT:    ret26;27; LA64-LABEL: select_const_int_pow2_zero:28; LA64:       # %bb.0:29; LA64-NEXT:    slli.d $a0, $a0, 230; LA64-NEXT:    ret31  %1 = select i1 %a, i32 4, i32 032  ret i32 %133}34 35define signext i32 @select_eq_zero_negone(i32 signext %a, i32 signext %b) nounwind {36; LA32-LABEL: select_eq_zero_negone:37; LA32:       # %bb.0:38; LA32-NEXT:    xor $a0, $a0, $a139; LA32-NEXT:    sltui $a0, $a0, 140; LA32-NEXT:    sub.w $a0, $zero, $a041; LA32-NEXT:    ret42;43; LA64-LABEL: select_eq_zero_negone:44; LA64:       # %bb.0:45; LA64-NEXT:    xor $a0, $a0, $a146; LA64-NEXT:    sltui $a0, $a0, 147; LA64-NEXT:    sub.d $a0, $zero, $a048; LA64-NEXT:    ret49  %1 = icmp eq i32 %a, %b50  %2 = select i1 %1, i32 -1, i32 051  ret i32 %252}53 54define signext i32 @select_ne_zero_negone(i32 signext %a, i32 signext %b) nounwind {55; LA32-LABEL: select_ne_zero_negone:56; LA32:       # %bb.0:57; LA32-NEXT:    xor $a0, $a0, $a158; LA32-NEXT:    sltu $a0, $zero, $a059; LA32-NEXT:    sub.w $a0, $zero, $a060; LA32-NEXT:    ret61;62; LA64-LABEL: select_ne_zero_negone:63; LA64:       # %bb.0:64; LA64-NEXT:    xor $a0, $a0, $a165; LA64-NEXT:    sltu $a0, $zero, $a066; LA64-NEXT:    sub.d $a0, $zero, $a067; LA64-NEXT:    ret68  %1 = icmp ne i32 %a, %b69  %2 = select i1 %1, i32 -1, i32 070  ret i32 %271}72 73define signext i32 @select_sgt_zero_negone(i32 signext %a, i32 signext %b) nounwind {74; LA32-LABEL: select_sgt_zero_negone:75; LA32:       # %bb.0:76; LA32-NEXT:    slt $a0, $a1, $a077; LA32-NEXT:    sub.w $a0, $zero, $a078; LA32-NEXT:    ret79;80; LA64-LABEL: select_sgt_zero_negone:81; LA64:       # %bb.0:82; LA64-NEXT:    slt $a0, $a1, $a083; LA64-NEXT:    sub.d $a0, $zero, $a084; LA64-NEXT:    ret85  %1 = icmp sgt i32 %a, %b86  %2 = select i1 %1, i32 -1, i32 087  ret i32 %288}89 90define signext i32 @select_slt_zero_negone(i32 signext %a, i32 signext %b) nounwind {91; LA32-LABEL: select_slt_zero_negone:92; LA32:       # %bb.0:93; LA32-NEXT:    slt $a0, $a0, $a194; LA32-NEXT:    sub.w $a0, $zero, $a095; LA32-NEXT:    ret96;97; LA64-LABEL: select_slt_zero_negone:98; LA64:       # %bb.0:99; LA64-NEXT:    slt $a0, $a0, $a1100; LA64-NEXT:    sub.d $a0, $zero, $a0101; LA64-NEXT:    ret102  %1 = icmp slt i32 %a, %b103  %2 = select i1 %1, i32 -1, i32 0104  ret i32 %2105}106 107define signext i32 @select_sge_zero_negone(i32 signext %a, i32 signext %b) nounwind {108; LA32-LABEL: select_sge_zero_negone:109; LA32:       # %bb.0:110; LA32-NEXT:    slt $a0, $a0, $a1111; LA32-NEXT:    xori $a0, $a0, 1112; LA32-NEXT:    sub.w $a0, $zero, $a0113; LA32-NEXT:    ret114;115; LA64-LABEL: select_sge_zero_negone:116; LA64:       # %bb.0:117; LA64-NEXT:    slt $a0, $a0, $a1118; LA64-NEXT:    xori $a0, $a0, 1119; LA64-NEXT:    sub.d $a0, $zero, $a0120; LA64-NEXT:    ret121  %1 = icmp sge i32 %a, %b122  %2 = select i1 %1, i32 -1, i32 0123  ret i32 %2124}125 126define signext i32 @select_sle_zero_negone(i32 signext %a, i32 signext %b) nounwind {127; LA32-LABEL: select_sle_zero_negone:128; LA32:       # %bb.0:129; LA32-NEXT:    slt $a0, $a1, $a0130; LA32-NEXT:    xori $a0, $a0, 1131; LA32-NEXT:    sub.w $a0, $zero, $a0132; LA32-NEXT:    ret133;134; LA64-LABEL: select_sle_zero_negone:135; LA64:       # %bb.0:136; LA64-NEXT:    slt $a0, $a1, $a0137; LA64-NEXT:    xori $a0, $a0, 1138; LA64-NEXT:    sub.d $a0, $zero, $a0139; LA64-NEXT:    ret140  %1 = icmp sle i32 %a, %b141  %2 = select i1 %1, i32 -1, i32 0142  ret i32 %2143}144 145define signext i32 @select_ugt_zero_negone(i32 signext %a, i32 signext %b) nounwind {146; LA32-LABEL: select_ugt_zero_negone:147; LA32:       # %bb.0:148; LA32-NEXT:    sltu $a0, $a1, $a0149; LA32-NEXT:    sub.w $a0, $zero, $a0150; LA32-NEXT:    ret151;152; LA64-LABEL: select_ugt_zero_negone:153; LA64:       # %bb.0:154; LA64-NEXT:    sltu $a0, $a1, $a0155; LA64-NEXT:    sub.d $a0, $zero, $a0156; LA64-NEXT:    ret157  %1 = icmp ugt i32 %a, %b158  %2 = select i1 %1, i32 -1, i32 0159  ret i32 %2160}161 162define signext i32 @select_ult_zero_negone(i32 signext %a, i32 signext %b) nounwind {163; LA32-LABEL: select_ult_zero_negone:164; LA32:       # %bb.0:165; LA32-NEXT:    sltu $a0, $a0, $a1166; LA32-NEXT:    sub.w $a0, $zero, $a0167; LA32-NEXT:    ret168;169; LA64-LABEL: select_ult_zero_negone:170; LA64:       # %bb.0:171; LA64-NEXT:    sltu $a0, $a0, $a1172; LA64-NEXT:    sub.d $a0, $zero, $a0173; LA64-NEXT:    ret174  %1 = icmp ult i32 %a, %b175  %2 = select i1 %1, i32 -1, i32 0176  ret i32 %2177}178 179define signext i32 @select_uge_zero_negone(i32 signext %a, i32 signext %b) nounwind {180; LA32-LABEL: select_uge_zero_negone:181; LA32:       # %bb.0:182; LA32-NEXT:    sltu $a0, $a0, $a1183; LA32-NEXT:    xori $a0, $a0, 1184; LA32-NEXT:    sub.w $a0, $zero, $a0185; LA32-NEXT:    ret186;187; LA64-LABEL: select_uge_zero_negone:188; LA64:       # %bb.0:189; LA64-NEXT:    sltu $a0, $a0, $a1190; LA64-NEXT:    xori $a0, $a0, 1191; LA64-NEXT:    sub.d $a0, $zero, $a0192; LA64-NEXT:    ret193  %1 = icmp uge i32 %a, %b194  %2 = select i1 %1, i32 -1, i32 0195  ret i32 %2196}197 198define signext i32 @select_ule_zero_negone(i32 signext %a, i32 signext %b) nounwind {199; LA32-LABEL: select_ule_zero_negone:200; LA32:       # %bb.0:201; LA32-NEXT:    sltu $a0, $a1, $a0202; LA32-NEXT:    xori $a0, $a0, 1203; LA32-NEXT:    sub.w $a0, $zero, $a0204; LA32-NEXT:    ret205;206; LA64-LABEL: select_ule_zero_negone:207; LA64:       # %bb.0:208; LA64-NEXT:    sltu $a0, $a1, $a0209; LA64-NEXT:    xori $a0, $a0, 1210; LA64-NEXT:    sub.d $a0, $zero, $a0211; LA64-NEXT:    ret212  %1 = icmp ule i32 %a, %b213  %2 = select i1 %1, i32 -1, i32 0214  ret i32 %2215}216 217define i32 @select_eq_1_2(i32 signext %a, i32 signext %b) {218; LA32-LABEL: select_eq_1_2:219; LA32:       # %bb.0:220; LA32-NEXT:    xor $a0, $a0, $a1221; LA32-NEXT:    sltui $a0, $a0, 1222; LA32-NEXT:    ori $a1, $zero, 2223; LA32-NEXT:    sub.w $a0, $a1, $a0224; LA32-NEXT:    ret225;226; LA64-LABEL: select_eq_1_2:227; LA64:       # %bb.0:228; LA64-NEXT:    xor $a0, $a0, $a1229; LA64-NEXT:    sltui $a0, $a0, 1230; LA64-NEXT:    ori $a1, $zero, 2231; LA64-NEXT:    sub.d $a0, $a1, $a0232; LA64-NEXT:    ret233  %1 = icmp eq i32 %a, %b234  %2 = select i1 %1, i32 1, i32 2235  ret i32 %2236}237 238define i32 @select_ne_1_2(i32 signext %a, i32 signext %b) {239; LA32-LABEL: select_ne_1_2:240; LA32:       # %bb.0:241; LA32-NEXT:    xor $a0, $a0, $a1242; LA32-NEXT:    sltu $a0, $zero, $a0243; LA32-NEXT:    ori $a1, $zero, 2244; LA32-NEXT:    sub.w $a0, $a1, $a0245; LA32-NEXT:    ret246;247; LA64-LABEL: select_ne_1_2:248; LA64:       # %bb.0:249; LA64-NEXT:    xor $a0, $a0, $a1250; LA64-NEXT:    sltu $a0, $zero, $a0251; LA64-NEXT:    ori $a1, $zero, 2252; LA64-NEXT:    sub.d $a0, $a1, $a0253; LA64-NEXT:    ret254  %1 = icmp ne i32 %a, %b255  %2 = select i1 %1, i32 1, i32 2256  ret i32 %2257}258 259define i32 @select_eq_10000_10001(i32 signext %a, i32 signext %b) {260; LA32-LABEL: select_eq_10000_10001:261; LA32:       # %bb.0:262; LA32-NEXT:    xor $a0, $a0, $a1263; LA32-NEXT:    sltui $a0, $a0, 1264; LA32-NEXT:    lu12i.w $a1, 2265; LA32-NEXT:    ori $a1, $a1, 1810266; LA32-NEXT:    sub.w $a0, $a1, $a0267; LA32-NEXT:    ret268;269; LA64-LABEL: select_eq_10000_10001:270; LA64:       # %bb.0:271; LA64-NEXT:    xor $a0, $a0, $a1272; LA64-NEXT:    sltui $a0, $a0, 1273; LA64-NEXT:    lu12i.w $a1, 2274; LA64-NEXT:    ori $a1, $a1, 1810275; LA64-NEXT:    sub.d $a0, $a1, $a0276; LA64-NEXT:    ret277  %1 = icmp eq i32 %a, %b278  %2 = select i1 %1, i32 10001, i32 10002279  ret i32 %2280}281 282define i32 @select_ne_10001_10002(i32 signext %a, i32 signext %b) {283; LA32-LABEL: select_ne_10001_10002:284; LA32:       # %bb.0:285; LA32-NEXT:    xor $a0, $a0, $a1286; LA32-NEXT:    sltu $a0, $zero, $a0287; LA32-NEXT:    lu12i.w $a1, 2288; LA32-NEXT:    ori $a1, $a1, 1810289; LA32-NEXT:    sub.w $a0, $a1, $a0290; LA32-NEXT:    ret291;292; LA64-LABEL: select_ne_10001_10002:293; LA64:       # %bb.0:294; LA64-NEXT:    xor $a0, $a0, $a1295; LA64-NEXT:    sltu $a0, $zero, $a0296; LA64-NEXT:    lu12i.w $a1, 2297; LA64-NEXT:    ori $a1, $a1, 1810298; LA64-NEXT:    sub.d $a0, $a1, $a0299; LA64-NEXT:    ret300  %1 = icmp ne i32 %a, %b301  %2 = select i1 %1, i32 10001, i32 10002302  ret i32 %2303}304 305define i32 @select_slt_zero_constant1_constant2(i32 signext %x) {306; LA32-LABEL: select_slt_zero_constant1_constant2:307; LA32:       # %bb.0:308; LA32-NEXT:    srai.w $a0, $a0, 31309; LA32-NEXT:    andi $a0, $a0, 10310; LA32-NEXT:    addi.w $a0, $a0, -3311; LA32-NEXT:    ret312;313; LA64-LABEL: select_slt_zero_constant1_constant2:314; LA64:       # %bb.0:315; LA64-NEXT:    slti $a0, $a0, 0316; LA64-NEXT:    addi.w $a1, $zero, -3317; LA64-NEXT:    masknez $a1, $a1, $a0318; LA64-NEXT:    ori $a2, $zero, 7319; LA64-NEXT:    maskeqz $a0, $a2, $a0320; LA64-NEXT:    or $a0, $a0, $a1321; LA64-NEXT:    ret322  %cmp = icmp slt i32 %x, 0323  %cond = select i1 %cmp, i32 7, i32 -3324  ret i32 %cond325}326