[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