Skip to content

Commit

Permalink
LowerTypeTests: Deduplicate code. NFC.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319390 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
pcc committed Nov 30, 2017
1 parent 1edbc9f commit b45fa1a
Showing 1 changed file with 17 additions and 30 deletions.
47 changes: 17 additions & 30 deletions lib/Transforms/IPO/LowerTypeTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1480,38 +1480,25 @@ void LowerTypeTestsModule::buildBitSetsFromDisjointSet(
for (auto &&MemSet : TypeMembers)
GLB.addFragment(MemSet);

// Build the bitsets from this disjoint set.
if (Globals.empty() || isa<GlobalVariable>(Globals[0]->getGlobal())) {
// Build a vector of global variables with the computed layout.
std::vector<GlobalTypeMember *> OrderedGVs(Globals.size());
auto OGI = OrderedGVs.begin();
for (auto &&F : GLB.Fragments) {
for (auto &&Offset : F) {
auto GV = dyn_cast<GlobalVariable>(Globals[Offset]->getGlobal());
if (!GV)
report_fatal_error("Type identifier may not contain both global "
"variables and functions");
*OGI++ = Globals[Offset];
}
}

buildBitSetsFromGlobalVariables(TypeIds, OrderedGVs);
} else {
// Build a vector of functions with the computed layout.
std::vector<GlobalTypeMember *> OrderedFns(Globals.size());
auto OFI = OrderedFns.begin();
for (auto &&F : GLB.Fragments) {
for (auto &&Offset : F) {
auto Fn = dyn_cast<Function>(Globals[Offset]->getGlobal());
if (!Fn)
report_fatal_error("Type identifier may not contain both global "
"variables and functions");
*OFI++ = Globals[Offset];
}
// Build a vector of globals with the computed layout.
bool IsGlobalSet =
Globals.empty() || isa<GlobalVariable>(Globals[0]->getGlobal());
std::vector<GlobalTypeMember *> OrderedGTMs(Globals.size());
auto OGTMI = OrderedGTMs.begin();
for (auto &&F : GLB.Fragments) {
for (auto &&Offset : F) {
if (IsGlobalSet != isa<GlobalVariable>(Globals[Offset]->getGlobal()))
report_fatal_error("Type identifier may not contain both global "
"variables and functions");
*OGTMI++ = Globals[Offset];
}

buildBitSetsFromFunctions(TypeIds, OrderedFns);
}

// Build the bitsets from this disjoint set.
if (IsGlobalSet)
buildBitSetsFromGlobalVariables(TypeIds, OrderedGTMs);
else
buildBitSetsFromFunctions(TypeIds, OrderedGTMs);
}

/// Lower all type tests in this module.
Expand Down

0 comments on commit b45fa1a

Please sign in to comment.