Author: Jianjian Guan
Date: 2026-05-06T11:11:48+08:00
New Revision: 7df4736d9713aad9ad29853a149fb7189dfa661b

URL: 
https://github.com/llvm/llvm-project/commit/7df4736d9713aad9ad29853a149fb7189dfa661b
DIFF: 
https://github.com/llvm/llvm-project/commit/7df4736d9713aad9ad29853a149fb7189dfa661b.diff

LOG: [CIR][RISCV] Support zbkb builtin codegen (#195401)

Include 4 builtins: __builtin_riscv_brev8_32, __builtin_riscv_brev8_64,
__builtin_riscv_zip_32, __builtin_riscv_unzip_32.

Added: 
    clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zbkb.c

Modified: 
    clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp 
b/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp
index be861fe1eb90e..bbd1cd8d04401 100644
--- a/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp
@@ -82,9 +82,18 @@ CIRGenFunction::emitRISCVBuiltinExpr(unsigned builtinID, 
const CallExpr *e) {
   }
   // Zbkb
   case RISCV::BI__builtin_riscv_brev8_32:
-  case RISCV::BI__builtin_riscv_brev8_64:
-  case RISCV::BI__builtin_riscv_zip_32:
-  case RISCV::BI__builtin_riscv_unzip_32:
+  case RISCV::BI__builtin_riscv_brev8_64: {
+    intrinsicName = "riscv.brev8";
+    break;
+  }
+  case RISCV::BI__builtin_riscv_zip_32: {
+    intrinsicName = "riscv.zip";
+    break;
+  }
+  case RISCV::BI__builtin_riscv_unzip_32: {
+    intrinsicName = "riscv.unzip";
+    break;
+  }
   // Zknh
   case RISCV::BI__builtin_riscv_sha256sig0:
   case RISCV::BI__builtin_riscv_sha256sig1:

diff  --git a/clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zbkb.c 
b/clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zbkb.c
new file mode 100644
index 0000000000000..6285a75b4bb4a
--- /dev/null
+++ b/clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zbkb.c
@@ -0,0 +1,50 @@
+// RUN: %clang_cc1 -triple riscv32 -target-feature +zbkb -fclangir -emit-cir 
%s -o - | FileCheck %s --check-prefixes=CIR,CIR32
+// RUN: %clang_cc1 -triple riscv64 -target-feature +zbkb -fclangir -emit-cir 
%s -o - | FileCheck %s --check-prefixes=CIR,CIR64
+// RUN: %clang_cc1 -triple riscv32 -target-feature +zbkb -fclangir -emit-llvm 
%s -o - | FileCheck %s --check-prefixes=LLVM,LLVM32
+// RUN: %clang_cc1 -triple riscv64 -target-feature +zbkb -fclangir -emit-llvm 
%s -o - | FileCheck %s --check-prefixes=LLVM,LLVM64
+// RUN: %clang_cc1 -triple riscv32 -target-feature +zbkb -emit-llvm %s -o - | 
FileCheck %s --check-prefixes=LLVM,LLVM32
+// RUN: %clang_cc1 -triple riscv64 -target-feature +zbkb -emit-llvm %s -o - | 
FileCheck %s --check-prefixes=LLVM,LLVM64
+
+// CIR-LABEL: cir.func{{.*}} @test_builtin_brev8_32(
+// CIR: {{%.*}} = cir.call_llvm_intrinsic "riscv.brev8" {{%.*}} : (!u32i) -> 
!u32i
+// CIR: cir.return
+// LLVM-LABEL: @test_builtin_brev8_32(
+// LLVM: call i32 @llvm.riscv.brev8.i32(i32 {{%.*}})
+// LLVM: ret i32
+unsigned int test_builtin_brev8_32(unsigned int a) {
+  return __builtin_riscv_brev8_32(a);
+}
+
+#if __riscv_xlen == 32
+// CIR32-LABEL: cir.func{{.*}} @test_builtin_zip_32(
+// CIR32: {{%.*}} = cir.call_llvm_intrinsic "riscv.zip" {{%.*}} : (!u32i) -> 
!u32i
+// CIR32: cir.return
+// LLVM32-LABEL: @test_builtin_zip_32(
+// LLVM32: call i32 @llvm.riscv.zip.i32(i32 {{%.*}})
+// LLVM32: ret i32
+unsigned int test_builtin_zip_32(unsigned int a) {
+  return __builtin_riscv_zip_32(a);
+}
+
+// CIR32-LABEL: cir.func{{.*}} @test_builtin_unzip_32(
+// CIR32: {{%.*}} = cir.call_llvm_intrinsic "riscv.unzip" {{%.*}} : (!u32i) -> 
!u32i
+// CIR32: cir.return
+// LLVM32-LABEL: @test_builtin_unzip_32(
+// LLVM32: call i32 @llvm.riscv.unzip.i32(i32 {{%.*}})
+// LLVM32: ret i32
+unsigned int test_builtin_unzip_32(unsigned int a) {
+  return __builtin_riscv_unzip_32(a);
+}
+#endif
+
+#if __riscv_xlen == 64
+// CIR64-LABEL: cir.func{{.*}} @test_builtin_brev8_64(
+// CIR64: {{%.*}} = cir.call_llvm_intrinsic "riscv.brev8" {{%.*}} : (!u64i) -> 
!u64i
+// CIR64: cir.return
+// LLVM64-LABEL: @test_builtin_brev8_64(
+// LLVM64: call i64 @llvm.riscv.brev8.i64(i64 {{%.*}})
+// LLVM64: ret i64
+unsigned long long test_builtin_brev8_64(unsigned long long a) {
+  return __builtin_riscv_brev8_64(a);
+}
+#endif


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to