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