[IR] Move optional data in llvm::Function into a hungoff uselist
Make personality functions, prefix data, and prologue data hungoff operands of Function. This is based on the email thread "[RFC] Clean up the way we store optional Function data" on llvm-dev. Thanks to sanjoyd, majnemer, rnk, loladiro, and dexonsmith for feedback! Differential Revision: http://reviews.llvm.org/D13829 llvm-svn: 256090
This commit is contained in:
@@ -87,15 +87,9 @@ static OrderMap orderModule(const Module &M) {
|
||||
if (!isa<GlobalValue>(A.getAliasee()))
|
||||
orderValue(A.getAliasee(), OM);
|
||||
for (const Function &F : M) {
|
||||
if (F.hasPrefixData())
|
||||
if (!isa<GlobalValue>(F.getPrefixData()))
|
||||
orderValue(F.getPrefixData(), OM);
|
||||
if (F.hasPrologueData())
|
||||
if (!isa<GlobalValue>(F.getPrologueData()))
|
||||
orderValue(F.getPrologueData(), OM);
|
||||
if (F.hasPersonalityFn())
|
||||
if (!isa<GlobalValue>(F.getPersonalityFn()))
|
||||
orderValue(F.getPersonalityFn(), OM);
|
||||
for (const Use &U : F.operands())
|
||||
if (!isa<GlobalValue>(U.get()))
|
||||
orderValue(U.get(), OM);
|
||||
}
|
||||
OM.LastGlobalConstantID = OM.size();
|
||||
|
||||
@@ -273,12 +267,8 @@ static UseListOrderStack predictUseListOrder(const Module &M) {
|
||||
for (const GlobalAlias &A : M.aliases())
|
||||
predictValueUseListOrder(A.getAliasee(), nullptr, OM, Stack);
|
||||
for (const Function &F : M) {
|
||||
if (F.hasPrefixData())
|
||||
predictValueUseListOrder(F.getPrefixData(), nullptr, OM, Stack);
|
||||
if (F.hasPrologueData())
|
||||
predictValueUseListOrder(F.getPrologueData(), nullptr, OM, Stack);
|
||||
if (F.hasPersonalityFn())
|
||||
predictValueUseListOrder(F.getPersonalityFn(), nullptr, OM, Stack);
|
||||
for (const Use &U : F.operands())
|
||||
predictValueUseListOrder(U.get(), nullptr, OM, Stack);
|
||||
}
|
||||
|
||||
return Stack;
|
||||
@@ -321,20 +311,10 @@ ValueEnumerator::ValueEnumerator(const Module &M,
|
||||
for (const GlobalAlias &GA : M.aliases())
|
||||
EnumerateValue(GA.getAliasee());
|
||||
|
||||
// Enumerate the prefix data constants.
|
||||
// Enumerate any optional Function data.
|
||||
for (const Function &F : M)
|
||||
if (F.hasPrefixData())
|
||||
EnumerateValue(F.getPrefixData());
|
||||
|
||||
// Enumerate the prologue data constants.
|
||||
for (const Function &F : M)
|
||||
if (F.hasPrologueData())
|
||||
EnumerateValue(F.getPrologueData());
|
||||
|
||||
// Enumerate the personality functions.
|
||||
for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)
|
||||
if (I->hasPersonalityFn())
|
||||
EnumerateValue(I->getPersonalityFn());
|
||||
for (const Use &U : F.operands())
|
||||
EnumerateValue(U.get());
|
||||
|
||||
// Enumerate the metadata type.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user