diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp index bd9202705d147..6793e3b11cef2 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltinRISCV.cpp @@ -121,8 +121,14 @@ CIRGenFunction::emitRISCVBuiltinExpr(unsigned builtinID, const CallExpr *e) { break; } // Zksh - case RISCV::BI__builtin_riscv_sm3p0: - case RISCV::BI__builtin_riscv_sm3p1: + case RISCV::BI__builtin_riscv_sm3p0: { + intrinsicName = "riscv.sm3p0"; + break; + } + case RISCV::BI__builtin_riscv_sm3p1: { + intrinsicName = "riscv.sm3p1"; + break; + } // Zbb case RISCV::BI__builtin_riscv_clz_32: case RISCV::BI__builtin_riscv_clz_64: diff --git a/clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zksh.c b/clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zksh.c new file mode 100644 index 0000000000000..97417ae038831 --- /dev/null +++ b/clang/test/CIR/CodeGenBuiltins/RISCV/riscv-zksh.c @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -triple riscv32 -target-feature +zksh -fclangir -emit-cir %s -o - | FileCheck %s --check-prefixes=CIR +// RUN: %clang_cc1 -triple riscv64 -target-feature +zksh -fclangir -emit-cir %s -o - | FileCheck %s --check-prefixes=CIR +// RUN: %clang_cc1 -triple riscv32 -target-feature +zksh -fclangir -emit-llvm %s -o - | FileCheck %s --check-prefixes=LLVM +// RUN: %clang_cc1 -triple riscv64 -target-feature +zksh -fclangir -emit-llvm %s -o - | FileCheck %s --check-prefixes=LLVM +// RUN: %clang_cc1 -triple riscv32 -target-feature +zksh -emit-llvm %s -o - | FileCheck %s --check-prefixes=LLVM +// RUN: %clang_cc1 -triple riscv64 -target-feature +zksh -emit-llvm %s -o - | FileCheck %s --check-prefixes=LLVM + +// CIR-LABEL: cir.func{{.*}} @test_builtin_sm3p0( +// CIR: {{%.*}} = cir.call_llvm_intrinsic "riscv.sm3p0" {{%.*}} : (!u32i) -> !u32i +// CIR: cir.return +// LLVM-LABEL: @test_builtin_sm3p0( +// LLVM: call i32 @llvm.riscv.sm3p0(i32 {{%.*}}) +// LLVM: ret i32 +unsigned int test_builtin_sm3p0(unsigned int a) { + return __builtin_riscv_sm3p0(a); +} + +// CIR-LABEL: cir.func{{.*}} @test_builtin_sm3p1( +// CIR: {{%.*}} = cir.call_llvm_intrinsic "riscv.sm3p1" {{%.*}} : (!u32i) -> !u32i +// CIR: cir.return +// LLVM-LABEL: @test_builtin_sm3p1( +// LLVM: call i32 @llvm.riscv.sm3p1(i32 {{%.*}}) +// LLVM: ret i32 +unsigned int test_builtin_sm3p1(unsigned int a) { + return __builtin_riscv_sm3p1(a); +}