diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 80e48fbceef4..6b43a8de218e 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -17875,64 +17875,71 @@ Value *CodeGenFunction::EmitRISCVBuiltinExpr(unsigned BuiltinID, // Required for overloaded intrinsics. llvm::SmallVector IntrinsicTypes; switch (BuiltinID) { -#include "clang/Basic/riscv_vector_builtin_cg.inc" - - // Zbb + default: llvm_unreachable("unexpected builtin ID"); case RISCV::BI__builtin_riscv_orc_b_32: case RISCV::BI__builtin_riscv_orc_b_64: - ID = Intrinsic::riscv_orc_b; - IntrinsicTypes = {ResultType}; - break; - - // Zbc case RISCV::BI__builtin_riscv_clmul: - ID = Intrinsic::riscv_clmul; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_clmulh: - ID = Intrinsic::riscv_clmulh; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_clmulr: - ID = Intrinsic::riscv_clmulr; - IntrinsicTypes = {ResultType}; - break; - - // Zbr case RISCV::BI__builtin_riscv_crc32_b: - ID = Intrinsic::riscv_crc32_b; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_crc32_h: - ID = Intrinsic::riscv_crc32_h; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_crc32_w: - ID = Intrinsic::riscv_crc32_w; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_crc32_d: - ID = Intrinsic::riscv_crc32_d; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_crc32c_b: - ID = Intrinsic::riscv_crc32c_b; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_crc32c_h: - ID = Intrinsic::riscv_crc32c_h; - IntrinsicTypes = {ResultType}; - break; case RISCV::BI__builtin_riscv_crc32c_w: - ID = Intrinsic::riscv_crc32c_w; + case RISCV::BI__builtin_riscv_crc32c_d: { + switch (BuiltinID) { + default: llvm_unreachable("unexpected builtin ID"); + // Zbb + case RISCV::BI__builtin_riscv_orc_b_32: + case RISCV::BI__builtin_riscv_orc_b_64: + ID = Intrinsic::riscv_orc_b; + break; + + // Zbc + case RISCV::BI__builtin_riscv_clmul: + ID = Intrinsic::riscv_clmul; + break; + case RISCV::BI__builtin_riscv_clmulh: + ID = Intrinsic::riscv_clmulh; + break; + case RISCV::BI__builtin_riscv_clmulr: + ID = Intrinsic::riscv_clmulr; + break; + + // Zbr + case RISCV::BI__builtin_riscv_crc32_b: + ID = Intrinsic::riscv_crc32_b; + break; + case RISCV::BI__builtin_riscv_crc32_h: + ID = Intrinsic::riscv_crc32_h; + break; + case RISCV::BI__builtin_riscv_crc32_w: + ID = Intrinsic::riscv_crc32_w; + break; + case RISCV::BI__builtin_riscv_crc32_d: + ID = Intrinsic::riscv_crc32_d; + break; + case RISCV::BI__builtin_riscv_crc32c_b: + ID = Intrinsic::riscv_crc32c_b; + break; + case RISCV::BI__builtin_riscv_crc32c_h: + ID = Intrinsic::riscv_crc32c_h; + break; + case RISCV::BI__builtin_riscv_crc32c_w: + ID = Intrinsic::riscv_crc32c_w; + break; + case RISCV::BI__builtin_riscv_crc32c_d: + ID = Intrinsic::riscv_crc32c_d; + break; + } + IntrinsicTypes = {ResultType}; break; - case RISCV::BI__builtin_riscv_crc32c_d: - ID = Intrinsic::riscv_crc32c_d; - IntrinsicTypes = {ResultType}; - break; - default: - llvm_unreachable("unexpected builtin ID"); + } + // Vector builtins are handled from here. +#include "clang/Basic/riscv_vector_builtin_cg.inc" } assert(ID != Intrinsic::not_intrinsic);