1e094abdeSVolodymyr Vasylkun; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2e094abdeSVolodymyr Vasylkun; RUN: llc < %s -mtriple=riscv32 | FileCheck %s --check-prefix=RV32I 3e094abdeSVolodymyr Vasylkun; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefix=RV64I 4e094abdeSVolodymyr Vasylkun 5e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.8(i8 signext %x, i8 signext %y) nounwind { 6e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.8: 7e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 8e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a2, a0, a1 9e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a1, a0 10e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a2 11e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 12e094abdeSVolodymyr Vasylkun; 13e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.8: 14e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 15e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 16e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 17e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 18e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 19e094abdeSVolodymyr Vasylkun %1 = call i8 @llvm.scmp(i8 %x, i8 %y) 20e094abdeSVolodymyr Vasylkun ret i8 %1 21e094abdeSVolodymyr Vasylkun} 22e094abdeSVolodymyr Vasylkun 23e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.16(i16 signext %x, i16 signext %y) nounwind { 24e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.16: 25e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 26e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a2, a0, a1 27e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a1, a0 28e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a2 29e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 30e094abdeSVolodymyr Vasylkun; 31e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.16: 32e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 33e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 34e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 35e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 36e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 37e094abdeSVolodymyr Vasylkun %1 = call i8 @llvm.scmp(i16 %x, i16 %y) 38e094abdeSVolodymyr Vasylkun ret i8 %1 39e094abdeSVolodymyr Vasylkun} 40e094abdeSVolodymyr Vasylkun 41e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.32(i32 %x, i32 %y) nounwind { 42e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.32: 43e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 44e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a2, a0, a1 45e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a1, a0 46e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a2 47e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 48e094abdeSVolodymyr Vasylkun; 49e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.32: 50e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 51e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sext.w a1, a1 52e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sext.w a0, a0 53e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 54e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 55e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 56e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 57e094abdeSVolodymyr Vasylkun %1 = call i8 @llvm.scmp(i32 %x, i32 %y) 58e094abdeSVolodymyr Vasylkun ret i8 %1 59e094abdeSVolodymyr Vasylkun} 60e094abdeSVolodymyr Vasylkun 61e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.64(i64 %x, i64 %y) nounwind { 62e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.64: 63e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 64e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a1, a3, .LBB3_2 65e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.1: 66e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a4, a1, a3 67e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a3, a1 68e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a4 69e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 70e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB3_2: 71e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a4, a0, a2 72e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a0, a2, a0 73e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a4 74e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 75e094abdeSVolodymyr Vasylkun; 76e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.64: 77e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 78e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 79e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 80e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 81e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 82e094abdeSVolodymyr Vasylkun %1 = call i8 @llvm.scmp(i64 %x, i64 %y) 83e094abdeSVolodymyr Vasylkun ret i8 %1 84e094abdeSVolodymyr Vasylkun} 85e094abdeSVolodymyr Vasylkun 86e094abdeSVolodymyr Vasylkundefine i8 @scmp.8.128(i128 %x, i128 %y) nounwind { 87e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.8.128: 88e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 89e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw a2, 4(a1) 90e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw a4, 8(a1) 91e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw a5, 12(a1) 92e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw a6, 12(a0) 93*14c4f28eSAlex Bradbury; RV32I-NEXT: lw a3, 4(a0) 94e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw a7, 8(a0) 95e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a6, a5, .LBB4_2 96e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.1: 97e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt t2, a6, a5 98e094abdeSVolodymyr Vasylkun; RV32I-NEXT: j .LBB4_3 99e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_2: 100e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu t2, a7, a4 101e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_3: 102e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw a1, 0(a1) 103e094abdeSVolodymyr Vasylkun; RV32I-NEXT: lw t0, 0(a0) 104e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a3, a2, .LBB4_5 105e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.4: 106e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a0, a3, a2 107e094abdeSVolodymyr Vasylkun; RV32I-NEXT: j .LBB4_6 108e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_5: 109e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a0, t0, a1 110e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_6: 111e094abdeSVolodymyr Vasylkun; RV32I-NEXT: xor t1, a6, a5 112e094abdeSVolodymyr Vasylkun; RV32I-NEXT: xor t3, a7, a4 113e094abdeSVolodymyr Vasylkun; RV32I-NEXT: or t1, t3, t1 114e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beqz t1, .LBB4_8 115e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.7: 116e094abdeSVolodymyr Vasylkun; RV32I-NEXT: mv a0, t2 117e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_8: 118e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a6, a5, .LBB4_11 119e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.9: 120e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a4, a5, a6 121e094abdeSVolodymyr Vasylkun; RV32I-NEXT: bne a3, a2, .LBB4_12 122e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_10: 123e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a1, a1, t0 124e094abdeSVolodymyr Vasylkun; RV32I-NEXT: bnez t1, .LBB4_13 125e094abdeSVolodymyr Vasylkun; RV32I-NEXT: j .LBB4_14 126e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_11: 127e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a4, a4, a7 128e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a3, a2, .LBB4_10 129e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_12: 130e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a1, a2, a3 131e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beqz t1, .LBB4_14 132e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_13: 133e094abdeSVolodymyr Vasylkun; RV32I-NEXT: mv a1, a4 134e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB4_14: 135e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a1, a0 136e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 137e094abdeSVolodymyr Vasylkun; 138e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.8.128: 139e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 140e094abdeSVolodymyr Vasylkun; RV64I-NEXT: beq a1, a3, .LBB4_2 141e094abdeSVolodymyr Vasylkun; RV64I-NEXT: # %bb.1: 142e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a4, a1, a3 143e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a3, a1 144e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a4 145e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 146e094abdeSVolodymyr Vasylkun; RV64I-NEXT: .LBB4_2: 147e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sltu a4, a0, a2 148e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sltu a0, a2, a0 149e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a4 150e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 151e094abdeSVolodymyr Vasylkun %1 = call i8 @llvm.scmp(i128 %x, i128 %y) 152e094abdeSVolodymyr Vasylkun ret i8 %1 153e094abdeSVolodymyr Vasylkun} 154e094abdeSVolodymyr Vasylkun 155e094abdeSVolodymyr Vasylkundefine i32 @scmp.32.32(i32 %x, i32 %y) nounwind { 156e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.32.32: 157e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 158e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a2, a0, a1 159e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a1, a0 160e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a2 161e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 162e094abdeSVolodymyr Vasylkun; 163e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.32.32: 164e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 165e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sext.w a1, a1 166e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sext.w a0, a0 167e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 168e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 169e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 170e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 171e094abdeSVolodymyr Vasylkun %1 = call i32 @llvm.scmp(i32 %x, i32 %y) 172e094abdeSVolodymyr Vasylkun ret i32 %1 173e094abdeSVolodymyr Vasylkun} 174e094abdeSVolodymyr Vasylkun 175e094abdeSVolodymyr Vasylkundefine i32 @scmp.32.64(i64 %x, i64 %y) nounwind { 176e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.32.64: 177e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 178e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a1, a3, .LBB6_2 179e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.1: 180e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a4, a1, a3 181e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a3, a1 182e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a4 183e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 184e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB6_2: 185e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a4, a0, a2 186e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a0, a2, a0 187e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a4 188e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 189e094abdeSVolodymyr Vasylkun; 190e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.32.64: 191e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 192e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 193e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 194e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 195e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 196e094abdeSVolodymyr Vasylkun %1 = call i32 @llvm.scmp(i64 %x, i64 %y) 197e094abdeSVolodymyr Vasylkun ret i32 %1 198e094abdeSVolodymyr Vasylkun} 199e094abdeSVolodymyr Vasylkun 200e094abdeSVolodymyr Vasylkundefine i64 @scmp.64.64(i64 %x, i64 %y) nounwind { 201e094abdeSVolodymyr Vasylkun; RV32I-LABEL: scmp.64.64: 202e094abdeSVolodymyr Vasylkun; RV32I: # %bb.0: 203e094abdeSVolodymyr Vasylkun; RV32I-NEXT: beq a1, a3, .LBB7_2 204e094abdeSVolodymyr Vasylkun; RV32I-NEXT: # %bb.1: 205e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a4, a1, a3 206e094abdeSVolodymyr Vasylkun; RV32I-NEXT: slt a0, a3, a1 207e094abdeSVolodymyr Vasylkun; RV32I-NEXT: j .LBB7_3 208e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB7_2: 209e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a4, a0, a2 210e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sltu a0, a2, a0 211e094abdeSVolodymyr Vasylkun; RV32I-NEXT: .LBB7_3: 212e094abdeSVolodymyr Vasylkun; RV32I-NEXT: sub a0, a0, a4 213e094abdeSVolodymyr Vasylkun; RV32I-NEXT: srai a1, a0, 31 214e094abdeSVolodymyr Vasylkun; RV32I-NEXT: ret 215e094abdeSVolodymyr Vasylkun; 216e094abdeSVolodymyr Vasylkun; RV64I-LABEL: scmp.64.64: 217e094abdeSVolodymyr Vasylkun; RV64I: # %bb.0: 218e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a2, a0, a1 219e094abdeSVolodymyr Vasylkun; RV64I-NEXT: slt a0, a1, a0 220e094abdeSVolodymyr Vasylkun; RV64I-NEXT: sub a0, a0, a2 221e094abdeSVolodymyr Vasylkun; RV64I-NEXT: ret 222e094abdeSVolodymyr Vasylkun %1 = call i64 @llvm.scmp(i64 %x, i64 %y) 223e094abdeSVolodymyr Vasylkun ret i64 %1 224e094abdeSVolodymyr Vasylkun} 225