brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.2 KiB · 17c4b11 Raw
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