[RISCV] Refactor conversion of B extensions to IR intrinsics a little to reduce clang binary size.
These all pass 1 type to getIntrinsic. So rather than assigning IntrinsicTypes for each builtin which invokes the SmallVector constructor, just select the intrinsic ID with a switch and share a single assignment of IntrinsicTypes.
This commit is contained in:
parent
2458aa0b91
commit
b4f2e80600
@ -17875,64 +17875,71 @@ Value *CodeGenFunction::EmitRISCVBuiltinExpr(unsigned BuiltinID,
|
||||
// Required for overloaded intrinsics.
|
||||
llvm::SmallVector<llvm::Type *, 2> 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user