about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
diff options
context:
space:
mode:
authorDianQK <dianqk@dianqk.net>2023-10-18 22:29:00 +0800
committerDianQK <dianqk@dianqk.net>2023-10-21 19:14:01 +0800
commitb592f29a8e7b1f83958f429ca42947f32ec6898c (patch)
tree72e9ee3579e7db338a79c353e02392d85c7641e2 /compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
parent665da1ed320abeaf276dafbfd041ebcda50034cf (diff)
downloadrust-b592f29a8e7b1f83958f429ca42947f32ec6898c.tar.gz
rust-b592f29a8e7b1f83958f429ca42947f32ec6898c.zip
Treat extern in compiler-builtins as `used`
We have to preserve the symbols of the built-in functions during LTO.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp')
-rw-r--r--compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp104
1 files changed, 1 insertions, 103 deletions
diff --git a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
index f338b914c67..ff2ec388a5f 100644
--- a/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
+++ b/compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
@@ -1120,102 +1120,6 @@ extern "C" void LLVMRustPrintPasses() {
   PB.printPassNames(outs());
 }
 
-// from https://github.com/llvm/llvm-project/blob/7021182d6b43de9488ab70de626192ce70b3a4a6/llvm/lib/Object/IRSymtab.cpp#L48-L57
-static const char *PreservedLibcallSymbols[] = {
-#define HANDLE_LIBCALL(code, name) name,
-#include "llvm/IR/RuntimeLibcalls.def"
-#undef HANDLE_LIBCALL
-  // RuntimeLibcalls.def missing symbols.
-  "__ctzsi2",
-  "__ctzdi2",
-  "__ctzti2",
-  "__ffssi2",
-  "__ffsdi2",
-  "__ffsti2",
-  "__paritysi2",
-  "__paritydi2",
-  "__parityti2",
-  "__popcountsi2",
-  "__popcountdi2",
-  "__popcountti2",
-  "__bswapsi2",
-  "__bswapdi2",
-  "__negti2",
-  "__udivmoddi4",
-  "__udivmodti4",
-  "__udivmodsi4",
-  "__divmodsi4",
-  "__divmoddi4",
-  "__divmodti4",
-  "__absvsi2",
-  "__absvdi2",
-  "__absvti2",
-  "__negvsi2",
-  "__negvdi2",
-  "__negvti2",
-  "__addvsi3",
-  "__addvdi3",
-  "__addvti3",
-  "__subvsi3",
-  "__subvdi3",
-  "__subvti3",
-  "__mulvsi3",
-  "__mulvdi3",
-  "__mulvti3",
-  "__cmpdi2",
-  "__cmpti2",
-  "__ucmpdi2",
-  "__ucmpti2",
-  "__mulsc3",
-  "__muldc3",
-  "__mulxc3",
-  "__multc3",
-  "__divsc3",
-  "__divdc3",
-  "__divxc3",
-  "__divtc3",
-  "__clear_cache",
-  "__enable_execute_stack",
-  "__gcc_personality_v0",
-  "__eprintf",
-  "__emutls_get_address",
-  "__trampoline_setup",
-  "__addsf3vfp",
-  "__adddf3vfp",
-  "__divsf3vfp",
-  "__divdf3vfp",
-  "__eqsf2vfp",
-  "__eqdf2vfp",
-  "__extendsfdf2vfp",
-  "__fixdfsivfp",
-  "__fixsfsivfp",
-  "__fixunssfsivfp",
-  "__fixunsdfsivfp",
-  "__floatsidfvfp",
-  "__floatsisfvfp",
-  "__floatunssidfvfp",
-  "__floatunssisfvfp",
-  "__gedf2vfp",
-  "__gesf2vfp",
-  "__gtdf2vfp",
-  "__gtsf2vfp",
-  "__ledf2vfp",
-  "__lesf2vfp",
-  "__ltdf2vfp",
-  "__ltsf2vfp",
-  "__muldf3vfp",
-  "__mulsf3vfp",
-  "__nedf2vfp",
-  "__negdf2vfp",
-  "__negsf2vfp",
-  "__negsf2vfp",
-  "__subdf3vfp",
-  "__subsf3vfp",
-  "__truncdfsf2vfp",
-  "__unorddf2vfp",
-  "__unordsf2vfp",
-};
-
 extern "C" void LLVMRustRunRestrictionPass(LLVMModuleRef M, char **Symbols,
                                            size_t Len) {
   auto PreserveFunctions = [=](const GlobalValue &GV) {
@@ -1231,7 +1135,7 @@ extern "C" void LLVMRustRunRestrictionPass(LLVMModuleRef M, char **Symbols,
         return true;
       }
     }
-    return llvm::is_contained(PreservedLibcallSymbols, GV.getName());
+    return false;
   };
 
   internalizeModule(*unwrap(M), PreserveFunctions);
@@ -1389,12 +1293,6 @@ LLVMRustCreateThinLTOData(LLVMRustThinLTOModule *modules,
     auto GUID = GlobalValue::getGUID(preserved_symbols[i]);
     Ret->GUIDPreservedSymbols.insert(GUID);
   }
-  for (int i = 0; i < sizeof(PreservedLibcallSymbols) / sizeof(PreservedLibcallSymbols[0]); i++) {
-    if (auto *PreservedLibcallSymbol = PreservedLibcallSymbols[i]) {
-      auto GUID = GlobalValue::getGUID(PreservedLibcallSymbol);
-      Ret->GUIDPreservedSymbols.insert(GUID);
-    }
-  }
 
   // Collect the import/export lists for all modules from the call-graph in the
   // combined index