232 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;; Test integers selection after integers comparison6 7define i32 @select_eq(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {8; LA32-LABEL: select_eq:9; LA32: # %bb.0:10; LA32-NEXT: beq $a0, $a1, .LBB0_211; LA32-NEXT: # %bb.1:12; LA32-NEXT: move $a2, $a313; LA32-NEXT: .LBB0_2:14; LA32-NEXT: move $a0, $a215; LA32-NEXT: ret16;17; LA64-LABEL: select_eq:18; LA64: # %bb.0:19; LA64-NEXT: xor $a0, $a0, $a120; LA64-NEXT: sltui $a0, $a0, 121; LA64-NEXT: masknez $a1, $a3, $a022; LA64-NEXT: maskeqz $a0, $a2, $a023; LA64-NEXT: or $a0, $a0, $a124; LA64-NEXT: ret25 %cond = icmp eq i32 %a, %b26 %res = select i1 %cond, i32 %x, i32 %y27 ret i32 %res28}29 30define i32 @select_ne(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {31; LA32-LABEL: select_ne:32; LA32: # %bb.0:33; LA32-NEXT: bne $a0, $a1, .LBB1_234; LA32-NEXT: # %bb.1:35; LA32-NEXT: move $a2, $a336; LA32-NEXT: .LBB1_2:37; LA32-NEXT: move $a0, $a238; LA32-NEXT: ret39;40; LA64-LABEL: select_ne:41; LA64: # %bb.0:42; LA64-NEXT: xor $a0, $a0, $a143; LA64-NEXT: sltu $a0, $zero, $a044; LA64-NEXT: masknez $a1, $a3, $a045; LA64-NEXT: maskeqz $a0, $a2, $a046; LA64-NEXT: or $a0, $a0, $a147; LA64-NEXT: ret48 %cond = icmp ne i32 %a, %b49 %res = select i1 %cond, i32 %x, i32 %y50 ret i32 %res51}52 53define i32 @select_ugt(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {54; LA32-LABEL: select_ugt:55; LA32: # %bb.0:56; LA32-NEXT: bltu $a1, $a0, .LBB2_257; LA32-NEXT: # %bb.1:58; LA32-NEXT: move $a2, $a359; LA32-NEXT: .LBB2_2:60; LA32-NEXT: move $a0, $a261; LA32-NEXT: ret62;63; LA64-LABEL: select_ugt:64; LA64: # %bb.0:65; LA64-NEXT: sltu $a0, $a1, $a066; LA64-NEXT: masknez $a1, $a3, $a067; LA64-NEXT: maskeqz $a0, $a2, $a068; LA64-NEXT: or $a0, $a0, $a169; LA64-NEXT: ret70 %cond = icmp ugt i32 %a, %b71 %res = select i1 %cond, i32 %x, i32 %y72 ret i32 %res73}74 75define i32 @select_uge(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {76; LA32-LABEL: select_uge:77; LA32: # %bb.0:78; LA32-NEXT: bgeu $a0, $a1, .LBB3_279; LA32-NEXT: # %bb.1:80; LA32-NEXT: move $a2, $a381; LA32-NEXT: .LBB3_2:82; LA32-NEXT: move $a0, $a283; LA32-NEXT: ret84;85; LA64-LABEL: select_uge:86; LA64: # %bb.0:87; LA64-NEXT: sltu $a0, $a0, $a188; LA64-NEXT: xori $a0, $a0, 189; LA64-NEXT: masknez $a1, $a3, $a090; LA64-NEXT: maskeqz $a0, $a2, $a091; LA64-NEXT: or $a0, $a0, $a192; LA64-NEXT: ret93 %cond = icmp uge i32 %a, %b94 %res = select i1 %cond, i32 %x, i32 %y95 ret i32 %res96}97 98define i32 @select_ult(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {99; LA32-LABEL: select_ult:100; LA32: # %bb.0:101; LA32-NEXT: bltu $a0, $a1, .LBB4_2102; LA32-NEXT: # %bb.1:103; LA32-NEXT: move $a2, $a3104; LA32-NEXT: .LBB4_2:105; LA32-NEXT: move $a0, $a2106; LA32-NEXT: ret107;108; LA64-LABEL: select_ult:109; LA64: # %bb.0:110; LA64-NEXT: sltu $a0, $a0, $a1111; LA64-NEXT: masknez $a1, $a3, $a0112; LA64-NEXT: maskeqz $a0, $a2, $a0113; LA64-NEXT: or $a0, $a0, $a1114; LA64-NEXT: ret115 %cond = icmp ult i32 %a, %b116 %res = select i1 %cond, i32 %x, i32 %y117 ret i32 %res118}119 120define i32 @select_ule(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {121; LA32-LABEL: select_ule:122; LA32: # %bb.0:123; LA32-NEXT: bgeu $a1, $a0, .LBB5_2124; LA32-NEXT: # %bb.1:125; LA32-NEXT: move $a2, $a3126; LA32-NEXT: .LBB5_2:127; LA32-NEXT: move $a0, $a2128; LA32-NEXT: ret129;130; LA64-LABEL: select_ule:131; LA64: # %bb.0:132; LA64-NEXT: sltu $a0, $a1, $a0133; LA64-NEXT: xori $a0, $a0, 1134; LA64-NEXT: masknez $a1, $a3, $a0135; LA64-NEXT: maskeqz $a0, $a2, $a0136; LA64-NEXT: or $a0, $a0, $a1137; LA64-NEXT: ret138 %cond = icmp ule i32 %a, %b139 %res = select i1 %cond, i32 %x, i32 %y140 ret i32 %res141}142 143define i32 @select_sgt(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {144; LA32-LABEL: select_sgt:145; LA32: # %bb.0:146; LA32-NEXT: blt $a1, $a0, .LBB6_2147; LA32-NEXT: # %bb.1:148; LA32-NEXT: move $a2, $a3149; LA32-NEXT: .LBB6_2:150; LA32-NEXT: move $a0, $a2151; LA32-NEXT: ret152;153; LA64-LABEL: select_sgt:154; LA64: # %bb.0:155; LA64-NEXT: slt $a0, $a1, $a0156; LA64-NEXT: masknez $a1, $a3, $a0157; LA64-NEXT: maskeqz $a0, $a2, $a0158; LA64-NEXT: or $a0, $a0, $a1159; LA64-NEXT: ret160 %cond = icmp sgt i32 %a, %b161 %res = select i1 %cond, i32 %x, i32 %y162 ret i32 %res163}164 165define i32 @select_sge(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {166; LA32-LABEL: select_sge:167; LA32: # %bb.0:168; LA32-NEXT: bge $a0, $a1, .LBB7_2169; LA32-NEXT: # %bb.1:170; LA32-NEXT: move $a2, $a3171; LA32-NEXT: .LBB7_2:172; LA32-NEXT: move $a0, $a2173; LA32-NEXT: ret174;175; LA64-LABEL: select_sge:176; LA64: # %bb.0:177; LA64-NEXT: slt $a0, $a0, $a1178; LA64-NEXT: xori $a0, $a0, 1179; LA64-NEXT: masknez $a1, $a3, $a0180; LA64-NEXT: maskeqz $a0, $a2, $a0181; LA64-NEXT: or $a0, $a0, $a1182; LA64-NEXT: ret183 %cond = icmp sge i32 %a, %b184 %res = select i1 %cond, i32 %x, i32 %y185 ret i32 %res186}187 188define i32 @select_slt(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {189; LA32-LABEL: select_slt:190; LA32: # %bb.0:191; LA32-NEXT: blt $a0, $a1, .LBB8_2192; LA32-NEXT: # %bb.1:193; LA32-NEXT: move $a2, $a3194; LA32-NEXT: .LBB8_2:195; LA32-NEXT: move $a0, $a2196; LA32-NEXT: ret197;198; LA64-LABEL: select_slt:199; LA64: # %bb.0:200; LA64-NEXT: slt $a0, $a0, $a1201; LA64-NEXT: masknez $a1, $a3, $a0202; LA64-NEXT: maskeqz $a0, $a2, $a0203; LA64-NEXT: or $a0, $a0, $a1204; LA64-NEXT: ret205 %cond = icmp slt i32 %a, %b206 %res = select i1 %cond, i32 %x, i32 %y207 ret i32 %res208}209 210define i32 @select_sle(i32 signext %a, i32 signext %b, i32 %x, i32 %y) {211; LA32-LABEL: select_sle:212; LA32: # %bb.0:213; LA32-NEXT: bge $a1, $a0, .LBB9_2214; LA32-NEXT: # %bb.1:215; LA32-NEXT: move $a2, $a3216; LA32-NEXT: .LBB9_2:217; LA32-NEXT: move $a0, $a2218; LA32-NEXT: ret219;220; LA64-LABEL: select_sle:221; LA64: # %bb.0:222; LA64-NEXT: slt $a0, $a1, $a0223; LA64-NEXT: xori $a0, $a0, 1224; LA64-NEXT: masknez $a1, $a3, $a0225; LA64-NEXT: maskeqz $a0, $a2, $a0226; LA64-NEXT: or $a0, $a0, $a1227; LA64-NEXT: ret228 %cond = icmp sle i32 %a, %b229 %res = select i1 %cond, i32 %x, i32 %y230 ret i32 %res231}232