Add doInitialization/doFinalization to DataLayoutPass.

With this a DataLayoutPass can be reused for multiple modules.

Once we have doInitialization/doFinalization, it doesn't seem necessary to pass
a Module to the constructor.

Overall this change seems in line with the idea of making DataLayout a required
part of Module. With it the only way of having a DataLayout used is to add it
to the Module.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217548 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2014-09-10 21:27:43 +00:00
parent 2d818506ed
commit 3b670550ad
17 changed files with 36 additions and 34 deletions

View File

@ -345,6 +345,10 @@ void DataLayout::parseSpecifier(StringRef Desc) {
}
DataLayout::DataLayout(const Module *M) : LayoutMap(nullptr) {
init(M);
}
void DataLayout::init(const Module *M) {
const DataLayout *Other = M->getDataLayout();
if (Other)
*this = *Other;
@ -796,17 +800,17 @@ unsigned DataLayout::getPreferredAlignmentLog(const GlobalVariable *GV) const {
}
DataLayoutPass::DataLayoutPass() : ImmutablePass(ID), DL("") {
report_fatal_error("Bad DataLayoutPass ctor used. Tool did not specify a "
"DataLayout to use?");
initializeDataLayoutPassPass(*PassRegistry::getPassRegistry());
}
DataLayoutPass::~DataLayoutPass() {}
DataLayoutPass::DataLayoutPass(const DataLayout &DL)
: ImmutablePass(ID), DL(DL) {
initializeDataLayoutPassPass(*PassRegistry::getPassRegistry());
bool DataLayoutPass::doInitialization(Module &M) {
DL.init(&M);
return false;
}
DataLayoutPass::DataLayoutPass(const Module *M) : ImmutablePass(ID), DL(M) {
initializeDataLayoutPassPass(*PassRegistry::getPassRegistry());
bool DataLayoutPass::doFinalization(Module &M) {
DL.reset("");
return false;
}