[clang] b4f2e80 - [RISCV] Refactor conversion of B extensions to IR intrinsics a little to reduce clang binary size.
Craig Topper via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 2 23:50:49 PDT 2021
Author: Craig Topper
Date: 2021-04-02T23:49:44-07:00
New Revision: b4f2e8060075761dd0e9727ea01ca0142b4e767f
URL: https://github.com/llvm/llvm-project/commit/b4f2e8060075761dd0e9727ea01ca0142b4e767f
DIFF: https://github.com/llvm/llvm-project/commit/b4f2e8060075761dd0e9727ea01ca0142b4e767f.diff
LOG: [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.
Added:
Modified:
clang/lib/CodeGen/CGBuiltin.cpp
Removed:
################################################################################
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<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;
- IntrinsicTypes = {ResultType};
- break;
- case RISCV::BI__builtin_riscv_crc32c_d:
- ID = Intrinsic::riscv_crc32c_d;
+ 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;
- 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);
More information about the cfe-commits
mailing list