1be51ddf6SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2be51ddf6SCraig Topper; RUN: llc < %s -mtriple=riscv32 | FileCheck %s --check-prefixes=NOZBB,RV32I 3be51ddf6SCraig Topper; RUN: llc < %s -mtriple=riscv64 | FileCheck %s --check-prefixes=NOZBB,RV64I 4be51ddf6SCraig Topper; RUN: llc < %s -mtriple=riscv32 -mattr=+zbb | \ 5be51ddf6SCraig Topper; RUN: FileCheck %s --check-prefixes=ZBB,RV32ZBB 6be51ddf6SCraig Topper; RUN: llc < %s -mtriple=riscv64 -mattr=+zbb | \ 7be51ddf6SCraig Topper; RUN: FileCheck %s --check-prefixes=ZBB,RV64ZBB 8be51ddf6SCraig Topper 9be51ddf6SCraig Topper; Basic tests. 10be51ddf6SCraig Topper 11be51ddf6SCraig Topperdeclare i8 @llvm.smax.i8(i8 %a, i8 %b) readnone 12be51ddf6SCraig Topper 13be51ddf6SCraig Topperdefine signext i8 @smax_i8(i8 signext %a, i8 signext %b) { 14be51ddf6SCraig Topper; NOZBB-LABEL: smax_i8: 15be51ddf6SCraig Topper; NOZBB: # %bb.0: 16be51ddf6SCraig Topper; NOZBB-NEXT: blt a1, a0, .LBB0_2 17be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 18be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 19be51ddf6SCraig Topper; NOZBB-NEXT: .LBB0_2: 20be51ddf6SCraig Topper; NOZBB-NEXT: ret 21be51ddf6SCraig Topper; 22be51ddf6SCraig Topper; ZBB-LABEL: smax_i8: 23be51ddf6SCraig Topper; ZBB: # %bb.0: 24be51ddf6SCraig Topper; ZBB-NEXT: max a0, a0, a1 25be51ddf6SCraig Topper; ZBB-NEXT: ret 26be51ddf6SCraig Topper %c = call i8 @llvm.smax.i8(i8 %a, i8 %b) 27be51ddf6SCraig Topper ret i8 %c 28be51ddf6SCraig Topper} 29be51ddf6SCraig Topper 30be51ddf6SCraig Topperdeclare i16 @llvm.smax.i16(i16 %a, i16 %b) readnone 31be51ddf6SCraig Topper 32be51ddf6SCraig Topperdefine signext i16 @smax_i16(i16 signext %a, i16 signext %b) { 33be51ddf6SCraig Topper; NOZBB-LABEL: smax_i16: 34be51ddf6SCraig Topper; NOZBB: # %bb.0: 35be51ddf6SCraig Topper; NOZBB-NEXT: blt a1, a0, .LBB1_2 36be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 37be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 38be51ddf6SCraig Topper; NOZBB-NEXT: .LBB1_2: 39be51ddf6SCraig Topper; NOZBB-NEXT: ret 40be51ddf6SCraig Topper; 41be51ddf6SCraig Topper; ZBB-LABEL: smax_i16: 42be51ddf6SCraig Topper; ZBB: # %bb.0: 43be51ddf6SCraig Topper; ZBB-NEXT: max a0, a0, a1 44be51ddf6SCraig Topper; ZBB-NEXT: ret 45be51ddf6SCraig Topper %c = call i16 @llvm.smax.i16(i16 %a, i16 %b) 46be51ddf6SCraig Topper ret i16 %c 47be51ddf6SCraig Topper} 48be51ddf6SCraig Topper 49be51ddf6SCraig Topperdeclare i32 @llvm.smax.i32(i32 %a, i32 %b) readnone 50be51ddf6SCraig Topper 51be51ddf6SCraig Topperdefine signext i32 @smax_i32(i32 signext %a, i32 signext %b) { 52be51ddf6SCraig Topper; NOZBB-LABEL: smax_i32: 53be51ddf6SCraig Topper; NOZBB: # %bb.0: 54be51ddf6SCraig Topper; NOZBB-NEXT: blt a1, a0, .LBB2_2 55be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 56be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 57be51ddf6SCraig Topper; NOZBB-NEXT: .LBB2_2: 58be51ddf6SCraig Topper; NOZBB-NEXT: ret 59be51ddf6SCraig Topper; 60be51ddf6SCraig Topper; ZBB-LABEL: smax_i32: 61be51ddf6SCraig Topper; ZBB: # %bb.0: 62be51ddf6SCraig Topper; ZBB-NEXT: max a0, a0, a1 63be51ddf6SCraig Topper; ZBB-NEXT: ret 64be51ddf6SCraig Topper %c = call i32 @llvm.smax.i32(i32 %a, i32 %b) 65be51ddf6SCraig Topper ret i32 %c 66be51ddf6SCraig Topper} 67be51ddf6SCraig Topper 68be51ddf6SCraig Topperdeclare i64 @llvm.smax.i64(i64 %a, i64 %b) readnone 69be51ddf6SCraig Topper 70be51ddf6SCraig Topperdefine i64 @smax_i64(i64 %a, i64 %b) { 71be51ddf6SCraig Topper; RV32I-LABEL: smax_i64: 72be51ddf6SCraig Topper; RV32I: # %bb.0: 73bc7f11ccSEli Friedman; RV32I-NEXT: beq a1, a3, .LBB3_2 74be51ddf6SCraig Topper; RV32I-NEXT: # %bb.1: 75bc7f11ccSEli Friedman; RV32I-NEXT: slt a4, a3, a1 76bc7f11ccSEli Friedman; RV32I-NEXT: beqz a4, .LBB3_3 77bc7f11ccSEli Friedman; RV32I-NEXT: j .LBB3_4 78be51ddf6SCraig Topper; RV32I-NEXT: .LBB3_2: 79bc7f11ccSEli Friedman; RV32I-NEXT: sltu a4, a2, a0 80bc7f11ccSEli Friedman; RV32I-NEXT: bnez a4, .LBB3_4 81be51ddf6SCraig Topper; RV32I-NEXT: .LBB3_3: 82be51ddf6SCraig Topper; RV32I-NEXT: mv a0, a2 83be51ddf6SCraig Topper; RV32I-NEXT: mv a1, a3 84bc7f11ccSEli Friedman; RV32I-NEXT: .LBB3_4: 85be51ddf6SCraig Topper; RV32I-NEXT: ret 86be51ddf6SCraig Topper; 87be51ddf6SCraig Topper; RV64I-LABEL: smax_i64: 88be51ddf6SCraig Topper; RV64I: # %bb.0: 89be51ddf6SCraig Topper; RV64I-NEXT: blt a1, a0, .LBB3_2 90be51ddf6SCraig Topper; RV64I-NEXT: # %bb.1: 91be51ddf6SCraig Topper; RV64I-NEXT: mv a0, a1 92be51ddf6SCraig Topper; RV64I-NEXT: .LBB3_2: 93be51ddf6SCraig Topper; RV64I-NEXT: ret 94be51ddf6SCraig Topper; 95be51ddf6SCraig Topper; RV32ZBB-LABEL: smax_i64: 96be51ddf6SCraig Topper; RV32ZBB: # %bb.0: 97bc7f11ccSEli Friedman; RV32ZBB-NEXT: beq a1, a3, .LBB3_2 98be51ddf6SCraig Topper; RV32ZBB-NEXT: # %bb.1: 99bc7f11ccSEli Friedman; RV32ZBB-NEXT: slt a4, a3, a1 100bc7f11ccSEli Friedman; RV32ZBB-NEXT: beqz a4, .LBB3_3 101bc7f11ccSEli Friedman; RV32ZBB-NEXT: j .LBB3_4 102be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB3_2: 103bc7f11ccSEli Friedman; RV32ZBB-NEXT: sltu a4, a2, a0 104bc7f11ccSEli Friedman; RV32ZBB-NEXT: bnez a4, .LBB3_4 105be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB3_3: 106be51ddf6SCraig Topper; RV32ZBB-NEXT: mv a0, a2 107bc7f11ccSEli Friedman; RV32ZBB-NEXT: mv a1, a3 108be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB3_4: 109be51ddf6SCraig Topper; RV32ZBB-NEXT: ret 110be51ddf6SCraig Topper; 111be51ddf6SCraig Topper; RV64ZBB-LABEL: smax_i64: 112be51ddf6SCraig Topper; RV64ZBB: # %bb.0: 113be51ddf6SCraig Topper; RV64ZBB-NEXT: max a0, a0, a1 114be51ddf6SCraig Topper; RV64ZBB-NEXT: ret 115be51ddf6SCraig Topper %c = call i64 @llvm.smax.i64(i64 %a, i64 %b) 116be51ddf6SCraig Topper ret i64 %c 117be51ddf6SCraig Topper} 118be51ddf6SCraig Topper 119be51ddf6SCraig Topperdeclare i8 @llvm.smin.i8(i8 %a, i8 %b) readnone 120be51ddf6SCraig Topper 121be51ddf6SCraig Topperdefine signext i8 @smin_i8(i8 signext %a, i8 signext %b) { 122be51ddf6SCraig Topper; NOZBB-LABEL: smin_i8: 123be51ddf6SCraig Topper; NOZBB: # %bb.0: 124be51ddf6SCraig Topper; NOZBB-NEXT: blt a0, a1, .LBB4_2 125be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 126be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 127be51ddf6SCraig Topper; NOZBB-NEXT: .LBB4_2: 128be51ddf6SCraig Topper; NOZBB-NEXT: ret 129be51ddf6SCraig Topper; 130be51ddf6SCraig Topper; ZBB-LABEL: smin_i8: 131be51ddf6SCraig Topper; ZBB: # %bb.0: 132be51ddf6SCraig Topper; ZBB-NEXT: min a0, a0, a1 133be51ddf6SCraig Topper; ZBB-NEXT: ret 134be51ddf6SCraig Topper %c = call i8 @llvm.smin.i8(i8 %a, i8 %b) 135be51ddf6SCraig Topper ret i8 %c 136be51ddf6SCraig Topper} 137be51ddf6SCraig Topper 138be51ddf6SCraig Topperdeclare i16 @llvm.smin.i16(i16 %a, i16 %b) readnone 139be51ddf6SCraig Topper 140be51ddf6SCraig Topperdefine signext i16 @smin_i16(i16 signext %a, i16 signext %b) { 141be51ddf6SCraig Topper; NOZBB-LABEL: smin_i16: 142be51ddf6SCraig Topper; NOZBB: # %bb.0: 143be51ddf6SCraig Topper; NOZBB-NEXT: blt a0, a1, .LBB5_2 144be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 145be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 146be51ddf6SCraig Topper; NOZBB-NEXT: .LBB5_2: 147be51ddf6SCraig Topper; NOZBB-NEXT: ret 148be51ddf6SCraig Topper; 149be51ddf6SCraig Topper; ZBB-LABEL: smin_i16: 150be51ddf6SCraig Topper; ZBB: # %bb.0: 151be51ddf6SCraig Topper; ZBB-NEXT: min a0, a0, a1 152be51ddf6SCraig Topper; ZBB-NEXT: ret 153be51ddf6SCraig Topper %c = call i16 @llvm.smin.i16(i16 %a, i16 %b) 154be51ddf6SCraig Topper ret i16 %c 155be51ddf6SCraig Topper} 156be51ddf6SCraig Topper 157be51ddf6SCraig Topperdeclare i32 @llvm.smin.i32(i32 %a, i32 %b) readnone 158be51ddf6SCraig Topper 159be51ddf6SCraig Topperdefine signext i32 @smin_i32(i32 signext %a, i32 signext %b) { 160be51ddf6SCraig Topper; NOZBB-LABEL: smin_i32: 161be51ddf6SCraig Topper; NOZBB: # %bb.0: 162be51ddf6SCraig Topper; NOZBB-NEXT: blt a0, a1, .LBB6_2 163be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 164be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 165be51ddf6SCraig Topper; NOZBB-NEXT: .LBB6_2: 166be51ddf6SCraig Topper; NOZBB-NEXT: ret 167be51ddf6SCraig Topper; 168be51ddf6SCraig Topper; ZBB-LABEL: smin_i32: 169be51ddf6SCraig Topper; ZBB: # %bb.0: 170be51ddf6SCraig Topper; ZBB-NEXT: min a0, a0, a1 171be51ddf6SCraig Topper; ZBB-NEXT: ret 172be51ddf6SCraig Topper %c = call i32 @llvm.smin.i32(i32 %a, i32 %b) 173be51ddf6SCraig Topper ret i32 %c 174be51ddf6SCraig Topper} 175be51ddf6SCraig Topper 176be51ddf6SCraig Topperdeclare i64 @llvm.smin.i64(i64 %a, i64 %b) readnone 177be51ddf6SCraig Topper 178be51ddf6SCraig Topperdefine i64 @smin_i64(i64 %a, i64 %b) { 179be51ddf6SCraig Topper; RV32I-LABEL: smin_i64: 180be51ddf6SCraig Topper; RV32I: # %bb.0: 181bc7f11ccSEli Friedman; RV32I-NEXT: beq a1, a3, .LBB7_2 182be51ddf6SCraig Topper; RV32I-NEXT: # %bb.1: 183bc7f11ccSEli Friedman; RV32I-NEXT: slt a4, a1, a3 184bc7f11ccSEli Friedman; RV32I-NEXT: beqz a4, .LBB7_3 185bc7f11ccSEli Friedman; RV32I-NEXT: j .LBB7_4 186be51ddf6SCraig Topper; RV32I-NEXT: .LBB7_2: 187bc7f11ccSEli Friedman; RV32I-NEXT: sltu a4, a0, a2 188bc7f11ccSEli Friedman; RV32I-NEXT: bnez a4, .LBB7_4 189be51ddf6SCraig Topper; RV32I-NEXT: .LBB7_3: 190be51ddf6SCraig Topper; RV32I-NEXT: mv a0, a2 191be51ddf6SCraig Topper; RV32I-NEXT: mv a1, a3 192bc7f11ccSEli Friedman; RV32I-NEXT: .LBB7_4: 193be51ddf6SCraig Topper; RV32I-NEXT: ret 194be51ddf6SCraig Topper; 195be51ddf6SCraig Topper; RV64I-LABEL: smin_i64: 196be51ddf6SCraig Topper; RV64I: # %bb.0: 197be51ddf6SCraig Topper; RV64I-NEXT: blt a0, a1, .LBB7_2 198be51ddf6SCraig Topper; RV64I-NEXT: # %bb.1: 199be51ddf6SCraig Topper; RV64I-NEXT: mv a0, a1 200be51ddf6SCraig Topper; RV64I-NEXT: .LBB7_2: 201be51ddf6SCraig Topper; RV64I-NEXT: ret 202be51ddf6SCraig Topper; 203be51ddf6SCraig Topper; RV32ZBB-LABEL: smin_i64: 204be51ddf6SCraig Topper; RV32ZBB: # %bb.0: 205bc7f11ccSEli Friedman; RV32ZBB-NEXT: beq a1, a3, .LBB7_2 206be51ddf6SCraig Topper; RV32ZBB-NEXT: # %bb.1: 207bc7f11ccSEli Friedman; RV32ZBB-NEXT: slt a4, a1, a3 208bc7f11ccSEli Friedman; RV32ZBB-NEXT: beqz a4, .LBB7_3 209bc7f11ccSEli Friedman; RV32ZBB-NEXT: j .LBB7_4 210be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB7_2: 211bc7f11ccSEli Friedman; RV32ZBB-NEXT: sltu a4, a0, a2 212bc7f11ccSEli Friedman; RV32ZBB-NEXT: bnez a4, .LBB7_4 213be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB7_3: 214be51ddf6SCraig Topper; RV32ZBB-NEXT: mv a0, a2 215bc7f11ccSEli Friedman; RV32ZBB-NEXT: mv a1, a3 216be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB7_4: 217be51ddf6SCraig Topper; RV32ZBB-NEXT: ret 218be51ddf6SCraig Topper; 219be51ddf6SCraig Topper; RV64ZBB-LABEL: smin_i64: 220be51ddf6SCraig Topper; RV64ZBB: # %bb.0: 221be51ddf6SCraig Topper; RV64ZBB-NEXT: min a0, a0, a1 222be51ddf6SCraig Topper; RV64ZBB-NEXT: ret 223be51ddf6SCraig Topper %c = call i64 @llvm.smin.i64(i64 %a, i64 %b) 224be51ddf6SCraig Topper ret i64 %c 225be51ddf6SCraig Topper} 226be51ddf6SCraig Topper 227be51ddf6SCraig Topperdeclare i8 @llvm.umax.i8(i8 %a, i8 %b) readnone 228be51ddf6SCraig Topper 229be51ddf6SCraig Topperdefine i8 @umax_i8(i8 zeroext %a, i8 zeroext %b) { 230be51ddf6SCraig Topper; NOZBB-LABEL: umax_i8: 231be51ddf6SCraig Topper; NOZBB: # %bb.0: 232be51ddf6SCraig Topper; NOZBB-NEXT: bltu a1, a0, .LBB8_2 233be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 234be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 235be51ddf6SCraig Topper; NOZBB-NEXT: .LBB8_2: 236be51ddf6SCraig Topper; NOZBB-NEXT: ret 237be51ddf6SCraig Topper; 238be51ddf6SCraig Topper; ZBB-LABEL: umax_i8: 239be51ddf6SCraig Topper; ZBB: # %bb.0: 240be51ddf6SCraig Topper; ZBB-NEXT: maxu a0, a0, a1 241be51ddf6SCraig Topper; ZBB-NEXT: ret 242be51ddf6SCraig Topper %c = call i8 @llvm.umax.i8(i8 %a, i8 %b) 243be51ddf6SCraig Topper ret i8 %c 244be51ddf6SCraig Topper} 245be51ddf6SCraig Topper 246be51ddf6SCraig Topperdeclare i16 @llvm.umax.i16(i16 %a, i16 %b) readnone 247be51ddf6SCraig Topper 248be51ddf6SCraig Topperdefine i16 @umax_i16(i16 zeroext %a, i16 zeroext %b) { 249be51ddf6SCraig Topper; NOZBB-LABEL: umax_i16: 250be51ddf6SCraig Topper; NOZBB: # %bb.0: 251be51ddf6SCraig Topper; NOZBB-NEXT: bltu a1, a0, .LBB9_2 252be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 253be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 254be51ddf6SCraig Topper; NOZBB-NEXT: .LBB9_2: 255be51ddf6SCraig Topper; NOZBB-NEXT: ret 256be51ddf6SCraig Topper; 257be51ddf6SCraig Topper; ZBB-LABEL: umax_i16: 258be51ddf6SCraig Topper; ZBB: # %bb.0: 259be51ddf6SCraig Topper; ZBB-NEXT: maxu a0, a0, a1 260be51ddf6SCraig Topper; ZBB-NEXT: ret 261be51ddf6SCraig Topper %c = call i16 @llvm.umax.i16(i16 %a, i16 %b) 262be51ddf6SCraig Topper ret i16 %c 263be51ddf6SCraig Topper} 264be51ddf6SCraig Topper 265be51ddf6SCraig Topperdeclare i32 @llvm.umax.i32(i32 %a, i32 %b) readnone 266be51ddf6SCraig Topper 267be51ddf6SCraig Topperdefine signext i32 @umax_i32(i32 signext %a, i32 signext %b) { 268be51ddf6SCraig Topper; NOZBB-LABEL: umax_i32: 269be51ddf6SCraig Topper; NOZBB: # %bb.0: 270be51ddf6SCraig Topper; NOZBB-NEXT: bltu a1, a0, .LBB10_2 271be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 272be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 273be51ddf6SCraig Topper; NOZBB-NEXT: .LBB10_2: 274be51ddf6SCraig Topper; NOZBB-NEXT: ret 275be51ddf6SCraig Topper; 276be51ddf6SCraig Topper; ZBB-LABEL: umax_i32: 277be51ddf6SCraig Topper; ZBB: # %bb.0: 278be51ddf6SCraig Topper; ZBB-NEXT: maxu a0, a0, a1 279be51ddf6SCraig Topper; ZBB-NEXT: ret 280be51ddf6SCraig Topper %c = call i32 @llvm.umax.i32(i32 %a, i32 %b) 281be51ddf6SCraig Topper ret i32 %c 282be51ddf6SCraig Topper} 283be51ddf6SCraig Topper 284be51ddf6SCraig Topperdeclare i64 @llvm.umax.i64(i64 %a, i64 %b) readnone 285be51ddf6SCraig Topper 286be51ddf6SCraig Topperdefine i64 @umax_i64(i64 %a, i64 %b) { 287be51ddf6SCraig Topper; RV32I-LABEL: umax_i64: 288be51ddf6SCraig Topper; RV32I: # %bb.0: 289bc7f11ccSEli Friedman; RV32I-NEXT: beq a1, a3, .LBB11_2 290be51ddf6SCraig Topper; RV32I-NEXT: # %bb.1: 291bc7f11ccSEli Friedman; RV32I-NEXT: sltu a4, a3, a1 292bc7f11ccSEli Friedman; RV32I-NEXT: beqz a4, .LBB11_3 293bc7f11ccSEli Friedman; RV32I-NEXT: j .LBB11_4 294be51ddf6SCraig Topper; RV32I-NEXT: .LBB11_2: 295bc7f11ccSEli Friedman; RV32I-NEXT: sltu a4, a2, a0 296bc7f11ccSEli Friedman; RV32I-NEXT: bnez a4, .LBB11_4 297be51ddf6SCraig Topper; RV32I-NEXT: .LBB11_3: 298be51ddf6SCraig Topper; RV32I-NEXT: mv a0, a2 299be51ddf6SCraig Topper; RV32I-NEXT: mv a1, a3 300bc7f11ccSEli Friedman; RV32I-NEXT: .LBB11_4: 301be51ddf6SCraig Topper; RV32I-NEXT: ret 302be51ddf6SCraig Topper; 303be51ddf6SCraig Topper; RV64I-LABEL: umax_i64: 304be51ddf6SCraig Topper; RV64I: # %bb.0: 305be51ddf6SCraig Topper; RV64I-NEXT: bltu a1, a0, .LBB11_2 306be51ddf6SCraig Topper; RV64I-NEXT: # %bb.1: 307be51ddf6SCraig Topper; RV64I-NEXT: mv a0, a1 308be51ddf6SCraig Topper; RV64I-NEXT: .LBB11_2: 309be51ddf6SCraig Topper; RV64I-NEXT: ret 310be51ddf6SCraig Topper; 311be51ddf6SCraig Topper; RV32ZBB-LABEL: umax_i64: 312be51ddf6SCraig Topper; RV32ZBB: # %bb.0: 313bc7f11ccSEli Friedman; RV32ZBB-NEXT: beq a1, a3, .LBB11_2 314be51ddf6SCraig Topper; RV32ZBB-NEXT: # %bb.1: 315bc7f11ccSEli Friedman; RV32ZBB-NEXT: sltu a4, a3, a1 316bc7f11ccSEli Friedman; RV32ZBB-NEXT: beqz a4, .LBB11_3 317bc7f11ccSEli Friedman; RV32ZBB-NEXT: j .LBB11_4 318be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB11_2: 319bc7f11ccSEli Friedman; RV32ZBB-NEXT: sltu a4, a2, a0 320bc7f11ccSEli Friedman; RV32ZBB-NEXT: bnez a4, .LBB11_4 321be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB11_3: 322be51ddf6SCraig Topper; RV32ZBB-NEXT: mv a0, a2 323bc7f11ccSEli Friedman; RV32ZBB-NEXT: mv a1, a3 324be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB11_4: 325be51ddf6SCraig Topper; RV32ZBB-NEXT: ret 326be51ddf6SCraig Topper; 327be51ddf6SCraig Topper; RV64ZBB-LABEL: umax_i64: 328be51ddf6SCraig Topper; RV64ZBB: # %bb.0: 329be51ddf6SCraig Topper; RV64ZBB-NEXT: maxu a0, a0, a1 330be51ddf6SCraig Topper; RV64ZBB-NEXT: ret 331be51ddf6SCraig Topper %c = call i64 @llvm.umax.i64(i64 %a, i64 %b) 332be51ddf6SCraig Topper ret i64 %c 333be51ddf6SCraig Topper} 334be51ddf6SCraig Topper 335be51ddf6SCraig Topperdeclare i8 @llvm.umin.i8(i8 %a, i8 %b) readnone 336be51ddf6SCraig Topper 337be51ddf6SCraig Topperdefine zeroext i8 @umin_i8(i8 zeroext %a, i8 zeroext %b) { 338be51ddf6SCraig Topper; NOZBB-LABEL: umin_i8: 339be51ddf6SCraig Topper; NOZBB: # %bb.0: 340be51ddf6SCraig Topper; NOZBB-NEXT: bltu a0, a1, .LBB12_2 341be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 342be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 343be51ddf6SCraig Topper; NOZBB-NEXT: .LBB12_2: 344be51ddf6SCraig Topper; NOZBB-NEXT: ret 345be51ddf6SCraig Topper; 346be51ddf6SCraig Topper; ZBB-LABEL: umin_i8: 347be51ddf6SCraig Topper; ZBB: # %bb.0: 348be51ddf6SCraig Topper; ZBB-NEXT: minu a0, a0, a1 349be51ddf6SCraig Topper; ZBB-NEXT: ret 350be51ddf6SCraig Topper %c = call i8 @llvm.umin.i8(i8 %a, i8 %b) 351be51ddf6SCraig Topper ret i8 %c 352be51ddf6SCraig Topper} 353be51ddf6SCraig Topper 354be51ddf6SCraig Topperdeclare i16 @llvm.umin.i16(i16 %a, i16 %b) readnone 355be51ddf6SCraig Topper 356be51ddf6SCraig Topperdefine zeroext i16 @umin_i16(i16 zeroext %a, i16 zeroext %b) { 357be51ddf6SCraig Topper; NOZBB-LABEL: umin_i16: 358be51ddf6SCraig Topper; NOZBB: # %bb.0: 359be51ddf6SCraig Topper; NOZBB-NEXT: bltu a0, a1, .LBB13_2 360be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 361be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 362be51ddf6SCraig Topper; NOZBB-NEXT: .LBB13_2: 363be51ddf6SCraig Topper; NOZBB-NEXT: ret 364be51ddf6SCraig Topper; 365be51ddf6SCraig Topper; ZBB-LABEL: umin_i16: 366be51ddf6SCraig Topper; ZBB: # %bb.0: 367be51ddf6SCraig Topper; ZBB-NEXT: minu a0, a0, a1 368be51ddf6SCraig Topper; ZBB-NEXT: ret 369be51ddf6SCraig Topper %c = call i16 @llvm.umin.i16(i16 %a, i16 %b) 370be51ddf6SCraig Topper ret i16 %c 371be51ddf6SCraig Topper} 372be51ddf6SCraig Topper 373be51ddf6SCraig Topperdeclare i32 @llvm.umin.i32(i32 %a, i32 %b) readnone 374be51ddf6SCraig Topper 375be51ddf6SCraig Topperdefine signext i32 @umin_i32(i32 signext %a, i32 signext %b) { 376be51ddf6SCraig Topper; NOZBB-LABEL: umin_i32: 377be51ddf6SCraig Topper; NOZBB: # %bb.0: 378be51ddf6SCraig Topper; NOZBB-NEXT: bltu a0, a1, .LBB14_2 379be51ddf6SCraig Topper; NOZBB-NEXT: # %bb.1: 380be51ddf6SCraig Topper; NOZBB-NEXT: mv a0, a1 381be51ddf6SCraig Topper; NOZBB-NEXT: .LBB14_2: 382be51ddf6SCraig Topper; NOZBB-NEXT: ret 383be51ddf6SCraig Topper; 384be51ddf6SCraig Topper; ZBB-LABEL: umin_i32: 385be51ddf6SCraig Topper; ZBB: # %bb.0: 386be51ddf6SCraig Topper; ZBB-NEXT: minu a0, a0, a1 387be51ddf6SCraig Topper; ZBB-NEXT: ret 388be51ddf6SCraig Topper %c = call i32 @llvm.umin.i32(i32 %a, i32 %b) 389be51ddf6SCraig Topper ret i32 %c 390be51ddf6SCraig Topper} 391be51ddf6SCraig Topper 392be51ddf6SCraig Topperdeclare i64 @llvm.umin.i64(i64 %a, i64 %b) readnone 393be51ddf6SCraig Topper 394be51ddf6SCraig Topperdefine i64 @umin_i64(i64 %a, i64 %b) { 395be51ddf6SCraig Topper; RV32I-LABEL: umin_i64: 396be51ddf6SCraig Topper; RV32I: # %bb.0: 397bc7f11ccSEli Friedman; RV32I-NEXT: beq a1, a3, .LBB15_2 398be51ddf6SCraig Topper; RV32I-NEXT: # %bb.1: 399bc7f11ccSEli Friedman; RV32I-NEXT: sltu a4, a1, a3 400bc7f11ccSEli Friedman; RV32I-NEXT: beqz a4, .LBB15_3 401bc7f11ccSEli Friedman; RV32I-NEXT: j .LBB15_4 402be51ddf6SCraig Topper; RV32I-NEXT: .LBB15_2: 403bc7f11ccSEli Friedman; RV32I-NEXT: sltu a4, a0, a2 404bc7f11ccSEli Friedman; RV32I-NEXT: bnez a4, .LBB15_4 405be51ddf6SCraig Topper; RV32I-NEXT: .LBB15_3: 406be51ddf6SCraig Topper; RV32I-NEXT: mv a0, a2 407be51ddf6SCraig Topper; RV32I-NEXT: mv a1, a3 408bc7f11ccSEli Friedman; RV32I-NEXT: .LBB15_4: 409be51ddf6SCraig Topper; RV32I-NEXT: ret 410be51ddf6SCraig Topper; 411be51ddf6SCraig Topper; RV64I-LABEL: umin_i64: 412be51ddf6SCraig Topper; RV64I: # %bb.0: 413be51ddf6SCraig Topper; RV64I-NEXT: bltu a0, a1, .LBB15_2 414be51ddf6SCraig Topper; RV64I-NEXT: # %bb.1: 415be51ddf6SCraig Topper; RV64I-NEXT: mv a0, a1 416be51ddf6SCraig Topper; RV64I-NEXT: .LBB15_2: 417be51ddf6SCraig Topper; RV64I-NEXT: ret 418be51ddf6SCraig Topper; 419be51ddf6SCraig Topper; RV32ZBB-LABEL: umin_i64: 420be51ddf6SCraig Topper; RV32ZBB: # %bb.0: 421bc7f11ccSEli Friedman; RV32ZBB-NEXT: beq a1, a3, .LBB15_2 422be51ddf6SCraig Topper; RV32ZBB-NEXT: # %bb.1: 423bc7f11ccSEli Friedman; RV32ZBB-NEXT: sltu a4, a1, a3 424bc7f11ccSEli Friedman; RV32ZBB-NEXT: beqz a4, .LBB15_3 425bc7f11ccSEli Friedman; RV32ZBB-NEXT: j .LBB15_4 426be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB15_2: 427bc7f11ccSEli Friedman; RV32ZBB-NEXT: sltu a4, a0, a2 428bc7f11ccSEli Friedman; RV32ZBB-NEXT: bnez a4, .LBB15_4 429be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB15_3: 430be51ddf6SCraig Topper; RV32ZBB-NEXT: mv a0, a2 431bc7f11ccSEli Friedman; RV32ZBB-NEXT: mv a1, a3 432be51ddf6SCraig Topper; RV32ZBB-NEXT: .LBB15_4: 433be51ddf6SCraig Topper; RV32ZBB-NEXT: ret 434be51ddf6SCraig Topper; 435be51ddf6SCraig Topper; RV64ZBB-LABEL: umin_i64: 436be51ddf6SCraig Topper; RV64ZBB: # %bb.0: 437be51ddf6SCraig Topper; RV64ZBB-NEXT: minu a0, a0, a1 438be51ddf6SCraig Topper; RV64ZBB-NEXT: ret 439be51ddf6SCraig Topper %c = call i64 @llvm.umin.i64(i64 %a, i64 %b) 440be51ddf6SCraig Topper ret i64 %c 441be51ddf6SCraig Topper} 442be51ddf6SCraig Topper 443fd13192aSCraig Topper; Tests with the same operand used twice. These should fold away. 444be51ddf6SCraig Topper 445be51ddf6SCraig Topperdefine signext i32 @smin_same_op_i32(i32 signext %a) { 446be51ddf6SCraig Topper; NOZBB-LABEL: smin_same_op_i32: 447be51ddf6SCraig Topper; NOZBB: # %bb.0: 448be51ddf6SCraig Topper; NOZBB-NEXT: ret 449be51ddf6SCraig Topper; 450be51ddf6SCraig Topper; ZBB-LABEL: smin_same_op_i32: 451be51ddf6SCraig Topper; ZBB: # %bb.0: 452be51ddf6SCraig Topper; ZBB-NEXT: ret 453be51ddf6SCraig Topper %c = call i32 @llvm.smin.i32(i32 %a, i32 %a) 454be51ddf6SCraig Topper ret i32 %c 455be51ddf6SCraig Topper} 456be51ddf6SCraig Topper 457be51ddf6SCraig Topperdefine signext i32 @smax_same_op_i32(i32 signext %a) { 458be51ddf6SCraig Topper; NOZBB-LABEL: smax_same_op_i32: 459be51ddf6SCraig Topper; NOZBB: # %bb.0: 460be51ddf6SCraig Topper; NOZBB-NEXT: ret 461be51ddf6SCraig Topper; 462be51ddf6SCraig Topper; ZBB-LABEL: smax_same_op_i32: 463be51ddf6SCraig Topper; ZBB: # %bb.0: 464be51ddf6SCraig Topper; ZBB-NEXT: ret 465be51ddf6SCraig Topper %c = call i32 @llvm.smax.i32(i32 %a, i32 %a) 466be51ddf6SCraig Topper ret i32 %c 467be51ddf6SCraig Topper} 468be51ddf6SCraig Topper 469be51ddf6SCraig Topperdefine signext i32 @umin_same_op_i32(i32 signext %a) { 470be51ddf6SCraig Topper; NOZBB-LABEL: umin_same_op_i32: 471be51ddf6SCraig Topper; NOZBB: # %bb.0: 472be51ddf6SCraig Topper; NOZBB-NEXT: ret 473be51ddf6SCraig Topper; 474be51ddf6SCraig Topper; ZBB-LABEL: umin_same_op_i32: 475be51ddf6SCraig Topper; ZBB: # %bb.0: 476be51ddf6SCraig Topper; ZBB-NEXT: ret 477be51ddf6SCraig Topper %c = call i32 @llvm.umin.i32(i32 %a, i32 %a) 478be51ddf6SCraig Topper ret i32 %c 479be51ddf6SCraig Topper} 480be51ddf6SCraig Topper 481be51ddf6SCraig Topperdefine signext i32 @umax_same_op_i32(i32 signext %a) { 482be51ddf6SCraig Topper; NOZBB-LABEL: umax_same_op_i32: 483be51ddf6SCraig Topper; NOZBB: # %bb.0: 484be51ddf6SCraig Topper; NOZBB-NEXT: ret 485be51ddf6SCraig Topper; 486be51ddf6SCraig Topper; ZBB-LABEL: umax_same_op_i32: 487be51ddf6SCraig Topper; ZBB: # %bb.0: 488be51ddf6SCraig Topper; ZBB-NEXT: ret 489be51ddf6SCraig Topper %c = call i32 @llvm.umax.i32(i32 %a, i32 %a) 490be51ddf6SCraig Topper ret i32 %c 491be51ddf6SCraig Topper} 492be51ddf6SCraig Topper 493fd13192aSCraig Topper; Tests with undef operands. These should fold to undef for RV32 or 0 for RV64. 494be51ddf6SCraig Topper 495be51ddf6SCraig Topperdefine signext i32 @smin_undef_i32() { 4964e2d1a6cSCraig Topper; RV32I-LABEL: smin_undef_i32: 4974e2d1a6cSCraig Topper; RV32I: # %bb.0: 4984e2d1a6cSCraig Topper; RV32I-NEXT: ret 499be51ddf6SCraig Topper; 5004e2d1a6cSCraig Topper; RV64I-LABEL: smin_undef_i32: 5014e2d1a6cSCraig Topper; RV64I: # %bb.0: 5024e2d1a6cSCraig Topper; RV64I-NEXT: li a0, 0 5034e2d1a6cSCraig Topper; RV64I-NEXT: ret 5044e2d1a6cSCraig Topper; 5054e2d1a6cSCraig Topper; RV32ZBB-LABEL: smin_undef_i32: 5064e2d1a6cSCraig Topper; RV32ZBB: # %bb.0: 5074e2d1a6cSCraig Topper; RV32ZBB-NEXT: ret 5084e2d1a6cSCraig Topper; 5094e2d1a6cSCraig Topper; RV64ZBB-LABEL: smin_undef_i32: 5104e2d1a6cSCraig Topper; RV64ZBB: # %bb.0: 5114e2d1a6cSCraig Topper; RV64ZBB-NEXT: li a0, 0 5124e2d1a6cSCraig Topper; RV64ZBB-NEXT: ret 513be51ddf6SCraig Topper %c = call i32 @llvm.smin.i32(i32 undef, i32 undef) 514be51ddf6SCraig Topper ret i32 %c 515be51ddf6SCraig Topper} 516be51ddf6SCraig Topper 517be51ddf6SCraig Topperdefine signext i32 @smax_undef_i32() { 5184e2d1a6cSCraig Topper; RV32I-LABEL: smax_undef_i32: 5194e2d1a6cSCraig Topper; RV32I: # %bb.0: 5204e2d1a6cSCraig Topper; RV32I-NEXT: ret 521be51ddf6SCraig Topper; 5224e2d1a6cSCraig Topper; RV64I-LABEL: smax_undef_i32: 5234e2d1a6cSCraig Topper; RV64I: # %bb.0: 5244e2d1a6cSCraig Topper; RV64I-NEXT: li a0, 0 5254e2d1a6cSCraig Topper; RV64I-NEXT: ret 5264e2d1a6cSCraig Topper; 5274e2d1a6cSCraig Topper; RV32ZBB-LABEL: smax_undef_i32: 5284e2d1a6cSCraig Topper; RV32ZBB: # %bb.0: 5294e2d1a6cSCraig Topper; RV32ZBB-NEXT: ret 5304e2d1a6cSCraig Topper; 5314e2d1a6cSCraig Topper; RV64ZBB-LABEL: smax_undef_i32: 5324e2d1a6cSCraig Topper; RV64ZBB: # %bb.0: 5334e2d1a6cSCraig Topper; RV64ZBB-NEXT: li a0, 0 5344e2d1a6cSCraig Topper; RV64ZBB-NEXT: ret 535be51ddf6SCraig Topper %c = call i32 @llvm.smax.i32(i32 undef, i32 undef) 536be51ddf6SCraig Topper ret i32 %c 537be51ddf6SCraig Topper} 538be51ddf6SCraig Topper 539be51ddf6SCraig Topperdefine signext i32 @umin_undef_i32() { 5404e2d1a6cSCraig Topper; RV32I-LABEL: umin_undef_i32: 5414e2d1a6cSCraig Topper; RV32I: # %bb.0: 5424e2d1a6cSCraig Topper; RV32I-NEXT: ret 543be51ddf6SCraig Topper; 5444e2d1a6cSCraig Topper; RV64I-LABEL: umin_undef_i32: 5454e2d1a6cSCraig Topper; RV64I: # %bb.0: 5464e2d1a6cSCraig Topper; RV64I-NEXT: li a0, 0 5474e2d1a6cSCraig Topper; RV64I-NEXT: ret 5484e2d1a6cSCraig Topper; 5494e2d1a6cSCraig Topper; RV32ZBB-LABEL: umin_undef_i32: 5504e2d1a6cSCraig Topper; RV32ZBB: # %bb.0: 5514e2d1a6cSCraig Topper; RV32ZBB-NEXT: ret 5524e2d1a6cSCraig Topper; 5534e2d1a6cSCraig Topper; RV64ZBB-LABEL: umin_undef_i32: 5544e2d1a6cSCraig Topper; RV64ZBB: # %bb.0: 5554e2d1a6cSCraig Topper; RV64ZBB-NEXT: li a0, 0 5564e2d1a6cSCraig Topper; RV64ZBB-NEXT: ret 557be51ddf6SCraig Topper %c = call i32 @llvm.umin.i32(i32 undef, i32 undef) 558be51ddf6SCraig Topper ret i32 %c 559be51ddf6SCraig Topper} 560be51ddf6SCraig Topper 561be51ddf6SCraig Topperdefine signext i32 @umax_undef_i32() { 5624e2d1a6cSCraig Topper; RV32I-LABEL: umax_undef_i32: 5634e2d1a6cSCraig Topper; RV32I: # %bb.0: 5644e2d1a6cSCraig Topper; RV32I-NEXT: ret 565be51ddf6SCraig Topper; 5664e2d1a6cSCraig Topper; RV64I-LABEL: umax_undef_i32: 5674e2d1a6cSCraig Topper; RV64I: # %bb.0: 5684e2d1a6cSCraig Topper; RV64I-NEXT: li a0, 0 5694e2d1a6cSCraig Topper; RV64I-NEXT: ret 5704e2d1a6cSCraig Topper; 5714e2d1a6cSCraig Topper; RV32ZBB-LABEL: umax_undef_i32: 5724e2d1a6cSCraig Topper; RV32ZBB: # %bb.0: 5734e2d1a6cSCraig Topper; RV32ZBB-NEXT: ret 5744e2d1a6cSCraig Topper; 5754e2d1a6cSCraig Topper; RV64ZBB-LABEL: umax_undef_i32: 5764e2d1a6cSCraig Topper; RV64ZBB: # %bb.0: 5774e2d1a6cSCraig Topper; RV64ZBB-NEXT: li a0, 0 5784e2d1a6cSCraig Topper; RV64ZBB-NEXT: ret 579be51ddf6SCraig Topper %c = call i32 @llvm.umax.i32(i32 undef, i32 undef) 580be51ddf6SCraig Topper ret i32 %c 581be51ddf6SCraig Topper} 582be51ddf6SCraig Topper 58301ba4708SCraig Topperdefine signext i32 @smax_i32_pos_constant(i32 signext %a) { 584fa20bf16SCraig Topper; NOZBB-LABEL: smax_i32_pos_constant: 585fa20bf16SCraig Topper; NOZBB: # %bb.0: 586fa20bf16SCraig Topper; NOZBB-NEXT: li a1, 10 587fa20bf16SCraig Topper; NOZBB-NEXT: blt a1, a0, .LBB24_2 588fa20bf16SCraig Topper; NOZBB-NEXT: # %bb.1: 589fa20bf16SCraig Topper; NOZBB-NEXT: li a0, 10 590fa20bf16SCraig Topper; NOZBB-NEXT: .LBB24_2: 591fa20bf16SCraig Topper; NOZBB-NEXT: ret 59201ba4708SCraig Topper; 593fa20bf16SCraig Topper; ZBB-LABEL: smax_i32_pos_constant: 594fa20bf16SCraig Topper; ZBB: # %bb.0: 595fa20bf16SCraig Topper; ZBB-NEXT: li a1, 10 596fa20bf16SCraig Topper; ZBB-NEXT: max a0, a0, a1 597fa20bf16SCraig Topper; ZBB-NEXT: ret 59801ba4708SCraig Topper %c = call i32 @llvm.smax.i32(i32 %a, i32 10) 59901ba4708SCraig Topper ret i32 %c 60001ba4708SCraig Topper} 601be398100SCraig Topper 602be398100SCraig Topperdefine signext i32 @smax_i32_pos_constant_trailing_zeros(i32 signext %a) { 603be398100SCraig Topper; NOZBB-LABEL: smax_i32_pos_constant_trailing_zeros: 604be398100SCraig Topper; NOZBB: # %bb.0: 605be398100SCraig Topper; NOZBB-NEXT: andi a0, a0, -8 606be398100SCraig Topper; NOZBB-NEXT: li a1, 16 607be398100SCraig Topper; NOZBB-NEXT: blt a1, a0, .LBB25_2 608be398100SCraig Topper; NOZBB-NEXT: # %bb.1: 609be398100SCraig Topper; NOZBB-NEXT: li a0, 16 610be398100SCraig Topper; NOZBB-NEXT: .LBB25_2: 611be398100SCraig Topper; NOZBB-NEXT: ret 612be398100SCraig Topper; 613be398100SCraig Topper; ZBB-LABEL: smax_i32_pos_constant_trailing_zeros: 614be398100SCraig Topper; ZBB: # %bb.0: 615be398100SCraig Topper; ZBB-NEXT: andi a0, a0, -8 616be398100SCraig Topper; ZBB-NEXT: li a1, 16 617be398100SCraig Topper; ZBB-NEXT: max a0, a0, a1 618be398100SCraig Topper; ZBB-NEXT: ret 619be398100SCraig Topper %b = and i32 %a, -8 620be398100SCraig Topper %c = call i32 @llvm.smax.i32(i32 %b, i32 16) 621be398100SCraig Topper %d = and i32 %c, -4 622be398100SCraig Topper ret i32 %d 623be398100SCraig Topper} 6241a042dd6SCraig Topper 6251a042dd6SCraig Topperdefine signext i32 @smin_i32_negone(i32 signext %a) { 6261a042dd6SCraig Topper; NOZBB-LABEL: smin_i32_negone: 6271a042dd6SCraig Topper; NOZBB: # %bb.0: 628e68b0d58SCraig Topper; NOZBB-NEXT: slti a1, a0, -1 62979f0413eSPhilip Reames; NOZBB-NEXT: addi a1, a1, -1 63079f0413eSPhilip Reames; NOZBB-NEXT: or a0, a1, a0 6311a042dd6SCraig Topper; NOZBB-NEXT: ret 6321a042dd6SCraig Topper; 6331a042dd6SCraig Topper; ZBB-LABEL: smin_i32_negone: 6341a042dd6SCraig Topper; ZBB: # %bb.0: 6351a042dd6SCraig Topper; ZBB-NEXT: li a1, -1 6361a042dd6SCraig Topper; ZBB-NEXT: min a0, a0, a1 6371a042dd6SCraig Topper; ZBB-NEXT: ret 6381a042dd6SCraig Topper %c = call i32 @llvm.smin.i32(i32 %a, i32 -1) 6391a042dd6SCraig Topper ret i32 %c 6401a042dd6SCraig Topper} 6411a042dd6SCraig Topper 6421a042dd6SCraig Topperdefine i64 @smin_i64_negone(i64 %a) { 6431a042dd6SCraig Topper; RV32I-LABEL: smin_i64_negone: 6441a042dd6SCraig Topper; RV32I: # %bb.0: 645139392c0SCraig Topper; RV32I-NEXT: slti a2, a1, 0 64679f0413eSPhilip Reames; RV32I-NEXT: addi a2, a2, -1 64779f0413eSPhilip Reames; RV32I-NEXT: or a0, a2, a0 648139392c0SCraig Topper; RV32I-NEXT: slti a2, a1, -1 649139392c0SCraig Topper; RV32I-NEXT: addi a2, a2, -1 65079f0413eSPhilip Reames; RV32I-NEXT: or a1, a2, a1 6511a042dd6SCraig Topper; RV32I-NEXT: ret 6521a042dd6SCraig Topper; 6531a042dd6SCraig Topper; RV64I-LABEL: smin_i64_negone: 6541a042dd6SCraig Topper; RV64I: # %bb.0: 655e68b0d58SCraig Topper; RV64I-NEXT: slti a1, a0, -1 65679f0413eSPhilip Reames; RV64I-NEXT: addi a1, a1, -1 65779f0413eSPhilip Reames; RV64I-NEXT: or a0, a1, a0 6581a042dd6SCraig Topper; RV64I-NEXT: ret 6591a042dd6SCraig Topper; 6601a042dd6SCraig Topper; RV32ZBB-LABEL: smin_i64_negone: 6611a042dd6SCraig Topper; RV32ZBB: # %bb.0: 6621a042dd6SCraig Topper; RV32ZBB-NEXT: li a2, -1 663139392c0SCraig Topper; RV32ZBB-NEXT: min a2, a1, a2 664139392c0SCraig Topper; RV32ZBB-NEXT: slti a1, a1, 0 665139392c0SCraig Topper; RV32ZBB-NEXT: addi a1, a1, -1 666139392c0SCraig Topper; RV32ZBB-NEXT: or a0, a1, a0 667139392c0SCraig Topper; RV32ZBB-NEXT: mv a1, a2 6681a042dd6SCraig Topper; RV32ZBB-NEXT: ret 6691a042dd6SCraig Topper; 6701a042dd6SCraig Topper; RV64ZBB-LABEL: smin_i64_negone: 6711a042dd6SCraig Topper; RV64ZBB: # %bb.0: 6721a042dd6SCraig Topper; RV64ZBB-NEXT: li a1, -1 6731a042dd6SCraig Topper; RV64ZBB-NEXT: min a0, a0, a1 6741a042dd6SCraig Topper; RV64ZBB-NEXT: ret 6751a042dd6SCraig Topper %c = call i64 @llvm.smin.i64(i64 %a, i64 -1) 6761a042dd6SCraig Topper ret i64 %c 6771a042dd6SCraig Topper} 678fc973037SLiaoChunyu 679fc973037SLiaoChunyudefine i64 @umax_i64_one(i64 %a, i64 %b) { 680fc973037SLiaoChunyu; RV32I-LABEL: umax_i64_one: 681fc973037SLiaoChunyu; RV32I: # %bb.0: 682fc973037SLiaoChunyu; RV32I-NEXT: mv a2, a0 683fc973037SLiaoChunyu; RV32I-NEXT: beqz a1, .LBB28_3 684fc973037SLiaoChunyu; RV32I-NEXT: # %bb.1: 685fc973037SLiaoChunyu; RV32I-NEXT: beqz a1, .LBB28_4 686fc973037SLiaoChunyu; RV32I-NEXT: .LBB28_2: 687fc973037SLiaoChunyu; RV32I-NEXT: ret 688fc973037SLiaoChunyu; RV32I-NEXT: .LBB28_3: 689*7b3bbd83SJay Foad; RV32I-NEXT: li a0, 1 690fc973037SLiaoChunyu; RV32I-NEXT: bnez a1, .LBB28_2 691fc973037SLiaoChunyu; RV32I-NEXT: .LBB28_4: 692*7b3bbd83SJay Foad; RV32I-NEXT: seqz a0, a2 693*7b3bbd83SJay Foad; RV32I-NEXT: add a0, a2, a0 694fc973037SLiaoChunyu; RV32I-NEXT: ret 695fc973037SLiaoChunyu; 696fc973037SLiaoChunyu; RV64I-LABEL: umax_i64_one: 697fc973037SLiaoChunyu; RV64I: # %bb.0: 698fc973037SLiaoChunyu; RV64I-NEXT: seqz a1, a0 699fc973037SLiaoChunyu; RV64I-NEXT: add a0, a0, a1 700fc973037SLiaoChunyu; RV64I-NEXT: ret 701fc973037SLiaoChunyu; 702fc973037SLiaoChunyu; RV32ZBB-LABEL: umax_i64_one: 703fc973037SLiaoChunyu; RV32ZBB: # %bb.0: 7042501ae58SJay Foad; RV32ZBB-NEXT: mv a2, a0 705*7b3bbd83SJay Foad; RV32ZBB-NEXT: li a3, 1 706fc973037SLiaoChunyu; RV32ZBB-NEXT: beqz a1, .LBB28_3 707fc973037SLiaoChunyu; RV32ZBB-NEXT: # %bb.1: 708fc973037SLiaoChunyu; RV32ZBB-NEXT: beqz a1, .LBB28_4 709fc973037SLiaoChunyu; RV32ZBB-NEXT: .LBB28_2: 710fc973037SLiaoChunyu; RV32ZBB-NEXT: ret 711fc973037SLiaoChunyu; RV32ZBB-NEXT: .LBB28_3: 712*7b3bbd83SJay Foad; RV32ZBB-NEXT: li a0, 1 713fc973037SLiaoChunyu; RV32ZBB-NEXT: bnez a1, .LBB28_2 714fc973037SLiaoChunyu; RV32ZBB-NEXT: .LBB28_4: 715*7b3bbd83SJay Foad; RV32ZBB-NEXT: maxu a0, a2, a3 716fc973037SLiaoChunyu; RV32ZBB-NEXT: ret 717fc973037SLiaoChunyu; 718fc973037SLiaoChunyu; RV64ZBB-LABEL: umax_i64_one: 719fc973037SLiaoChunyu; RV64ZBB: # %bb.0: 720fc973037SLiaoChunyu; RV64ZBB-NEXT: li a1, 1 721fc973037SLiaoChunyu; RV64ZBB-NEXT: maxu a0, a0, a1 722fc973037SLiaoChunyu; RV64ZBB-NEXT: ret 723fc973037SLiaoChunyu %c = call i64 @llvm.umax.i64(i64 %a, i64 1) 724fc973037SLiaoChunyu ret i64 %c 725fc973037SLiaoChunyu} 726