brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 7e63efa Raw
253 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=riscv32 -mattr=+xcvbitmanip -verify-machineinstrs < %s \3; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-O04; RUN: llc -O3 -mtriple=riscv32 -mattr=+xcvbitmanip -verify-machineinstrs < %s \5; RUN:   | FileCheck %s --check-prefixes=CHECK,CHECK-O36 7define i32 @test.cv.extractr(i32 %a, i32 %b) {8; CHECK-LABEL: test.cv.extractr:9; CHECK:       # %bb.0:10; CHECK-NEXT:    cv.extractr a0, a0, a111; CHECK-NEXT:    ret12  %1 = call i32 @llvm.riscv.cv.bitmanip.extract(i32 %a, i32 %b)13  ret i32 %114}15 16define i32 @test.cv.extract(i32 %a) {17; CHECK-LABEL: test.cv.extract:18; CHECK:       # %bb.0:19; CHECK-NEXT:    cv.extract a0, a0, 2, 120; CHECK-NEXT:    ret21  %1 = call i32 @llvm.riscv.cv.bitmanip.extract(i32 %a, i32 65)22  ret i32 %123}24 25define i32 @test.cv.extract1023(i32 %a) {26; CHECK-LABEL: test.cv.extract1023:27; CHECK:       # %bb.0:28; CHECK-NEXT:    cv.extract a0, a0, 31, 3129; CHECK-NEXT:    ret30  %1 = call i32 @llvm.riscv.cv.bitmanip.extract(i32 %a, i32 1023)31  ret i32 %132}33 34define i32 @test.cv.extractur(i32 %a, i32 %b) {35; CHECK-LABEL: test.cv.extractur:36; CHECK:       # %bb.0:37; CHECK-NEXT:    cv.extractur a0, a0, a138; CHECK-NEXT:    ret39  %1 = call i32 @llvm.riscv.cv.bitmanip.extractu(i32 %a, i32 %b)40  ret i32 %141}42 43define i32 @test.cv.extractu(i32 %a) {44; CHECK-LABEL: test.cv.extractu:45; CHECK:       # %bb.0:46; CHECK-NEXT:    cv.extractu a0, a0, 2, 147; CHECK-NEXT:    ret48  %1 = call i32 @llvm.riscv.cv.bitmanip.extractu(i32 %a, i32 65)49  ret i32 %150}51 52define i32 @test.cv.insert(i32 %c, i32 %a) {53; CHECK-LABEL: test.cv.insert:54; CHECK:       # %bb.0:55; CHECK-NEXT:    cv.insert a0, a1, 2, 156; CHECK-NEXT:    ret57  %1 = call i32 @llvm.riscv.cv.bitmanip.insert(i32 %a, i32 65, i32 %c)58  ret i32 %159}60 61define i32 @test.cv.insertr(i32 %c, i32 %b, i32 %a) {62; CHECK-LABEL: test.cv.insertr:63; CHECK:       # %bb.0:64; CHECK-NEXT:    cv.insertr a0, a2, a165; CHECK-NEXT:    ret66  %1 = call i32 @llvm.riscv.cv.bitmanip.insert(i32 %a, i32 %b, i32 %c)67  ret i32 %168}69 70define i32 @test.cv.bclrr(i32 %a, i32 %b) {71; CHECK-LABEL: test.cv.bclrr:72; CHECK:       # %bb.0:73; CHECK-NEXT:    cv.bclrr a0, a0, a174; CHECK-NEXT:    ret75  %1 = call i32 @llvm.riscv.cv.bitmanip.bclr(i32 %a, i32 %b)76  ret i32 %177}78 79define i32 @test.cv.bclr(i32 %a) {80; CHECK-LABEL: test.cv.bclr:81; CHECK:       # %bb.0:82; CHECK-NEXT:    cv.bclr a0, a0, 2, 183; CHECK-NEXT:    ret84  %1 = call i32 @llvm.riscv.cv.bitmanip.bclr(i32 %a, i32 65)85  ret i32 %186}87 88define i32 @test.cv.bsetr(i32 %a, i32 %b) {89; CHECK-LABEL: test.cv.bsetr:90; CHECK:       # %bb.0:91; CHECK-NEXT:    cv.bsetr a0, a0, a192; CHECK-NEXT:    ret93  %1 = call i32 @llvm.riscv.cv.bitmanip.bset(i32 %a, i32 %b)94  ret i32 %195}96 97define i32 @test.cv.bset(i32 %a) {98; CHECK-LABEL: test.cv.bset:99; CHECK:       # %bb.0:100; CHECK-NEXT:    cv.bset a0, a0, 2, 1101; CHECK-NEXT:    ret102  %1 = call i32 @llvm.riscv.cv.bitmanip.bset(i32 %a, i32 65)103  ret i32 %1104}105 106define i32 @test.cv.ff1(i32 %a) {107; CHECK-LABEL: test.cv.ff1:108; CHECK:       # %bb.0:109; CHECK-NEXT:    cv.ff1 a0, a0110; CHECK-NEXT:    ret111  %1 = call i32 @llvm.cttz.i32(i32 %a, i1 0)112  ret i32 %1113}114 115define i32 @test.cv.fl1(i32 %a) {116; CHECK-LABEL: test.cv.fl1:117; CHECK:       # %bb.0:118; CHECK-NEXT:    cv.fl1 a0, a0119; CHECK-NEXT:    ret120  %1 = call i32 @llvm.ctlz.i32(i32 %a, i1 0)121  ret i32 %1122}123 124define i32 @test.cv.clb(i32 %a) {125; CHECK-LABEL: test.cv.clb:126; CHECK:       # %bb.0:127; CHECK-NEXT:    cv.clb a0, a0128; CHECK-NEXT:    ret129  %1 = call i32 @llvm.riscv.cv.bitmanip.clb(i32 %a)130  ret i32 %1131}132 133define i32 @test.cv.cnt(i32 %a) {134; CHECK-LABEL: test.cv.cnt:135; CHECK:       # %bb.0:136; CHECK-NEXT:    cv.cnt a0, a0137; CHECK-NEXT:    ret138  %1 = call i32 @llvm.ctpop(i32 %a)139  ret i32 %1140}141 142define i32 @test.llvm.fshl.imm(i32 %a) {143; CHECK-LABEL: test.llvm.fshl.imm:144; CHECK:       # %bb.0:145; CHECK-NEXT:    li a1, 30146; CHECK-NEXT:    cv.ror a0, a0, a1147; CHECK-NEXT:    ret148  %1 = call i32 @llvm.fshl.i32(i32 %a, i32 %a, i32 2)149  ret i32 %1150}151 152define i32 @test.llvm.fshl.reg(i32 %a, i32 %b) {153; CHECK-O0-LABEL: test.llvm.fshl.reg:154; CHECK-O0:       # %bb.0:155; CHECK-O0-NEXT:    mv a2, a1156; CHECK-O0-NEXT:    li a1, 0157; CHECK-O0-NEXT:    sub a1, a1, a2158; CHECK-O0-NEXT:    cv.ror a0, a0, a1159; CHECK-O0-NEXT:    ret160;161; CHECK-O3-LABEL: test.llvm.fshl.reg:162; CHECK-O3:       # %bb.0:163; CHECK-O3-NEXT:    neg a1, a1164; CHECK-O3-NEXT:    cv.ror a0, a0, a1165; CHECK-O3-NEXT:    ret166  %1 = call i32 @llvm.fshl.i32(i32 %a, i32 %a, i32 %b)167  ret i32 %1168}169 170define i32 @test.llvm.fshr.imm(i32 %a) {171; CHECK-LABEL: test.llvm.fshr.imm:172; CHECK:       # %bb.0:173; CHECK-NEXT:    li a1, 2174; CHECK-NEXT:    cv.ror a0, a0, a1175; CHECK-NEXT:    ret176  %1 = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 2)177  ret i32 %1178}179 180define i32 @test.llvm.fshr.reg(i32 %a, i32 %b) {181; CHECK-LABEL: test.llvm.fshr.reg:182; CHECK:       # %bb.0:183; CHECK-NEXT:    cv.ror a0, a0, a1184; CHECK-NEXT:    ret185  %1 = call i32 @llvm.fshr.i32(i32 %a, i32 %a, i32 %b)186  ret i32 %1187}188 189define i32 @test.cv.bitrev(i32 %a) {190; CHECK-LABEL: test.cv.bitrev:191; CHECK:       # %bb.0:192; CHECK-NEXT:    cv.bitrev a0, a0, 2, 1193; CHECK-NEXT:    ret194  %1 = call i32 @llvm.riscv.cv.bitmanip.bitrev(i32 %a, i32 1, i32 2)195  ret i32 %1196}197 198define i32 @test.llvm.bitrev(i32 %a) {199; CHECK-LABEL: test.llvm.bitrev:200; CHECK:       # %bb.0:201; CHECK-NEXT:    cv.bitrev a0, a0, 0, 0202; CHECK-NEXT:    ret203  %1 = call i32 @llvm.bitreverse(i32 %a)204  ret i32 %1205}206 207define i1 @ctpop_i32_ult_two(i32 signext %a) nounwind {208; CHECK-LABEL: ctpop_i32_ult_two:209; CHECK:       # %bb.0:210; CHECK-NEXT:    cv.cnt a0, a0211; CHECK-NEXT:    sltiu a0, a0, 2212; CHECK-NEXT:    ret213  %1 = call i32 @llvm.ctpop.i32(i32 %a)214  %2 = icmp ult i32 %1, 2215  ret i1 %2216}217 218define i1 @ctpop_i32_ugt_one(i32 signext %a) nounwind {219; CHECK-LABEL: ctpop_i32_ugt_one:220; CHECK:       # %bb.0:221; CHECK-NEXT:    cv.cnt a0, a0222; CHECK-NEXT:    sltiu a0, a0, 2223; CHECK-NEXT:    xori a0, a0, 1224; CHECK-NEXT:    ret225  %1 = call i32 @llvm.ctpop.i32(i32 %a)226  %2 = icmp ugt i32 %1, 1227  ret i1 %2228}229 230define i1 @ctpop_i32_eq_one(i32 signext %a) nounwind {231; CHECK-LABEL: ctpop_i32_eq_one:232; CHECK:       # %bb.0:233; CHECK-NEXT:    cv.cnt a0, a0234; CHECK-NEXT:    addi a0, a0, -1235; CHECK-NEXT:    seqz a0, a0236; CHECK-NEXT:    ret237  %1 = call i32 @llvm.ctpop.i32(i32 %a)238  %2 = icmp eq i32 %1, 1239  ret i1 %2240}241 242define i1 @ctpop_i32_ne_one(i32 signext %a) nounwind {243; CHECK-LABEL: ctpop_i32_ne_one:244; CHECK:       # %bb.0:245; CHECK-NEXT:    cv.cnt a0, a0246; CHECK-NEXT:    addi a0, a0, -1247; CHECK-NEXT:    snez a0, a0248; CHECK-NEXT:    ret249  %1 = call i32 @llvm.ctpop.i32(i32 %a)250  %2 = icmp ne i32 %1, 1251  ret i1 %2252}253