1*6441df3bSrealqhc; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*6441df3bSrealqhc; RUN: llc -mtriple=riscv32 -mattr=+m -mattr=+xcvmac -verify-machineinstrs < %s \ 3*6441df3bSrealqhc; RUN: | FileCheck %s 4*6441df3bSrealqhc 5*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mac(i32, i32, i32) 6*6441df3bSrealqhc 7*6441df3bSrealqhcdefine i32 @test.mac(i32 %a, i32 %b, i32 %c) { 8*6441df3bSrealqhc; CHECK-LABEL: test.mac: 9*6441df3bSrealqhc; CHECK: # %bb.0: 10*6441df3bSrealqhc; CHECK-NEXT: cv.mac a2, a0, a1 11*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 12*6441df3bSrealqhc; CHECK-NEXT: ret 13*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mac(i32 %a, i32 %b, i32 %c) 14*6441df3bSrealqhc ret i32 %1 15*6441df3bSrealqhc} 16*6441df3bSrealqhc 17*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.msu(i32, i32, i32) 18*6441df3bSrealqhc 19*6441df3bSrealqhcdefine i32 @test.msu(i32 %a, i32 %b, i32 %c) { 20*6441df3bSrealqhc; CHECK-LABEL: test.msu: 21*6441df3bSrealqhc; CHECK: # %bb.0: 22*6441df3bSrealqhc; CHECK-NEXT: cv.msu a2, a0, a1 23*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 24*6441df3bSrealqhc; CHECK-NEXT: ret 25*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.msu(i32 %a, i32 %b, i32 %c) 26*6441df3bSrealqhc ret i32 %1 27*6441df3bSrealqhc} 28*6441df3bSrealqhc 29*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.muluN(i32, i32, i32) 30*6441df3bSrealqhc 31*6441df3bSrealqhcdefine i32 @test.muluN(i32 %a, i32 %b) { 32*6441df3bSrealqhc; CHECK-LABEL: test.muluN: 33*6441df3bSrealqhc; CHECK: # %bb.0: 34*6441df3bSrealqhc; CHECK-NEXT: cv.mulun a0, a0, a1, 5 35*6441df3bSrealqhc; CHECK-NEXT: ret 36*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.muluN(i32 %a, i32 %b, i32 5) 37*6441df3bSrealqhc ret i32 %1 38*6441df3bSrealqhc} 39*6441df3bSrealqhc 40*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhuN(i32, i32, i32) 41*6441df3bSrealqhc 42*6441df3bSrealqhcdefine i32 @test.mulhhuN(i32 %a, i32 %b) { 43*6441df3bSrealqhc; CHECK-LABEL: test.mulhhuN: 44*6441df3bSrealqhc; CHECK: # %bb.0: 45*6441df3bSrealqhc; CHECK-NEXT: cv.mulhhun a0, a0, a1, 5 46*6441df3bSrealqhc; CHECK-NEXT: ret 47*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mulhhuN(i32 %a, i32 %b, i32 5) 48*6441df3bSrealqhc ret i32 %1 49*6441df3bSrealqhc} 50*6441df3bSrealqhc 51*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulsN(i32, i32, i32) 52*6441df3bSrealqhc 53*6441df3bSrealqhcdefine i32 @test.mulsN(i32 %a, i32 %b) { 54*6441df3bSrealqhc; CHECK-LABEL: test.mulsN: 55*6441df3bSrealqhc; CHECK: # %bb.0: 56*6441df3bSrealqhc; CHECK-NEXT: cv.mulsn a0, a0, a1, 5 57*6441df3bSrealqhc; CHECK-NEXT: ret 58*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mulsN(i32 %a, i32 %b, i32 5) 59*6441df3bSrealqhc ret i32 %1 60*6441df3bSrealqhc} 61*6441df3bSrealqhc 62*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhsN(i32, i32, i32) 63*6441df3bSrealqhc 64*6441df3bSrealqhcdefine i32 @test.mulhhsN(i32 %a, i32 %b) { 65*6441df3bSrealqhc; CHECK-LABEL: test.mulhhsN: 66*6441df3bSrealqhc; CHECK: # %bb.0: 67*6441df3bSrealqhc; CHECK-NEXT: cv.mulhhsn a0, a0, a1, 5 68*6441df3bSrealqhc; CHECK-NEXT: ret 69*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mulhhsN(i32 %a, i32 %b, i32 5) 70*6441df3bSrealqhc ret i32 %1 71*6441df3bSrealqhc} 72*6441df3bSrealqhc 73*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.muluRN(i32, i32, i32) 74*6441df3bSrealqhc 75*6441df3bSrealqhcdefine i32 @test.muluRN(i32 %a, i32 %b) { 76*6441df3bSrealqhc; CHECK-LABEL: test.muluRN: 77*6441df3bSrealqhc; CHECK: # %bb.0: 78*6441df3bSrealqhc; CHECK-NEXT: cv.mulurn a0, a0, a1, 5 79*6441df3bSrealqhc; CHECK-NEXT: ret 80*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.muluRN(i32 %a, i32 %b, i32 5) 81*6441df3bSrealqhc ret i32 %1 82*6441df3bSrealqhc} 83*6441df3bSrealqhc 84*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhuRN(i32, i32, i32) 85*6441df3bSrealqhc 86*6441df3bSrealqhcdefine i32 @test.mulhhuRN(i32 %a, i32 %b) { 87*6441df3bSrealqhc; CHECK-LABEL: test.mulhhuRN: 88*6441df3bSrealqhc; CHECK: # %bb.0: 89*6441df3bSrealqhc; CHECK-NEXT: cv.mulhhurn a0, a0, a1, 5 90*6441df3bSrealqhc; CHECK-NEXT: ret 91*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mulhhuRN(i32 %a, i32 %b, i32 5) 92*6441df3bSrealqhc ret i32 %1 93*6441df3bSrealqhc} 94*6441df3bSrealqhc 95*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulsRN(i32, i32, i32) 96*6441df3bSrealqhc 97*6441df3bSrealqhcdefine i32 @test.mulsRN(i32 %a, i32 %b) { 98*6441df3bSrealqhc; CHECK-LABEL: test.mulsRN: 99*6441df3bSrealqhc; CHECK: # %bb.0: 100*6441df3bSrealqhc; CHECK-NEXT: cv.mulsrn a0, a0, a1, 5 101*6441df3bSrealqhc; CHECK-NEXT: ret 102*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mulsRN(i32 %a, i32 %b, i32 5) 103*6441df3bSrealqhc ret i32 %1 104*6441df3bSrealqhc} 105*6441df3bSrealqhc 106*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.mulhhsRN(i32, i32, i32) 107*6441df3bSrealqhc 108*6441df3bSrealqhcdefine i32 @test.mulhhsRN(i32 %a, i32 %b) { 109*6441df3bSrealqhc; CHECK-LABEL: test.mulhhsRN: 110*6441df3bSrealqhc; CHECK: # %bb.0: 111*6441df3bSrealqhc; CHECK-NEXT: cv.mulhhsrn a0, a0, a1, 5 112*6441df3bSrealqhc; CHECK-NEXT: ret 113*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.mulhhsRN(i32 %a, i32 %b, i32 5) 114*6441df3bSrealqhc ret i32 %1 115*6441df3bSrealqhc} 116*6441df3bSrealqhc 117*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macuN(i32, i32, i32, i32) 118*6441df3bSrealqhc 119*6441df3bSrealqhcdefine i32 @test.macuN(i32 %a, i32 %b, i32 %c) { 120*6441df3bSrealqhc; CHECK-LABEL: test.macuN: 121*6441df3bSrealqhc; CHECK: # %bb.0: 122*6441df3bSrealqhc; CHECK-NEXT: cv.macun a2, a0, a1, 5 123*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 124*6441df3bSrealqhc; CHECK-NEXT: ret 125*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.macuN(i32 %a, i32 %b, i32 %c, i32 5) 126*6441df3bSrealqhc ret i32 %1 127*6441df3bSrealqhc} 128*6441df3bSrealqhc 129*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhuN(i32, i32, i32, i32) 130*6441df3bSrealqhc 131*6441df3bSrealqhcdefine i32 @test.machhuN(i32 %a, i32 %b, i32 %c) { 132*6441df3bSrealqhc; CHECK-LABEL: test.machhuN: 133*6441df3bSrealqhc; CHECK: # %bb.0: 134*6441df3bSrealqhc; CHECK-NEXT: cv.machhun a2, a0, a1, 5 135*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 136*6441df3bSrealqhc; CHECK-NEXT: ret 137*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.machhuN(i32 %a, i32 %b, i32 %c, i32 5) 138*6441df3bSrealqhc ret i32 %1 139*6441df3bSrealqhc} 140*6441df3bSrealqhc 141*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macsN(i32, i32, i32, i32) 142*6441df3bSrealqhc 143*6441df3bSrealqhcdefine i32 @test.macsN(i32 %a, i32 %b, i32 %c) { 144*6441df3bSrealqhc; CHECK-LABEL: test.macsN: 145*6441df3bSrealqhc; CHECK: # %bb.0: 146*6441df3bSrealqhc; CHECK-NEXT: cv.macsn a2, a0, a1, 5 147*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 148*6441df3bSrealqhc; CHECK-NEXT: ret 149*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.macsN(i32 %a, i32 %b, i32 %c, i32 5) 150*6441df3bSrealqhc ret i32 %1 151*6441df3bSrealqhc} 152*6441df3bSrealqhc 153*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhsN(i32, i32, i32, i32) 154*6441df3bSrealqhc 155*6441df3bSrealqhcdefine i32 @test.machhsN(i32 %a, i32 %b, i32 %c) { 156*6441df3bSrealqhc; CHECK-LABEL: test.machhsN: 157*6441df3bSrealqhc; CHECK: # %bb.0: 158*6441df3bSrealqhc; CHECK-NEXT: cv.machhsn a2, a0, a1, 5 159*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 160*6441df3bSrealqhc; CHECK-NEXT: ret 161*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.machhsN(i32 %a, i32 %b, i32 %c, i32 5) 162*6441df3bSrealqhc ret i32 %1 163*6441df3bSrealqhc} 164*6441df3bSrealqhc 165*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macuRN(i32, i32, i32, i32) 166*6441df3bSrealqhc 167*6441df3bSrealqhcdefine i32 @test.macuRN(i32 %a, i32 %b, i32 %c) { 168*6441df3bSrealqhc; CHECK-LABEL: test.macuRN: 169*6441df3bSrealqhc; CHECK: # %bb.0: 170*6441df3bSrealqhc; CHECK-NEXT: cv.macurn a2, a0, a1, 5 171*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 172*6441df3bSrealqhc; CHECK-NEXT: ret 173*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.macuRN(i32 %a, i32 %b, i32 %c, i32 5) 174*6441df3bSrealqhc ret i32 %1 175*6441df3bSrealqhc} 176*6441df3bSrealqhc 177*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhuRN(i32, i32, i32, i32) 178*6441df3bSrealqhc 179*6441df3bSrealqhcdefine i32 @test.machhuRN(i32 %a, i32 %b, i32 %c) { 180*6441df3bSrealqhc; CHECK-LABEL: test.machhuRN: 181*6441df3bSrealqhc; CHECK: # %bb.0: 182*6441df3bSrealqhc; CHECK-NEXT: cv.machhurn a2, a0, a1, 5 183*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 184*6441df3bSrealqhc; CHECK-NEXT: ret 185*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.machhuRN(i32 %a, i32 %b, i32 %c, i32 5) 186*6441df3bSrealqhc ret i32 %1 187*6441df3bSrealqhc} 188*6441df3bSrealqhc 189*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.macsRN(i32, i32, i32, i32) 190*6441df3bSrealqhc 191*6441df3bSrealqhcdefine i32 @test.macsRN(i32 %a, i32 %b, i32 %c) { 192*6441df3bSrealqhc; CHECK-LABEL: test.macsRN: 193*6441df3bSrealqhc; CHECK: # %bb.0: 194*6441df3bSrealqhc; CHECK-NEXT: cv.macsrn a2, a0, a1, 5 195*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 196*6441df3bSrealqhc; CHECK-NEXT: ret 197*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.macsRN(i32 %a, i32 %b, i32 %c, i32 5) 198*6441df3bSrealqhc ret i32 %1 199*6441df3bSrealqhc} 200*6441df3bSrealqhc 201*6441df3bSrealqhcdeclare i32 @llvm.riscv.cv.mac.machhsRN(i32, i32, i32, i32) 202*6441df3bSrealqhc 203*6441df3bSrealqhcdefine i32 @test.machhsRN(i32 %a, i32 %b, i32 %c) { 204*6441df3bSrealqhc; CHECK-LABEL: test.machhsRN: 205*6441df3bSrealqhc; CHECK: # %bb.0: 206*6441df3bSrealqhc; CHECK-NEXT: cv.machhsrn a2, a0, a1, 5 207*6441df3bSrealqhc; CHECK-NEXT: mv a0, a2 208*6441df3bSrealqhc; CHECK-NEXT: ret 209*6441df3bSrealqhc %1 = call i32 @llvm.riscv.cv.mac.machhsRN(i32 %a, i32 %b, i32 %c, i32 5) 210*6441df3bSrealqhc ret i32 %1 211*6441df3bSrealqhc} 212