1e0ea9fd6SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2e0ea9fd6SCraig Topper; RUN: llc < %s -mtriple=riscv32 -global-isel | FileCheck %s --check-prefix=RV32I 3e0ea9fd6SCraig Topper; RUN: llc < %s -mtriple=riscv64 -global-isel | FileCheck %s --check-prefix=RV64I 4e0ea9fd6SCraig Topper 5e0ea9fd6SCraig Topperdefine i8 @scmp.8.8(i8 signext %x, i8 signext %y) nounwind { 6e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.8: 7e0ea9fd6SCraig Topper; RV32I: # %bb.0: 8de1a423cSCraig Topper; RV32I-NEXT: slt a2, a1, a0 9de1a423cSCraig Topper; RV32I-NEXT: slt a0, a0, a1 10de1a423cSCraig Topper; RV32I-NEXT: sub a0, a2, a0 11e0ea9fd6SCraig Topper; RV32I-NEXT: ret 12e0ea9fd6SCraig Topper; 13e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.8: 14e0ea9fd6SCraig Topper; RV64I: # %bb.0: 15de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 16de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 17de1a423cSCraig Topper; RV64I-NEXT: sub a0, a2, a0 18e0ea9fd6SCraig Topper; RV64I-NEXT: ret 19e0ea9fd6SCraig Topper %1 = call i8 @llvm.scmp(i8 %x, i8 %y) 20e0ea9fd6SCraig Topper ret i8 %1 21e0ea9fd6SCraig Topper} 22e0ea9fd6SCraig Topper 23e0ea9fd6SCraig Topperdefine i8 @scmp.8.16(i16 signext %x, i16 signext %y) nounwind { 24e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.16: 25e0ea9fd6SCraig Topper; RV32I: # %bb.0: 26de1a423cSCraig Topper; RV32I-NEXT: slt a2, a1, a0 27de1a423cSCraig Topper; RV32I-NEXT: slt a0, a0, a1 28de1a423cSCraig Topper; RV32I-NEXT: sub a0, a2, a0 29e0ea9fd6SCraig Topper; RV32I-NEXT: ret 30e0ea9fd6SCraig Topper; 31e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.16: 32e0ea9fd6SCraig Topper; RV64I: # %bb.0: 33de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 34de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 35de1a423cSCraig Topper; RV64I-NEXT: sub a0, a2, a0 36e0ea9fd6SCraig Topper; RV64I-NEXT: ret 37e0ea9fd6SCraig Topper %1 = call i8 @llvm.scmp(i16 %x, i16 %y) 38e0ea9fd6SCraig Topper ret i8 %1 39e0ea9fd6SCraig Topper} 40e0ea9fd6SCraig Topper 41e0ea9fd6SCraig Topperdefine i8 @scmp.8.32(i32 %x, i32 %y) nounwind { 42e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.32: 43e0ea9fd6SCraig Topper; RV32I: # %bb.0: 44de1a423cSCraig Topper; RV32I-NEXT: slt a2, a1, a0 45de1a423cSCraig Topper; RV32I-NEXT: slt a0, a0, a1 46de1a423cSCraig Topper; RV32I-NEXT: sub a0, a2, a0 47e0ea9fd6SCraig Topper; RV32I-NEXT: ret 48e0ea9fd6SCraig Topper; 49e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.32: 50e0ea9fd6SCraig Topper; RV64I: # %bb.0: 51de1a423cSCraig Topper; RV64I-NEXT: sext.w a0, a0 52e0ea9fd6SCraig Topper; RV64I-NEXT: sext.w a1, a1 53de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 54de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 55de1a423cSCraig Topper; RV64I-NEXT: sub a0, a2, a0 56e0ea9fd6SCraig Topper; RV64I-NEXT: ret 57e0ea9fd6SCraig Topper %1 = call i8 @llvm.scmp(i32 %x, i32 %y) 58e0ea9fd6SCraig Topper ret i8 %1 59e0ea9fd6SCraig Topper} 60e0ea9fd6SCraig Topper 61e0ea9fd6SCraig Topperdefine i8 @scmp.8.64(i64 %x, i64 %y) nounwind { 62e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.8.64: 63e0ea9fd6SCraig Topper; RV32I: # %bb.0: 64e0ea9fd6SCraig Topper; RV32I-NEXT: beq a1, a3, .LBB3_2 65e0ea9fd6SCraig Topper; RV32I-NEXT: # %bb.1: 66e0ea9fd6SCraig Topper; RV32I-NEXT: slt a4, a3, a1 67de1a423cSCraig Topper; RV32I-NEXT: slt a0, a1, a3 68de1a423cSCraig Topper; RV32I-NEXT: sub a0, a4, a0 69de1a423cSCraig Topper; RV32I-NEXT: ret 70e0ea9fd6SCraig Topper; RV32I-NEXT: .LBB3_2: 71e0ea9fd6SCraig Topper; RV32I-NEXT: sltu a4, a2, a0 72e0ea9fd6SCraig Topper; RV32I-NEXT: sltu a0, a0, a2 73de1a423cSCraig Topper; RV32I-NEXT: sub a0, a4, a0 74e0ea9fd6SCraig Topper; RV32I-NEXT: ret 75e0ea9fd6SCraig Topper; 76e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.8.64: 77e0ea9fd6SCraig Topper; RV64I: # %bb.0: 78de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 79de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 80de1a423cSCraig Topper; RV64I-NEXT: sub a0, a2, a0 81e0ea9fd6SCraig Topper; RV64I-NEXT: ret 82e0ea9fd6SCraig Topper %1 = call i8 @llvm.scmp(i64 %x, i64 %y) 83e0ea9fd6SCraig Topper ret i8 %1 84e0ea9fd6SCraig Topper} 85e0ea9fd6SCraig Topper 86e0ea9fd6SCraig Topperdefine i32 @scmp.32.32(i32 %x, i32 %y) nounwind { 87e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.32.32: 88e0ea9fd6SCraig Topper; RV32I: # %bb.0: 89de1a423cSCraig Topper; RV32I-NEXT: slt a2, a1, a0 90de1a423cSCraig Topper; RV32I-NEXT: slt a0, a0, a1 91de1a423cSCraig Topper; RV32I-NEXT: sub a0, a2, a0 92e0ea9fd6SCraig Topper; RV32I-NEXT: ret 93e0ea9fd6SCraig Topper; 94e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.32.32: 95e0ea9fd6SCraig Topper; RV64I: # %bb.0: 96de1a423cSCraig Topper; RV64I-NEXT: sext.w a0, a0 97e0ea9fd6SCraig Topper; RV64I-NEXT: sext.w a1, a1 98de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 99de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 100*dde5546bSLuke Quinn; RV64I-NEXT: subw a0, a2, a0 101e0ea9fd6SCraig Topper; RV64I-NEXT: ret 102e0ea9fd6SCraig Topper %1 = call i32 @llvm.scmp(i32 %x, i32 %y) 103e0ea9fd6SCraig Topper ret i32 %1 104e0ea9fd6SCraig Topper} 105e0ea9fd6SCraig Topper 106e0ea9fd6SCraig Topperdefine i32 @scmp.32.64(i64 %x, i64 %y) nounwind { 107e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.32.64: 108e0ea9fd6SCraig Topper; RV32I: # %bb.0: 109e0ea9fd6SCraig Topper; RV32I-NEXT: beq a1, a3, .LBB5_2 110e0ea9fd6SCraig Topper; RV32I-NEXT: # %bb.1: 111e0ea9fd6SCraig Topper; RV32I-NEXT: slt a4, a3, a1 112de1a423cSCraig Topper; RV32I-NEXT: slt a0, a1, a3 113de1a423cSCraig Topper; RV32I-NEXT: sub a0, a4, a0 114de1a423cSCraig Topper; RV32I-NEXT: ret 115e0ea9fd6SCraig Topper; RV32I-NEXT: .LBB5_2: 116e0ea9fd6SCraig Topper; RV32I-NEXT: sltu a4, a2, a0 117e0ea9fd6SCraig Topper; RV32I-NEXT: sltu a0, a0, a2 118de1a423cSCraig Topper; RV32I-NEXT: sub a0, a4, a0 119e0ea9fd6SCraig Topper; RV32I-NEXT: ret 120e0ea9fd6SCraig Topper; 121e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.32.64: 122e0ea9fd6SCraig Topper; RV64I: # %bb.0: 123de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 124de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 125*dde5546bSLuke Quinn; RV64I-NEXT: subw a0, a2, a0 126e0ea9fd6SCraig Topper; RV64I-NEXT: ret 127e0ea9fd6SCraig Topper %1 = call i32 @llvm.scmp(i64 %x, i64 %y) 128e0ea9fd6SCraig Topper ret i32 %1 129e0ea9fd6SCraig Topper} 130e0ea9fd6SCraig Topper 131e0ea9fd6SCraig Topperdefine i64 @scmp.64.64(i64 %x, i64 %y) nounwind { 132e0ea9fd6SCraig Topper; RV32I-LABEL: scmp.64.64: 133e0ea9fd6SCraig Topper; RV32I: # %bb.0: 134e0ea9fd6SCraig Topper; RV32I-NEXT: beq a1, a3, .LBB6_2 135e0ea9fd6SCraig Topper; RV32I-NEXT: # %bb.1: 136de1a423cSCraig Topper; RV32I-NEXT: slt a4, a3, a1 137e0ea9fd6SCraig Topper; RV32I-NEXT: slt a1, a1, a3 138de1a423cSCraig Topper; RV32I-NEXT: j .LBB6_3 139de1a423cSCraig Topper; RV32I-NEXT: .LBB6_2: 140de1a423cSCraig Topper; RV32I-NEXT: sltu a4, a2, a0 141de1a423cSCraig Topper; RV32I-NEXT: sltu a1, a0, a2 142de1a423cSCraig Topper; RV32I-NEXT: .LBB6_3: 143de1a423cSCraig Topper; RV32I-NEXT: sub a0, a4, a1 144de1a423cSCraig Topper; RV32I-NEXT: sltu a1, a4, a1 145de1a423cSCraig Topper; RV32I-NEXT: neg a1, a1 146e0ea9fd6SCraig Topper; RV32I-NEXT: ret 147e0ea9fd6SCraig Topper; 148e0ea9fd6SCraig Topper; RV64I-LABEL: scmp.64.64: 149e0ea9fd6SCraig Topper; RV64I: # %bb.0: 150de1a423cSCraig Topper; RV64I-NEXT: slt a2, a1, a0 151de1a423cSCraig Topper; RV64I-NEXT: slt a0, a0, a1 152de1a423cSCraig Topper; RV64I-NEXT: sub a0, a2, a0 153e0ea9fd6SCraig Topper; RV64I-NEXT: ret 154e0ea9fd6SCraig Topper %1 = call i64 @llvm.scmp(i64 %x, i64 %y) 155e0ea9fd6SCraig Topper ret i64 %1 156e0ea9fd6SCraig Topper} 157