forked from OSchip/llvm-project
[ThinLTO] - Simplify code in ThinLTOBitcodeWriter.
Recently introduced convertToDeclaration is very similar to code used in filterModule function. Patch reuses it to reduce duplication. Differential revision: https://reviews.llvm.org/D42971 llvm-svn: 324455
This commit is contained in:
parent
2f70693e08
commit
5f133dc99b
|
@ -23,6 +23,7 @@
|
|||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "llvm/Transforms/IPO.h"
|
||||
#include "llvm/Transforms/IPO/FunctionAttrs.h"
|
||||
#include "llvm/Transforms/IPO/FunctionImport.h"
|
||||
#include "llvm/Transforms/Utils/Cloning.h"
|
||||
#include "llvm/Transforms/Utils/ModuleUtils.h"
|
||||
using namespace llvm;
|
||||
|
@ -169,45 +170,18 @@ void simplifyExternals(Module &M) {
|
|||
}
|
||||
}
|
||||
|
||||
void filterModule(
|
||||
Module *M, function_ref<bool(const GlobalValue *)> ShouldKeepDefinition) {
|
||||
for (Module::alias_iterator I = M->alias_begin(), E = M->alias_end();
|
||||
I != E;) {
|
||||
GlobalAlias *GA = &*I++;
|
||||
if (ShouldKeepDefinition(GA))
|
||||
continue;
|
||||
|
||||
GlobalObject *GO;
|
||||
if (GA->getValueType()->isFunctionTy())
|
||||
GO = Function::Create(cast<FunctionType>(GA->getValueType()),
|
||||
GlobalValue::ExternalLinkage, "", M);
|
||||
else
|
||||
GO = new GlobalVariable(
|
||||
*M, GA->getValueType(), false, GlobalValue::ExternalLinkage,
|
||||
nullptr, "", nullptr,
|
||||
GA->getThreadLocalMode(), GA->getType()->getAddressSpace());
|
||||
GO->takeName(GA);
|
||||
GA->replaceAllUsesWith(GO);
|
||||
GA->eraseFromParent();
|
||||
}
|
||||
|
||||
for (Function &F : *M) {
|
||||
if (ShouldKeepDefinition(&F))
|
||||
continue;
|
||||
|
||||
F.deleteBody();
|
||||
F.setComdat(nullptr);
|
||||
F.clearMetadata();
|
||||
}
|
||||
|
||||
for (GlobalVariable &GV : M->globals()) {
|
||||
static void
|
||||
filterModule(Module *M,
|
||||
function_ref<bool(const GlobalValue *)> ShouldKeepDefinition) {
|
||||
auto I = M->global_values().begin();
|
||||
auto E = M->global_values().end();
|
||||
while (I != E) {
|
||||
GlobalValue &GV = *I++;
|
||||
if (ShouldKeepDefinition(&GV))
|
||||
continue;
|
||||
|
||||
GV.setInitializer(nullptr);
|
||||
GV.setLinkage(GlobalValue::ExternalLinkage);
|
||||
GV.setComdat(nullptr);
|
||||
GV.clearMetadata();
|
||||
if (convertToDeclaration(GV))
|
||||
continue;
|
||||
GV.eraseFromParent();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue