Skip to content

Commit

Permalink
Add more aggressive composite type filter
Browse files Browse the repository at this point in the history
  • Loading branch information
fabianbs96 committed Apr 20, 2024
1 parent 47bf183 commit 767a90e
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 13 deletions.
24 changes: 13 additions & 11 deletions lib/PhasarLLVM/TypeHierarchy/DIBasedTypeHierarchy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,16 @@ DIBasedTypeHierarchy::DIBasedTypeHierarchy(const LLVMProjectIRDB &IRDB) {

// -- Filter all struct- or class types

// NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
static constexpr llvm::dwarf::Tag DwarfTags[] = {
llvm::dwarf::DW_TAG_class_type,
llvm::dwarf::DW_TAG_structure_type,
llvm::dwarf::DW_TAG_union_type,
};

for (const auto *Ty : DIF.types()) {
if (const auto *Composite = llvm::dyn_cast<llvm::DICompositeType>(Ty)) {
if (Composite->getTag() == llvm::dwarf::DW_TAG_array_type) {
if (!llvm::is_contained(DwarfTags, Composite->getTag())) {
continue;
}
TypeToVertex.try_emplace(Composite, VertexTypes.size());
Expand Down Expand Up @@ -359,16 +366,15 @@ DIBasedTypeHierarchy::getAsJson() const {
DIBasedTypeHierarchyData DIBasedTypeHierarchy::getTypeHierarchyData() const {
DIBasedTypeHierarchyData Data;
for (const auto &Curr : NameToType) {
Data.NameToType.try_emplace(Curr.getKey().str(),
Data.NameToType.try_emplace(Curr.getKey(),
Curr.getValue()->getName().str());
}

for (const auto &Curr : TypeToVertex) {
Data.TypeToVertex.try_emplace(Curr.getFirst()->getName().str(),
Curr.getSecond());
Data.TypeToVertex.try_emplace(Curr.getFirst()->getName(), Curr.getSecond());
}

int Counter = 0;
Data.VertexTypes.reserve(VertexTypes.size());
for (const auto &Curr : VertexTypes) {
if (!Curr) {
Data.VertexTypes.emplace_back("");
Expand All @@ -377,25 +383,21 @@ DIBasedTypeHierarchyData DIBasedTypeHierarchy::getTypeHierarchyData() const {

if (!Curr->getName().empty()) {
Data.VertexTypes.push_back(Curr->getName().str());
Counter++;
continue;
}

if (!Curr->getIdentifier().empty()) {
Data.VertexTypes.push_back(Curr->getIdentifier().str());
Counter++;
continue;
}

Data.VertexTypes.emplace_back("");
llvm::errs() << "VertexType has no valid name or identifier\n";
}

for (const auto &Curr : TransitiveDerivedIndex) {
Data.TransitiveDerivedIndex.emplace_back(
std::pair<uint32_t, uint32_t>(Curr.first, Curr.second));
}
Data.TransitiveDerivedIndex = TransitiveDerivedIndex;

Data.Hierarchy.reserve(Hierarchy.size());
for (const auto &Curr : Hierarchy) {
Data.Hierarchy.push_back(Curr->getName().str());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ class TypeHierarchySerialization

void compareResults(const psr::DIBasedTypeHierarchy &Orig,
const psr::DIBasedTypeHierarchy &Deser) {
ASSERT_EQ(Orig.getAllTypes().size(), Deser.getAllTypes().size());
ASSERT_EQ(Orig.getAllVTables().size(), Deser.getAllVTables().size());

EXPECT_EQ(Orig.getAllTypes().size(), Deser.getAllTypes().size());
EXPECT_EQ(Orig.getAllVTables().size(), Deser.getAllVTables().size());

for (const auto &OrigCurrentType : Orig.getAllTypes()) {
EXPECT_EQ(OrigCurrentType->getName(),
Expand Down

0 comments on commit 767a90e

Please sign in to comment.