1e5489f72Sgonglingqin; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32 3*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64 4e5489f72Sgonglingqin 5e5489f72Sgonglingqindefine signext i32 @select_const_int_one_away(i1 zeroext %a) nounwind { 6e5489f72Sgonglingqin; LA32-LABEL: select_const_int_one_away: 7e5489f72Sgonglingqin; LA32: # %bb.0: 8e5489f72Sgonglingqin; LA32-NEXT: ori $a1, $zero, 4 99d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $a1, $a0 10e5489f72Sgonglingqin; LA32-NEXT: ret 11e5489f72Sgonglingqin; 12e5489f72Sgonglingqin; LA64-LABEL: select_const_int_one_away: 13e5489f72Sgonglingqin; LA64: # %bb.0: 14e5489f72Sgonglingqin; LA64-NEXT: ori $a1, $zero, 4 159d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $a1, $a0 16e5489f72Sgonglingqin; LA64-NEXT: ret 17e5489f72Sgonglingqin %1 = select i1 %a, i32 3, i32 4 18e5489f72Sgonglingqin ret i32 %1 19e5489f72Sgonglingqin} 20e5489f72Sgonglingqin 21e5489f72Sgonglingqindefine signext i32 @select_const_int_pow2_zero(i1 zeroext %a) nounwind { 22e5489f72Sgonglingqin; LA32-LABEL: select_const_int_pow2_zero: 23e5489f72Sgonglingqin; LA32: # %bb.0: 249d8a7f78Sgonglingqin; LA32-NEXT: slli.w $a0, $a0, 2 25e5489f72Sgonglingqin; LA32-NEXT: ret 26e5489f72Sgonglingqin; 27e5489f72Sgonglingqin; LA64-LABEL: select_const_int_pow2_zero: 28e5489f72Sgonglingqin; LA64: # %bb.0: 299d8a7f78Sgonglingqin; LA64-NEXT: slli.d $a0, $a0, 2 30e5489f72Sgonglingqin; LA64-NEXT: ret 31e5489f72Sgonglingqin %1 = select i1 %a, i32 4, i32 0 32e5489f72Sgonglingqin ret i32 %1 33e5489f72Sgonglingqin} 34e5489f72Sgonglingqin 35e5489f72Sgonglingqindefine signext i32 @select_eq_zero_negone(i32 signext %a, i32 signext %b) nounwind { 36e5489f72Sgonglingqin; LA32-LABEL: select_eq_zero_negone: 37e5489f72Sgonglingqin; LA32: # %bb.0: 38e5489f72Sgonglingqin; LA32-NEXT: xor $a0, $a0, $a1 39e5489f72Sgonglingqin; LA32-NEXT: sltui $a0, $a0, 1 409d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 41e5489f72Sgonglingqin; LA32-NEXT: ret 42e5489f72Sgonglingqin; 43e5489f72Sgonglingqin; LA64-LABEL: select_eq_zero_negone: 44e5489f72Sgonglingqin; LA64: # %bb.0: 45e5489f72Sgonglingqin; LA64-NEXT: xor $a0, $a0, $a1 46e5489f72Sgonglingqin; LA64-NEXT: sltui $a0, $a0, 1 479d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 48e5489f72Sgonglingqin; LA64-NEXT: ret 49e5489f72Sgonglingqin %1 = icmp eq i32 %a, %b 50e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 51e5489f72Sgonglingqin ret i32 %2 52e5489f72Sgonglingqin} 53e5489f72Sgonglingqin 54e5489f72Sgonglingqindefine signext i32 @select_ne_zero_negone(i32 signext %a, i32 signext %b) nounwind { 55e5489f72Sgonglingqin; LA32-LABEL: select_ne_zero_negone: 56e5489f72Sgonglingqin; LA32: # %bb.0: 57e5489f72Sgonglingqin; LA32-NEXT: xor $a0, $a0, $a1 58e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $zero, $a0 599d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 60e5489f72Sgonglingqin; LA32-NEXT: ret 61e5489f72Sgonglingqin; 62e5489f72Sgonglingqin; LA64-LABEL: select_ne_zero_negone: 63e5489f72Sgonglingqin; LA64: # %bb.0: 64e5489f72Sgonglingqin; LA64-NEXT: xor $a0, $a0, $a1 65e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $zero, $a0 669d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 67e5489f72Sgonglingqin; LA64-NEXT: ret 68e5489f72Sgonglingqin %1 = icmp ne i32 %a, %b 69e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 70e5489f72Sgonglingqin ret i32 %2 71e5489f72Sgonglingqin} 72e5489f72Sgonglingqin 73e5489f72Sgonglingqindefine signext i32 @select_sgt_zero_negone(i32 signext %a, i32 signext %b) nounwind { 74e5489f72Sgonglingqin; LA32-LABEL: select_sgt_zero_negone: 75e5489f72Sgonglingqin; LA32: # %bb.0: 76e5489f72Sgonglingqin; LA32-NEXT: slt $a0, $a1, $a0 779d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 78e5489f72Sgonglingqin; LA32-NEXT: ret 79e5489f72Sgonglingqin; 80e5489f72Sgonglingqin; LA64-LABEL: select_sgt_zero_negone: 81e5489f72Sgonglingqin; LA64: # %bb.0: 82e5489f72Sgonglingqin; LA64-NEXT: slt $a0, $a1, $a0 839d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 84e5489f72Sgonglingqin; LA64-NEXT: ret 85e5489f72Sgonglingqin %1 = icmp sgt i32 %a, %b 86e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 87e5489f72Sgonglingqin ret i32 %2 88e5489f72Sgonglingqin} 89e5489f72Sgonglingqin 90e5489f72Sgonglingqindefine signext i32 @select_slt_zero_negone(i32 signext %a, i32 signext %b) nounwind { 91e5489f72Sgonglingqin; LA32-LABEL: select_slt_zero_negone: 92e5489f72Sgonglingqin; LA32: # %bb.0: 93e5489f72Sgonglingqin; LA32-NEXT: slt $a0, $a0, $a1 949d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 95e5489f72Sgonglingqin; LA32-NEXT: ret 96e5489f72Sgonglingqin; 97e5489f72Sgonglingqin; LA64-LABEL: select_slt_zero_negone: 98e5489f72Sgonglingqin; LA64: # %bb.0: 99e5489f72Sgonglingqin; LA64-NEXT: slt $a0, $a0, $a1 1009d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 101e5489f72Sgonglingqin; LA64-NEXT: ret 102e5489f72Sgonglingqin %1 = icmp slt i32 %a, %b 103e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 104e5489f72Sgonglingqin ret i32 %2 105e5489f72Sgonglingqin} 106e5489f72Sgonglingqin 107e5489f72Sgonglingqindefine signext i32 @select_sge_zero_negone(i32 signext %a, i32 signext %b) nounwind { 108e5489f72Sgonglingqin; LA32-LABEL: select_sge_zero_negone: 109e5489f72Sgonglingqin; LA32: # %bb.0: 110e5489f72Sgonglingqin; LA32-NEXT: slt $a0, $a0, $a1 111e5489f72Sgonglingqin; LA32-NEXT: xori $a0, $a0, 1 1129d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 113e5489f72Sgonglingqin; LA32-NEXT: ret 114e5489f72Sgonglingqin; 115e5489f72Sgonglingqin; LA64-LABEL: select_sge_zero_negone: 116e5489f72Sgonglingqin; LA64: # %bb.0: 117e5489f72Sgonglingqin; LA64-NEXT: slt $a0, $a0, $a1 118e5489f72Sgonglingqin; LA64-NEXT: xori $a0, $a0, 1 1199d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 120e5489f72Sgonglingqin; LA64-NEXT: ret 121e5489f72Sgonglingqin %1 = icmp sge i32 %a, %b 122e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 123e5489f72Sgonglingqin ret i32 %2 124e5489f72Sgonglingqin} 125e5489f72Sgonglingqin 126e5489f72Sgonglingqindefine signext i32 @select_sle_zero_negone(i32 signext %a, i32 signext %b) nounwind { 127e5489f72Sgonglingqin; LA32-LABEL: select_sle_zero_negone: 128e5489f72Sgonglingqin; LA32: # %bb.0: 129e5489f72Sgonglingqin; LA32-NEXT: slt $a0, $a1, $a0 130e5489f72Sgonglingqin; LA32-NEXT: xori $a0, $a0, 1 1319d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 132e5489f72Sgonglingqin; LA32-NEXT: ret 133e5489f72Sgonglingqin; 134e5489f72Sgonglingqin; LA64-LABEL: select_sle_zero_negone: 135e5489f72Sgonglingqin; LA64: # %bb.0: 136e5489f72Sgonglingqin; LA64-NEXT: slt $a0, $a1, $a0 137e5489f72Sgonglingqin; LA64-NEXT: xori $a0, $a0, 1 1389d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 139e5489f72Sgonglingqin; LA64-NEXT: ret 140e5489f72Sgonglingqin %1 = icmp sle i32 %a, %b 141e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 142e5489f72Sgonglingqin ret i32 %2 143e5489f72Sgonglingqin} 144e5489f72Sgonglingqin 145e5489f72Sgonglingqindefine signext i32 @select_ugt_zero_negone(i32 signext %a, i32 signext %b) nounwind { 146e5489f72Sgonglingqin; LA32-LABEL: select_ugt_zero_negone: 147e5489f72Sgonglingqin; LA32: # %bb.0: 148e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $a1, $a0 1499d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 150e5489f72Sgonglingqin; LA32-NEXT: ret 151e5489f72Sgonglingqin; 152e5489f72Sgonglingqin; LA64-LABEL: select_ugt_zero_negone: 153e5489f72Sgonglingqin; LA64: # %bb.0: 154e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $a1, $a0 1559d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 156e5489f72Sgonglingqin; LA64-NEXT: ret 157e5489f72Sgonglingqin %1 = icmp ugt i32 %a, %b 158e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 159e5489f72Sgonglingqin ret i32 %2 160e5489f72Sgonglingqin} 161e5489f72Sgonglingqin 162e5489f72Sgonglingqindefine signext i32 @select_ult_zero_negone(i32 signext %a, i32 signext %b) nounwind { 163e5489f72Sgonglingqin; LA32-LABEL: select_ult_zero_negone: 164e5489f72Sgonglingqin; LA32: # %bb.0: 165e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $a0, $a1 1669d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 167e5489f72Sgonglingqin; LA32-NEXT: ret 168e5489f72Sgonglingqin; 169e5489f72Sgonglingqin; LA64-LABEL: select_ult_zero_negone: 170e5489f72Sgonglingqin; LA64: # %bb.0: 171e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $a0, $a1 1729d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 173e5489f72Sgonglingqin; LA64-NEXT: ret 174e5489f72Sgonglingqin %1 = icmp ult i32 %a, %b 175e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 176e5489f72Sgonglingqin ret i32 %2 177e5489f72Sgonglingqin} 178e5489f72Sgonglingqin 179e5489f72Sgonglingqindefine signext i32 @select_uge_zero_negone(i32 signext %a, i32 signext %b) nounwind { 180e5489f72Sgonglingqin; LA32-LABEL: select_uge_zero_negone: 181e5489f72Sgonglingqin; LA32: # %bb.0: 182e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $a0, $a1 183e5489f72Sgonglingqin; LA32-NEXT: xori $a0, $a0, 1 1849d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 185e5489f72Sgonglingqin; LA32-NEXT: ret 186e5489f72Sgonglingqin; 187e5489f72Sgonglingqin; LA64-LABEL: select_uge_zero_negone: 188e5489f72Sgonglingqin; LA64: # %bb.0: 189e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $a0, $a1 190e5489f72Sgonglingqin; LA64-NEXT: xori $a0, $a0, 1 1919d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 192e5489f72Sgonglingqin; LA64-NEXT: ret 193e5489f72Sgonglingqin %1 = icmp uge i32 %a, %b 194e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 195e5489f72Sgonglingqin ret i32 %2 196e5489f72Sgonglingqin} 197e5489f72Sgonglingqin 198e5489f72Sgonglingqindefine signext i32 @select_ule_zero_negone(i32 signext %a, i32 signext %b) nounwind { 199e5489f72Sgonglingqin; LA32-LABEL: select_ule_zero_negone: 200e5489f72Sgonglingqin; LA32: # %bb.0: 201e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $a1, $a0 202e5489f72Sgonglingqin; LA32-NEXT: xori $a0, $a0, 1 2039d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $zero, $a0 204e5489f72Sgonglingqin; LA32-NEXT: ret 205e5489f72Sgonglingqin; 206e5489f72Sgonglingqin; LA64-LABEL: select_ule_zero_negone: 207e5489f72Sgonglingqin; LA64: # %bb.0: 208e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $a1, $a0 209e5489f72Sgonglingqin; LA64-NEXT: xori $a0, $a0, 1 2109d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $zero, $a0 211e5489f72Sgonglingqin; LA64-NEXT: ret 212e5489f72Sgonglingqin %1 = icmp ule i32 %a, %b 213e5489f72Sgonglingqin %2 = select i1 %1, i32 -1, i32 0 214e5489f72Sgonglingqin ret i32 %2 215e5489f72Sgonglingqin} 216e5489f72Sgonglingqin 217e5489f72Sgonglingqindefine i32 @select_eq_1_2(i32 signext %a, i32 signext %b) { 218e5489f72Sgonglingqin; LA32-LABEL: select_eq_1_2: 219e5489f72Sgonglingqin; LA32: # %bb.0: 220e5489f72Sgonglingqin; LA32-NEXT: xor $a0, $a0, $a1 221e5489f72Sgonglingqin; LA32-NEXT: sltui $a0, $a0, 1 222e5489f72Sgonglingqin; LA32-NEXT: ori $a1, $zero, 2 2239d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $a1, $a0 224e5489f72Sgonglingqin; LA32-NEXT: ret 225e5489f72Sgonglingqin; 226e5489f72Sgonglingqin; LA64-LABEL: select_eq_1_2: 227e5489f72Sgonglingqin; LA64: # %bb.0: 228e5489f72Sgonglingqin; LA64-NEXT: xor $a0, $a0, $a1 229e5489f72Sgonglingqin; LA64-NEXT: sltui $a0, $a0, 1 230e5489f72Sgonglingqin; LA64-NEXT: ori $a1, $zero, 2 2319d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $a1, $a0 232e5489f72Sgonglingqin; LA64-NEXT: ret 233e5489f72Sgonglingqin %1 = icmp eq i32 %a, %b 234e5489f72Sgonglingqin %2 = select i1 %1, i32 1, i32 2 235e5489f72Sgonglingqin ret i32 %2 236e5489f72Sgonglingqin} 237e5489f72Sgonglingqin 238e5489f72Sgonglingqindefine i32 @select_ne_1_2(i32 signext %a, i32 signext %b) { 239e5489f72Sgonglingqin; LA32-LABEL: select_ne_1_2: 240e5489f72Sgonglingqin; LA32: # %bb.0: 241e5489f72Sgonglingqin; LA32-NEXT: xor $a0, $a0, $a1 242e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $zero, $a0 243e5489f72Sgonglingqin; LA32-NEXT: ori $a1, $zero, 2 2449d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $a1, $a0 245e5489f72Sgonglingqin; LA32-NEXT: ret 246e5489f72Sgonglingqin; 247e5489f72Sgonglingqin; LA64-LABEL: select_ne_1_2: 248e5489f72Sgonglingqin; LA64: # %bb.0: 249e5489f72Sgonglingqin; LA64-NEXT: xor $a0, $a0, $a1 250e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $zero, $a0 251e5489f72Sgonglingqin; LA64-NEXT: ori $a1, $zero, 2 2529d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $a1, $a0 253e5489f72Sgonglingqin; LA64-NEXT: ret 254e5489f72Sgonglingqin %1 = icmp ne i32 %a, %b 255e5489f72Sgonglingqin %2 = select i1 %1, i32 1, i32 2 256e5489f72Sgonglingqin ret i32 %2 257e5489f72Sgonglingqin} 258e5489f72Sgonglingqin 259e5489f72Sgonglingqindefine i32 @select_eq_10000_10001(i32 signext %a, i32 signext %b) { 260e5489f72Sgonglingqin; LA32-LABEL: select_eq_10000_10001: 261e5489f72Sgonglingqin; LA32: # %bb.0: 262e5489f72Sgonglingqin; LA32-NEXT: xor $a0, $a0, $a1 263e5489f72Sgonglingqin; LA32-NEXT: sltui $a0, $a0, 1 264e5489f72Sgonglingqin; LA32-NEXT: lu12i.w $a1, 2 2659d8a7f78Sgonglingqin; LA32-NEXT: ori $a1, $a1, 1810 2669d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $a1, $a0 267e5489f72Sgonglingqin; LA32-NEXT: ret 268e5489f72Sgonglingqin; 269e5489f72Sgonglingqin; LA64-LABEL: select_eq_10000_10001: 270e5489f72Sgonglingqin; LA64: # %bb.0: 271e5489f72Sgonglingqin; LA64-NEXT: xor $a0, $a0, $a1 272e5489f72Sgonglingqin; LA64-NEXT: sltui $a0, $a0, 1 273e5489f72Sgonglingqin; LA64-NEXT: lu12i.w $a1, 2 2749d8a7f78Sgonglingqin; LA64-NEXT: ori $a1, $a1, 1810 2759d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $a1, $a0 276e5489f72Sgonglingqin; LA64-NEXT: ret 277e5489f72Sgonglingqin %1 = icmp eq i32 %a, %b 278e5489f72Sgonglingqin %2 = select i1 %1, i32 10001, i32 10002 279e5489f72Sgonglingqin ret i32 %2 280e5489f72Sgonglingqin} 281e5489f72Sgonglingqin 282e5489f72Sgonglingqindefine i32 @select_ne_10001_10002(i32 signext %a, i32 signext %b) { 283e5489f72Sgonglingqin; LA32-LABEL: select_ne_10001_10002: 284e5489f72Sgonglingqin; LA32: # %bb.0: 285e5489f72Sgonglingqin; LA32-NEXT: xor $a0, $a0, $a1 286e5489f72Sgonglingqin; LA32-NEXT: sltu $a0, $zero, $a0 287e5489f72Sgonglingqin; LA32-NEXT: lu12i.w $a1, 2 2889d8a7f78Sgonglingqin; LA32-NEXT: ori $a1, $a1, 1810 2899d8a7f78Sgonglingqin; LA32-NEXT: sub.w $a0, $a1, $a0 290e5489f72Sgonglingqin; LA32-NEXT: ret 291e5489f72Sgonglingqin; 292e5489f72Sgonglingqin; LA64-LABEL: select_ne_10001_10002: 293e5489f72Sgonglingqin; LA64: # %bb.0: 294e5489f72Sgonglingqin; LA64-NEXT: xor $a0, $a0, $a1 295e5489f72Sgonglingqin; LA64-NEXT: sltu $a0, $zero, $a0 296e5489f72Sgonglingqin; LA64-NEXT: lu12i.w $a1, 2 2979d8a7f78Sgonglingqin; LA64-NEXT: ori $a1, $a1, 1810 2989d8a7f78Sgonglingqin; LA64-NEXT: sub.d $a0, $a1, $a0 299e5489f72Sgonglingqin; LA64-NEXT: ret 300e5489f72Sgonglingqin %1 = icmp ne i32 %a, %b 301e5489f72Sgonglingqin %2 = select i1 %1, i32 10001, i32 10002 302e5489f72Sgonglingqin ret i32 %2 303e5489f72Sgonglingqin} 304