156f0ecd6Srealqhc; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 256f0ecd6Srealqhc; RUN: llc -O0 -mtriple=riscv32 -mattr=+m -mattr=+xcvalu -verify-machineinstrs < %s \ 356f0ecd6Srealqhc; RUN: | FileCheck %s 456f0ecd6Srealqhc 556f0ecd6Srealqhcdeclare i32 @llvm.abs.i32(i32, i1) 656f0ecd6Srealqhcdeclare i32 @llvm.smin.i32(i32, i32) 756f0ecd6Srealqhcdeclare i32 @llvm.smax.i32(i32, i32) 856f0ecd6Srealqhcdeclare i32 @llvm.umin.i32(i32, i32) 956f0ecd6Srealqhcdeclare i32 @llvm.umax.i32(i32, i32) 1056f0ecd6Srealqhc 1156f0ecd6Srealqhcdefine i32 @abs(i32 %a) { 1256f0ecd6Srealqhc; CHECK-LABEL: abs: 1356f0ecd6Srealqhc; CHECK: # %bb.0: 1456f0ecd6Srealqhc; CHECK-NEXT: cv.abs a0, a0 1556f0ecd6Srealqhc; CHECK-NEXT: ret 1656f0ecd6Srealqhc %1 = call i32 @llvm.abs.i32(i32 %a, i1 false) 1756f0ecd6Srealqhc ret i32 %1 1856f0ecd6Srealqhc} 1956f0ecd6Srealqhc 2056f0ecd6Srealqhcdefine i1 @slet(i32 %a, i32 %b) { 2156f0ecd6Srealqhc; CHECK-LABEL: slet: 2256f0ecd6Srealqhc; CHECK: # %bb.0: 239d9d2b47SCraig Topper; CHECK-NEXT: cv.sle a0, a0, a1 2456f0ecd6Srealqhc; CHECK-NEXT: ret 2556f0ecd6Srealqhc %1 = icmp sle i32 %a, %b 2656f0ecd6Srealqhc ret i1 %1 2756f0ecd6Srealqhc} 2856f0ecd6Srealqhc 2956f0ecd6Srealqhcdefine i1 @sletu(i32 %a, i32 %b) { 3056f0ecd6Srealqhc; CHECK-LABEL: sletu: 3156f0ecd6Srealqhc; CHECK: # %bb.0: 329d9d2b47SCraig Topper; CHECK-NEXT: cv.sleu a0, a0, a1 3356f0ecd6Srealqhc; CHECK-NEXT: ret 3456f0ecd6Srealqhc %1 = icmp ule i32 %a, %b 3556f0ecd6Srealqhc ret i1 %1 3656f0ecd6Srealqhc} 3756f0ecd6Srealqhc 3856f0ecd6Srealqhcdefine i32 @smin(i32 %a, i32 %b) { 3956f0ecd6Srealqhc; CHECK-LABEL: smin: 4056f0ecd6Srealqhc; CHECK: # %bb.0: 4156f0ecd6Srealqhc; CHECK-NEXT: cv.min a0, a0, a1 4256f0ecd6Srealqhc; CHECK-NEXT: ret 4356f0ecd6Srealqhc %1 = call i32 @llvm.smin.i32(i32 %a, i32 %b) 4456f0ecd6Srealqhc ret i32 %1 4556f0ecd6Srealqhc} 4656f0ecd6Srealqhc 4756f0ecd6Srealqhcdefine i32 @umin(i32 %a, i32 %b) { 4856f0ecd6Srealqhc; CHECK-LABEL: umin: 4956f0ecd6Srealqhc; CHECK: # %bb.0: 5056f0ecd6Srealqhc; CHECK-NEXT: cv.minu a0, a0, a1 5156f0ecd6Srealqhc; CHECK-NEXT: ret 5256f0ecd6Srealqhc %1 = call i32 @llvm.umin.i32(i32 %a, i32 %b) 5356f0ecd6Srealqhc ret i32 %1 5456f0ecd6Srealqhc} 5556f0ecd6Srealqhc 5656f0ecd6Srealqhcdefine i32 @smax(i32 %a, i32 %b) { 5756f0ecd6Srealqhc; CHECK-LABEL: smax: 5856f0ecd6Srealqhc; CHECK: # %bb.0: 5956f0ecd6Srealqhc; CHECK-NEXT: cv.max a0, a0, a1 6056f0ecd6Srealqhc; CHECK-NEXT: ret 6156f0ecd6Srealqhc %1 = call i32 @llvm.smax.i32(i32 %a, i32 %b) 6256f0ecd6Srealqhc ret i32 %1 6356f0ecd6Srealqhc} 6456f0ecd6Srealqhc 6556f0ecd6Srealqhcdefine i32 @umax(i32 %a, i32 %b) { 6656f0ecd6Srealqhc; CHECK-LABEL: umax: 6756f0ecd6Srealqhc; CHECK: # %bb.0: 6856f0ecd6Srealqhc; CHECK-NEXT: cv.maxu a0, a0, a1 6956f0ecd6Srealqhc; CHECK-NEXT: ret 7056f0ecd6Srealqhc %1 = call i32 @llvm.umax.i32(i32 %a, i32 %b) 7156f0ecd6Srealqhc ret i32 %1 7256f0ecd6Srealqhc} 7356f0ecd6Srealqhc 7456f0ecd6Srealqhcdefine i32 @exths(i16 %a) { 7556f0ecd6Srealqhc; CHECK-LABEL: exths: 7656f0ecd6Srealqhc; CHECK: # %bb.0: 7756f0ecd6Srealqhc; CHECK-NEXT: # kill: def $x11 killed $x10 7856f0ecd6Srealqhc; CHECK-NEXT: cv.exths a0, a0 7956f0ecd6Srealqhc; CHECK-NEXT: ret 8056f0ecd6Srealqhc %1 = sext i16 %a to i32 8156f0ecd6Srealqhc ret i32 %1 8256f0ecd6Srealqhc} 8356f0ecd6Srealqhc 8456f0ecd6Srealqhcdefine i32 @exthz(i16 %a) { 8556f0ecd6Srealqhc; CHECK-LABEL: exthz: 8656f0ecd6Srealqhc; CHECK: # %bb.0: 8756f0ecd6Srealqhc; CHECK-NEXT: # kill: def $x11 killed $x10 8856f0ecd6Srealqhc; CHECK-NEXT: cv.exthz a0, a0 8956f0ecd6Srealqhc; CHECK-NEXT: ret 9056f0ecd6Srealqhc %1 = zext i16 %a to i32 9156f0ecd6Srealqhc ret i32 %1 9256f0ecd6Srealqhc} 9356f0ecd6Srealqhc 94*00128a20Srealqhcdefine i32 @extbs(i8 %a) { 95*00128a20Srealqhc; CHECK-LABEL: extbs: 96*00128a20Srealqhc; CHECK: # %bb.0: 97*00128a20Srealqhc; CHECK-NEXT: # kill: def $x11 killed $x10 98*00128a20Srealqhc; CHECK-NEXT: cv.extbs a0, a0 99*00128a20Srealqhc; CHECK-NEXT: ret 100*00128a20Srealqhc %1 = sext i8 %a to i32 101*00128a20Srealqhc ret i32 %1 102*00128a20Srealqhc} 103*00128a20Srealqhc 104*00128a20Srealqhcdefine i32 @extbz(i8 %a) { 105*00128a20Srealqhc; CHECK-LABEL: extbz: 106*00128a20Srealqhc; CHECK: # %bb.0: 107*00128a20Srealqhc; CHECK-NEXT: # kill: def $x11 killed $x10 108*00128a20Srealqhc; CHECK-NEXT: cv.extbz a0, a0 109*00128a20Srealqhc; CHECK-NEXT: ret 110*00128a20Srealqhc %1 = zext i8 %a to i32 111*00128a20Srealqhc ret i32 %1 112*00128a20Srealqhc} 113*00128a20Srealqhc 11456f0ecd6Srealqhcdeclare i32 @llvm.riscv.cv.alu.clip(i32, i32) 11556f0ecd6Srealqhc 11656f0ecd6Srealqhcdefine i32 @test.cv.alu.clip.case.a(i32 %a) { 11756f0ecd6Srealqhc; CHECK-LABEL: test.cv.alu.clip.case.a: 11856f0ecd6Srealqhc; CHECK: # %bb.0: 11956f0ecd6Srealqhc; CHECK-NEXT: cv.clip a0, a0, 5 12056f0ecd6Srealqhc; CHECK-NEXT: ret 12156f0ecd6Srealqhc %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 15) 12256f0ecd6Srealqhc ret i32 %1 12356f0ecd6Srealqhc} 12456f0ecd6Srealqhc 12556f0ecd6Srealqhcdefine i32 @test.cv.alu.clip.case.b(i32 %a) { 12656f0ecd6Srealqhc; CHECK-LABEL: test.cv.alu.clip.case.b: 12756f0ecd6Srealqhc; CHECK: # %bb.0: 12856f0ecd6Srealqhc; CHECK-NEXT: li a1, 10 12956f0ecd6Srealqhc; CHECK-NEXT: cv.clipr a0, a0, a1 13056f0ecd6Srealqhc; CHECK-NEXT: ret 13156f0ecd6Srealqhc %1 = call i32 @llvm.riscv.cv.alu.clip(i32 %a, i32 10) 13256f0ecd6Srealqhc ret i32 %1 13356f0ecd6Srealqhc} 13456f0ecd6Srealqhc 13556f0ecd6Srealqhcdeclare i32 @llvm.riscv.cv.alu.clipu(i32, i32) 13656f0ecd6Srealqhc 13756f0ecd6Srealqhcdefine i32 @test.cv.alu.clipu.case.a(i32 %a) { 13856f0ecd6Srealqhc; CHECK-LABEL: test.cv.alu.clipu.case.a: 13956f0ecd6Srealqhc; CHECK: # %bb.0: 14056f0ecd6Srealqhc; CHECK-NEXT: cv.clipu a0, a0, 9 14156f0ecd6Srealqhc; CHECK-NEXT: ret 14256f0ecd6Srealqhc %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 255) 14356f0ecd6Srealqhc ret i32 %1 14456f0ecd6Srealqhc} 14556f0ecd6Srealqhc 14656f0ecd6Srealqhcdefine i32 @test.cv.alu.clipu.case.b(i32 %a) { 14756f0ecd6Srealqhc; CHECK-LABEL: test.cv.alu.clipu.case.b: 14856f0ecd6Srealqhc; CHECK: # %bb.0: 14956f0ecd6Srealqhc; CHECK-NEXT: li a1, 200 15056f0ecd6Srealqhc; CHECK-NEXT: cv.clipur a0, a0, a1 15156f0ecd6Srealqhc; CHECK-NEXT: ret 15256f0ecd6Srealqhc %1 = call i32 @llvm.riscv.cv.alu.clipu(i32 %a, i32 200) 15356f0ecd6Srealqhc ret i32 %1 15456f0ecd6Srealqhc} 15556f0ecd6Srealqhc 156*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.addN(i32, i32, i32) 15756f0ecd6Srealqhc 158*00128a20Srealqhcdefine i32 @test.cv.alu.addN.case.a(i32 %a, i32 %b) { 159*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.addN.case.a: 16056f0ecd6Srealqhc; CHECK: # %bb.0: 16156f0ecd6Srealqhc; CHECK-NEXT: cv.addn a0, a0, a1, 15 16256f0ecd6Srealqhc; CHECK-NEXT: ret 163*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.addN(i32 %a, i32 %b, i32 15) 16456f0ecd6Srealqhc ret i32 %1 16556f0ecd6Srealqhc} 16656f0ecd6Srealqhc 167*00128a20Srealqhcdefine i32 @test.cv.alu.addN.case.b(i32 %a, i32 %b) { 168*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.addN.case.b: 16956f0ecd6Srealqhc; CHECK: # %bb.0: 17056f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 17156f0ecd6Srealqhc; CHECK-NEXT: cv.addnr a0, a1, a2 17256f0ecd6Srealqhc; CHECK-NEXT: ret 173*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.addN(i32 %a, i32 %b, i32 32) 17456f0ecd6Srealqhc ret i32 %1 17556f0ecd6Srealqhc} 17656f0ecd6Srealqhc 177*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.adduN(i32, i32, i32) 17856f0ecd6Srealqhc 179*00128a20Srealqhcdefine i32 @test.cv.alu.adduN.case.a(i32 %a, i32 %b) { 180*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.adduN.case.a: 18156f0ecd6Srealqhc; CHECK: # %bb.0: 18256f0ecd6Srealqhc; CHECK-NEXT: cv.addun a0, a0, a1, 15 18356f0ecd6Srealqhc; CHECK-NEXT: ret 184*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.adduN(i32 %a, i32 %b, i32 15) 18556f0ecd6Srealqhc ret i32 %1 18656f0ecd6Srealqhc} 18756f0ecd6Srealqhc 188*00128a20Srealqhcdefine i32 @test.cv.alu.adduN.case.b(i32 %a, i32 %b) { 189*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.adduN.case.b: 19056f0ecd6Srealqhc; CHECK: # %bb.0: 19156f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 19256f0ecd6Srealqhc; CHECK-NEXT: cv.addunr a0, a1, a2 19356f0ecd6Srealqhc; CHECK-NEXT: ret 194*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.adduN(i32 %a, i32 %b, i32 32) 19556f0ecd6Srealqhc ret i32 %1 19656f0ecd6Srealqhc} 19756f0ecd6Srealqhc 198*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.addRN(i32, i32, i32) 19956f0ecd6Srealqhc 200*00128a20Srealqhcdefine i32 @test.cv.alu.addRN.case.a(i32 %a, i32 %b) { 201*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.addRN.case.a: 20256f0ecd6Srealqhc; CHECK: # %bb.0: 20356f0ecd6Srealqhc; CHECK-NEXT: cv.addrn a0, a0, a1, 15 20456f0ecd6Srealqhc; CHECK-NEXT: ret 205*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.addRN(i32 %a, i32 %b, i32 15) 20656f0ecd6Srealqhc ret i32 %1 20756f0ecd6Srealqhc} 20856f0ecd6Srealqhc 209*00128a20Srealqhcdefine i32 @test.cv.alu.addRN.case.b(i32 %a, i32 %b) { 210*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.addRN.case.b: 21156f0ecd6Srealqhc; CHECK: # %bb.0: 21256f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 21356f0ecd6Srealqhc; CHECK-NEXT: cv.addrnr a0, a1, a2 21456f0ecd6Srealqhc; CHECK-NEXT: ret 215*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.addRN(i32 %a, i32 %b, i32 32) 21656f0ecd6Srealqhc ret i32 %1 21756f0ecd6Srealqhc} 21856f0ecd6Srealqhc 219*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.adduRN(i32, i32, i32) 22056f0ecd6Srealqhc 221*00128a20Srealqhcdefine i32 @test.cv.alu.adduRN.case.a(i32 %a, i32 %b) { 222*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.adduRN.case.a: 22356f0ecd6Srealqhc; CHECK: # %bb.0: 22456f0ecd6Srealqhc; CHECK-NEXT: cv.addurn a0, a0, a1, 15 22556f0ecd6Srealqhc; CHECK-NEXT: ret 226*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.adduRN(i32 %a, i32 %b, i32 15) 22756f0ecd6Srealqhc ret i32 %1 22856f0ecd6Srealqhc} 22956f0ecd6Srealqhc 230*00128a20Srealqhcdefine i32 @test.cv.alu.adduRN.case.b(i32 %a, i32 %b) { 231*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.adduRN.case.b: 23256f0ecd6Srealqhc; CHECK: # %bb.0: 23356f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 23456f0ecd6Srealqhc; CHECK-NEXT: cv.addurnr a0, a1, a2 23556f0ecd6Srealqhc; CHECK-NEXT: ret 236*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.adduRN(i32 %a, i32 %b, i32 32) 23756f0ecd6Srealqhc ret i32 %1 23856f0ecd6Srealqhc} 23956f0ecd6Srealqhc 240*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.subN(i32, i32, i32) 24156f0ecd6Srealqhc 242*00128a20Srealqhcdefine i32 @test.cv.alu.subN.case.a(i32 %a, i32 %b) { 243*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subN.case.a: 24456f0ecd6Srealqhc; CHECK: # %bb.0: 24556f0ecd6Srealqhc; CHECK-NEXT: cv.subn a0, a0, a1, 15 24656f0ecd6Srealqhc; CHECK-NEXT: ret 247*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subN(i32 %a, i32 %b, i32 15) 24856f0ecd6Srealqhc ret i32 %1 24956f0ecd6Srealqhc} 25056f0ecd6Srealqhc 251*00128a20Srealqhcdefine i32 @test.cv.alu.subN.case.b(i32 %a, i32 %b) { 252*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subN.case.b: 25356f0ecd6Srealqhc; CHECK: # %bb.0: 25456f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 25556f0ecd6Srealqhc; CHECK-NEXT: cv.subnr a0, a1, a2 25656f0ecd6Srealqhc; CHECK-NEXT: ret 257*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subN(i32 %a, i32 %b, i32 32) 25856f0ecd6Srealqhc ret i32 %1 25956f0ecd6Srealqhc} 26056f0ecd6Srealqhc 261*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.subuN(i32, i32, i32) 26256f0ecd6Srealqhc 263*00128a20Srealqhcdefine i32 @test.cv.alu.subuN.case.a(i32 %a, i32 %b) { 264*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subuN.case.a: 26556f0ecd6Srealqhc; CHECK: # %bb.0: 26656f0ecd6Srealqhc; CHECK-NEXT: cv.subun a0, a0, a1, 15 26756f0ecd6Srealqhc; CHECK-NEXT: ret 268*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subuN(i32 %a, i32 %b, i32 15) 26956f0ecd6Srealqhc ret i32 %1 27056f0ecd6Srealqhc} 27156f0ecd6Srealqhc 272*00128a20Srealqhcdefine i32 @test.cv.alu.subuN.case.b(i32 %a, i32 %b) { 273*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subuN.case.b: 27456f0ecd6Srealqhc; CHECK: # %bb.0: 27556f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 27656f0ecd6Srealqhc; CHECK-NEXT: cv.subunr a0, a1, a2 27756f0ecd6Srealqhc; CHECK-NEXT: ret 278*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subuN(i32 %a, i32 %b, i32 32) 27956f0ecd6Srealqhc ret i32 %1 28056f0ecd6Srealqhc} 28156f0ecd6Srealqhc 282*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.subRN(i32, i32, i32) 28356f0ecd6Srealqhc 284*00128a20Srealqhcdefine i32 @test.cv.alu.subRN.case.a(i32 %a, i32 %b) { 285*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subRN.case.a: 28656f0ecd6Srealqhc; CHECK: # %bb.0: 28756f0ecd6Srealqhc; CHECK-NEXT: cv.subrn a0, a0, a1, 15 28856f0ecd6Srealqhc; CHECK-NEXT: ret 289*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subRN(i32 %a, i32 %b, i32 15) 29056f0ecd6Srealqhc ret i32 %1 29156f0ecd6Srealqhc} 29256f0ecd6Srealqhc 293*00128a20Srealqhcdefine i32 @test.cv.alu.subRN.case.b(i32 %a, i32 %b) { 294*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subRN.case.b: 29556f0ecd6Srealqhc; CHECK: # %bb.0: 29656f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 29756f0ecd6Srealqhc; CHECK-NEXT: cv.subrnr a0, a1, a2 29856f0ecd6Srealqhc; CHECK-NEXT: ret 299*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subRN(i32 %a, i32 %b, i32 32) 30056f0ecd6Srealqhc ret i32 %1 30156f0ecd6Srealqhc} 30256f0ecd6Srealqhc 303*00128a20Srealqhcdeclare i32 @llvm.riscv.cv.alu.subuRN(i32, i32, i32) 30456f0ecd6Srealqhc 305*00128a20Srealqhcdefine i32 @test.cv.alu.subuRN.case.a(i32 %a, i32 %b) { 306*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subuRN.case.a: 30756f0ecd6Srealqhc; CHECK: # %bb.0: 30856f0ecd6Srealqhc; CHECK-NEXT: cv.suburn a0, a0, a1, 15 30956f0ecd6Srealqhc; CHECK-NEXT: ret 310*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subuRN(i32 %a, i32 %b, i32 15) 31156f0ecd6Srealqhc ret i32 %1 31256f0ecd6Srealqhc} 31356f0ecd6Srealqhc 314*00128a20Srealqhcdefine i32 @test.cv.alu.subuRN.case.b(i32 %a, i32 %b) { 315*00128a20Srealqhc; CHECK-LABEL: test.cv.alu.subuRN.case.b: 31656f0ecd6Srealqhc; CHECK: # %bb.0: 31756f0ecd6Srealqhc; CHECK-NEXT: li a2, 32 31856f0ecd6Srealqhc; CHECK-NEXT: cv.suburnr a0, a1, a2 31956f0ecd6Srealqhc; CHECK-NEXT: ret 320*00128a20Srealqhc %1 = call i32 @llvm.riscv.cv.alu.subuRN(i32 %a, i32 %b, i32 32) 32156f0ecd6Srealqhc ret i32 %1 32256f0ecd6Srealqhc} 323