xref: /llvm-project/clang/test/CodeGen/RISCV/rvb-intrinsics/zbkb.c (revision 1a3b14d26152ab7e7352c8e7aa97ec880cdac82d)
136ac6ac1SCraig Topper // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
236ac6ac1SCraig Topper // RUN: %clang_cc1 -triple riscv32 -target-feature +zbkb -emit-llvm %s -o - \
336ac6ac1SCraig Topper // RUN:     -disable-O0-optnone | opt -S -passes=mem2reg \
436ac6ac1SCraig Topper // RUN:     | FileCheck %s  -check-prefix=RV32ZBKB
536ac6ac1SCraig Topper // RUN: %clang_cc1 -triple riscv64 -target-feature +zbkb -emit-llvm %s -o - \
636ac6ac1SCraig Topper // RUN:     -disable-O0-optnone | opt -S -passes=mem2reg \
736ac6ac1SCraig Topper // RUN:     | FileCheck %s  -check-prefix=RV64ZBKB
836ac6ac1SCraig Topper 
9*1a3b14d2SCraig Topper #include <riscv_bitmanip.h>
1036ac6ac1SCraig Topper 
1136ac6ac1SCraig Topper // RV32ZBKB-LABEL: @brev8_32(
1236ac6ac1SCraig Topper // RV32ZBKB-NEXT:  entry:
1336ac6ac1SCraig Topper // RV32ZBKB-NEXT:    [[TMP0:%.*]] = call i32 @llvm.riscv.brev8.i32(i32 [[RS1:%.*]])
1436ac6ac1SCraig Topper // RV32ZBKB-NEXT:    ret i32 [[TMP0]]
1536ac6ac1SCraig Topper //
1636ac6ac1SCraig Topper // RV64ZBKB-LABEL: @brev8_32(
1736ac6ac1SCraig Topper // RV64ZBKB-NEXT:  entry:
1836ac6ac1SCraig Topper // RV64ZBKB-NEXT:    [[TMP0:%.*]] = call i32 @llvm.riscv.brev8.i32(i32 [[RS1:%.*]])
1936ac6ac1SCraig Topper // RV64ZBKB-NEXT:    ret i32 [[TMP0]]
2036ac6ac1SCraig Topper //
brev8_32(uint32_t rs1)2136ac6ac1SCraig Topper uint32_t brev8_32(uint32_t rs1)
2236ac6ac1SCraig Topper {
23*1a3b14d2SCraig Topper   return __riscv_brev8_32(rs1);
2436ac6ac1SCraig Topper }
2536ac6ac1SCraig Topper 
2636ac6ac1SCraig Topper #if __riscv_xlen == 64
2736ac6ac1SCraig Topper // RV64ZBKB-LABEL: @brev8_64(
2836ac6ac1SCraig Topper // RV64ZBKB-NEXT:  entry:
2936ac6ac1SCraig Topper // RV64ZBKB-NEXT:    [[TMP0:%.*]] = call i64 @llvm.riscv.brev8.i64(i64 [[RS1:%.*]])
3036ac6ac1SCraig Topper // RV64ZBKB-NEXT:    ret i64 [[TMP0]]
3136ac6ac1SCraig Topper //
brev8_64(uint64_t rs1)3236ac6ac1SCraig Topper uint64_t brev8_64(uint64_t rs1)
3336ac6ac1SCraig Topper {
34*1a3b14d2SCraig Topper   return __riscv_brev8_64(rs1);
3536ac6ac1SCraig Topper }
3636ac6ac1SCraig Topper #endif
3736ac6ac1SCraig Topper 
3836ac6ac1SCraig Topper #if __riscv_xlen == 32
3936ac6ac1SCraig Topper // RV32ZBKB-LABEL: @zip(
4036ac6ac1SCraig Topper // RV32ZBKB-NEXT:  entry:
4136ac6ac1SCraig Topper // RV32ZBKB-NEXT:    [[TMP0:%.*]] = call i32 @llvm.riscv.zip.i32(i32 [[RS1:%.*]])
4236ac6ac1SCraig Topper // RV32ZBKB-NEXT:    ret i32 [[TMP0]]
4336ac6ac1SCraig Topper //
zip(uint32_t rs1)4436ac6ac1SCraig Topper uint32_t zip(uint32_t rs1)
4536ac6ac1SCraig Topper {
46*1a3b14d2SCraig Topper   return __riscv_zip_32(rs1);
4736ac6ac1SCraig Topper }
4836ac6ac1SCraig Topper 
4936ac6ac1SCraig Topper // RV32ZBKB-LABEL: @unzip(
5036ac6ac1SCraig Topper // RV32ZBKB-NEXT:  entry:
5136ac6ac1SCraig Topper // RV32ZBKB-NEXT:    [[TMP0:%.*]] = call i32 @llvm.riscv.unzip.i32(i32 [[RS1:%.*]])
5236ac6ac1SCraig Topper // RV32ZBKB-NEXT:    ret i32 [[TMP0]]
5336ac6ac1SCraig Topper //
unzip(uint32_t rs1)5436ac6ac1SCraig Topper uint32_t unzip(uint32_t rs1)
5536ac6ac1SCraig Topper {
56*1a3b14d2SCraig Topper   return __riscv_unzip_32(rs1);
5736ac6ac1SCraig Topper }
5836ac6ac1SCraig Topper #endif
59