@@ -5848,6 +5848,12 @@ static const char *getSectionNameForCommandline(const Triple &T) {
58485848 llvm_unreachable (" Unimplemented ObjectFormatType" );
58495849}
58505850
5851+ static auto globalInUsedHasName (StringRef Name) {
5852+ return [Name](Constant* C) {
5853+ return C->getName () == Name;
5854+ };
5855+ }
5856+
58515857void llvm::embedBitcodeInModule (llvm::Module &M, llvm::MemoryBufferRef Buf,
58525858 bool EmbedBitcode, bool EmbedCmdline,
58535859 const std::vector<uint8_t > &CmdArgs) {
@@ -5858,19 +5864,6 @@ void llvm::embedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
58585864 Triple T (M.getTargetTriple ());
58595865 SmallVector<GlobalValue *, 2 > NewGlobals;
58605866
5861- auto IsCmdOrBitcode = [&](Constant *C) {
5862- GlobalVariable *GV = dyn_cast<GlobalVariable>(C);
5863- StringRef Name = GV ? GV->getName () : " " ;
5864- if (EmbedBitcode && Name == " llvm.embedded.module" )
5865- return true ;
5866- if (EmbedCmdline && Name == " llvm.cmdline" )
5867- return true ;
5868- return false ;
5869- };
5870-
5871- if (EmbedBitcode || EmbedCmdline)
5872- removeFromUsedLists (M, IsCmdOrBitcode);
5873-
58745867 if (EmbedBitcode) {
58755868 if (Buf.getBufferSize () == 0 ||
58765869 !isBitcode ((const unsigned char *)Buf.getBufferStart (),
@@ -5898,6 +5891,7 @@ void llvm::embedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
58985891 NewGlobals.push_back (EmbeddedModule);
58995892 if (llvm::GlobalVariable *Old =
59005893 M.getGlobalVariable (" llvm.embedded.module" , true )) {
5894+ removeFromUsedLists (M, globalInUsedHasName (" llvm.embedded.module" ));
59015895 assert (Old->hasZeroLiveUses () &&
59025896 " llvm.embedded.module can only be used once in llvm.compiler.used" );
59035897 EmbeddedModule->takeName (Old);
@@ -5919,6 +5913,7 @@ void llvm::embedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
59195913 CmdLine->setSection (getSectionNameForCommandline (T));
59205914 CmdLine->setAlignment (Align (1 ));
59215915 if (llvm::GlobalVariable *Old = M.getGlobalVariable (" llvm.cmdline" , true )) {
5916+ removeFromUsedLists (M, globalInUsedHasName (" llvm.cmdline" ));
59225917 assert (Old->hasZeroLiveUses () &&
59235918 " llvm.cmdline can only be used once in llvm.compiler.used" );
59245919 CmdLine->takeName (Old);
0 commit comments