1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O0 -mtriple=riscv32 -mattr=+xcvbitmanip -verify-machineinstrs < %s \
3 ; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-O0
4 ; RUN: llc -O3 -mtriple=riscv32 -mattr=+xcvbitmanip -verify-machineinstrs < %s \
5 ; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-O3
7 declare i32 @llvm.riscv.cv.bitmanip.extract(i32, i32)
9 define i32 @test.cv.extractr(i32 %a, i32 %b) {
10 ; CHECK-LABEL: test.cv.extractr:
12 ; CHECK-NEXT: cv.extractr a0, a0, a1
14 %1 = call i32 @llvm.riscv.cv.bitmanip.extract(i32 %a, i32 %b)
18 define i32 @test.cv.extract(i32 %a) {
19 ; CHECK-LABEL: test.cv.extract:
21 ; CHECK-NEXT: cv.extract a0, a0, 2, 1
23 %1 = call i32 @llvm.riscv.cv.bitmanip.extract(i32 %a, i32 65)
27 define i32 @test.cv.extract1023(i32 %a) {
28 ; CHECK-LABEL: test.cv.extract1023:
30 ; CHECK-NEXT: cv.extract a0, a0, 31, 31
32 %1 = call i32 @llvm.riscv.cv.bitmanip.extract(i32 %a, i32 1023)
36 declare i32 @llvm.riscv.cv.bitmanip.extractu(i32, i32)
38 define i32 @test.cv.extractur(i32 %a, i32 %b) {
39 ; CHECK-LABEL: test.cv.extractur:
41 ; CHECK-NEXT: cv.extractur a0, a0, a1
43 %1 = call i32 @llvm.riscv.cv.bitmanip.extractu(i32 %a, i32 %b)
47 define i32 @test.cv.extractu(i32 %a) {
48 ; CHECK-LABEL: test.cv.extractu:
50 ; CHECK-NEXT: cv.extractu a0, a0, 2, 1
52 %1 = call i32 @llvm.riscv.cv.bitmanip.extractu(i32 %a, i32 65)
56 declare i32 @llvm.riscv.cv.bitmanip.insert(i32, i32, i32)
58 define i32 @test.cv.insert(i32 %c, i32 %a) {
59 ; CHECK-LABEL: test.cv.insert:
61 ; CHECK-NEXT: cv.insert a0, a1, 2, 1
63 %1 = call i32 @llvm.riscv.cv.bitmanip.insert(i32 %a, i32 65, i32 %c)
67 define i32 @test.cv.insertr(i32 %c, i32 %b, i32 %a) {
68 ; CHECK-LABEL: test.cv.insertr:
70 ; CHECK-NEXT: cv.insertr a0, a2, a1
72 %1 = call i32 @llvm.riscv.cv.bitmanip.insert(i32 %a, i32 %b, i32 %c)
76 declare i32 @llvm.riscv.cv.bitmanip.bclr(i32, i32)
78 define i32 @test.cv.bclrr(i32 %a, i32 %b) {
79 ; CHECK-LABEL: test.cv.bclrr:
81 ; CHECK-NEXT: cv.bclrr a0, a0, a1
83 %1 = call i32 @llvm.riscv.cv.bitmanip.bclr(i32 %a, i32 %b)
87 define i32 @test.cv.bclr(i32 %a) {
88 ; CHECK-LABEL: test.cv.bclr:
90 ; CHECK-NEXT: cv.bclr a0, a0, 2, 1
92 %1 = call i32 @llvm.riscv.cv.bitmanip.bclr(i32 %a, i32 65)
96 declare i32 @llvm.riscv.cv.bitmanip.bset(i32, i32)
98 define i32 @test.cv.bsetr(i32 %a, i32 %b) {
99 ; CHECK-LABEL: test.cv.bsetr:
101 ; CHECK-NEXT: cv.bsetr a0, a0, a1
103 %1 = call i32 @llvm.riscv.cv.bitmanip.bset(i32 %a, i32 %b)
107 define i32 @test.cv.bset(i32 %a) {
108 ; CHECK-LABEL: test.cv.bset:
110 ; CHECK-NEXT: cv.bset a0, a0, 2, 1
112 %1 = call i32 @llvm.riscv.cv.bitmanip.bset(i32 %a, i32 65)
116 declare i32 @llvm.cttz.i32(i32, i1)
118 define i32 @test.cv.ff1(i32 %a) {
119 ; CHECK-LABEL: test.cv.ff1:
121 ; CHECK-NEXT: cv.ff1 a0, a0
123 %1 = call i32 @llvm.cttz.i32(i32 %a, i1 0)
127 declare i32 @llvm.ctlz.i32(i32, i1)
129 define i32 @test.cv.fl1(i32 %a) {
130 ; CHECK-LABEL: test.cv.fl1:
132 ; CHECK-NEXT: cv.fl1 a0, a0
134 %1 = call i32 @llvm.ctlz.i32(i32 %a, i1 0)
138 declare i32 @llvm.riscv.cv.bitmanip.clb(i32)
140 define i32 @test.cv.clb(i32 %a) {
141 ; CHECK-LABEL: test.cv.clb:
143 ; CHECK-NEXT: cv.clb a0, a0
145 %1 = call i32 @llvm.riscv.cv.bitmanip.clb(i32 %a)
149 declare i32 @llvm.ctpop(i32)
151 define i32 @test.cv.cnt(i32 %a) {
152 ; CHECK-LABEL: test.cv.cnt:
154 ; CHECK-NEXT: cv.cnt a0, a0
156 %1 = call i32 @llvm.ctpop(i32 %a)
160 declare i32 @llvm.fshl.i32(i32, i32, i32)
162 define i32 @test.llvm.fshl.imm(i32 %a) {
163 ; CHECK-LABEL: test.llvm.fshl.imm:
165 ; CHECK-NEXT: li a1, 30
166 ; CHECK-NEXT: cv.ror a0, a0, a1
168 %1 = call i32 @llvm.fshl.i32(i32 %a, i32 %a, i32 2)
172 define i32 @test.llvm.fshl.reg(i32 %a, i32 %b) {
173 ; CHECK-O0-LABEL: test.llvm.fshl.reg:
175 ; CHECK-O0-NEXT: mv a2, a1
176 ; CHECK-O0-NEXT: li a1, 0
177 ; CHECK-O0-NEXT: sub a1, a1, a2
178 ; CHECK-O0-NEXT: cv.ror a0, a0, a1
181 ; CHECK-O3-LABEL: test.llvm.fshl.reg:
183 ; CHECK-O3-NEXT: neg a1, a1
184 ; CHECK-O3-NEXT: cv.ror a0, a0, a1
186 %1 = call i32 @llvm.fshl.i32(i32 %a, i32 %a, i32 %b)
190 declare i32 @llvm.fshr.i32(i32, i32, i32)
192 define i32 @test.llvm.fshr.imm(i32 %a) {
193 ; CHECK-LABEL: test.llvm.fshr.imm:
195 ; CHECK-NEXT: li a1, 2
196 ; CHECK-NEXT: cv.ror a0, a0, a1
198 %1 = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 2)
202 define i32 @test.llvm.fshr.reg(i32 %a, i32 %b) {
203 ; CHECK-LABEL: test.llvm.fshr.reg:
205 ; CHECK-NEXT: cv.ror a0, a0, a1
207 %1 = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 %b)
211 declare i32 @llvm.riscv.cv.bitmanip.bitrev(i32, i32, i32)
213 define i32 @test.cv.bitrev(i32 %a) {
214 ; CHECK-LABEL: test.cv.bitrev:
216 ; CHECK-NEXT: cv.bitrev a0, a0, 2, 1
218 %1 = call i32 @llvm.riscv.cv.bitmanip.bitrev(i32 %a, i32 1, i32 2)
222 declare i32 @llvm.bitreverse(i32)
224 define i32 @test.llvm.bitrev(i32 %a) {
225 ; CHECK-LABEL: test.llvm.bitrev:
227 ; CHECK-NEXT: cv.bitrev a0, a0, 0, 0
229 %1 = call i32 @llvm.bitreverse(i32 %a)