diff --git a/CMakeLists.txt b/CMakeLists.txt index b4fe7f4c6..ce941b832 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,8 +200,8 @@ macro(add_decompilation_pipeline_test CATEGORY INPUT_FILE CONFIGURATION OUTPUT T opt -S -dla -phi-asap-assignment-info - -mark-for-serialization -restructure-cfg + -mark-for-serialization -add-scev-barrier -decompilation -serialize-model diff --git a/include/revng-c/Decompiler/MarkForSerialization.h b/include/revng-c/MarkForSerialization/MarkForSerializationFlags.h similarity index 85% rename from include/revng-c/Decompiler/MarkForSerialization.h rename to include/revng-c/MarkForSerialization/MarkForSerializationFlags.h index 63b597fc1..8f73f901e 100644 --- a/include/revng-c/Decompiler/MarkForSerialization.h +++ b/include/revng-c/MarkForSerialization/MarkForSerializationFlags.h @@ -4,25 +4,11 @@ // Copyright (c) rev.ng Srls. See LICENSE.md for details. // -/// \brief Pass that identifies which Instructions must be serialized - -#include -#include -#include - -#include "llvm/Pass.h" - -#include "revng/Support/Debug.h" - namespace llvm { -class Function; class Instruction; -class LoadInst; -} // end namespace llvm - -extern Logger<> MarkLog; +} // namespace llvm /// \brief bitmask that represents reasons why an Instruction muse be serialized enum SerializationReason { @@ -122,19 +108,3 @@ private: using SerializationMap = std::map; - -struct MarkForSerializationPass : public llvm::FunctionPass { -public: - static char ID; - - MarkForSerializationPass() : llvm::FunctionPass(ID) {} - - void getAnalysisUsage(llvm::AnalysisUsage &AU) const override; - - bool runOnFunction(llvm::Function &F) override; - - const auto &getMap() const { return ToSerialize; } - -private: - SerializationMap ToSerialize; -}; diff --git a/include/revng-c/MarkForSerialization/MarkForSerializationPass.h b/include/revng-c/MarkForSerialization/MarkForSerializationPass.h new file mode 100644 index 000000000..556e8983a --- /dev/null +++ b/include/revng-c/MarkForSerialization/MarkForSerializationPass.h @@ -0,0 +1,42 @@ +#pragma once + +// +// Copyright (c) rev.ng Srls. See LICENSE.md for details. +// + +/// \brief Pass that identifies which Instructions must be serialized + +#include +#include +#include + +#include "llvm/Pass.h" + +#include "revng/Support/Debug.h" + +#include "MarkForSerializationFlags.h" + +namespace llvm { + +class Function; +class LoadInst; + +} // end namespace llvm + +extern Logger<> MarkLog; + +struct MarkForSerializationPass : public llvm::FunctionPass { +public: + static char ID; + + MarkForSerializationPass() : llvm::FunctionPass(ID) {} + + void getAnalysisUsage(llvm::AnalysisUsage &AU) const override; + + bool runOnFunction(llvm::Function &F) override; + + const auto &getMap() const { return ToSerialize; } + +private: + SerializationMap ToSerialize; +}; diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index afa2feeb8..da700ccc5 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -8,6 +8,7 @@ add_subdirectory(Decompiler) add_subdirectory(FilterForDecompilation) add_subdirectory(Liveness) add_subdirectory(MakeEnvNull) +add_subdirectory(MarkForSerialization) add_subdirectory(PHIASAPAssignmentInfo) add_subdirectory(PromoteStackPointer) add_subdirectory(RestructureCFGPass) diff --git a/lib/Decompiler/ASTBuildAnalysis.h b/lib/Decompiler/ASTBuildAnalysis.h index cea2a29f6..ded70f932 100644 --- a/lib/Decompiler/ASTBuildAnalysis.h +++ b/lib/Decompiler/ASTBuildAnalysis.h @@ -18,7 +18,7 @@ #include "revng/Support/MonotoneFramework.h" #include "revng-c/DataLayoutAnalysis/DLALayouts.h" -#include "revng-c/Decompiler/MarkForSerialization.h" +#include "revng-c/MarkForSerialization/MarkForSerializationFlags.h" namespace clang { class ASTContext; diff --git a/lib/Decompiler/AddSCEVBarrierPass.cpp b/lib/Decompiler/AddSCEVBarrierPass.cpp index 0cb400376..dc1663d07 100644 --- a/lib/Decompiler/AddSCEVBarrierPass.cpp +++ b/lib/Decompiler/AddSCEVBarrierPass.cpp @@ -13,7 +13,7 @@ #include "revng/Model/LoadModelPass.h" #include "revng/Support/FunctionTags.h" -#include "revng-c/Decompiler/MarkForSerialization.h" +#include "revng-c/MarkForSerialization/MarkForSerializationPass.h" #include "Mangling.h" diff --git a/lib/Decompiler/CDecompilerAction.cpp b/lib/Decompiler/CDecompilerAction.cpp index aa5d9a50e..47cfe4c09 100644 --- a/lib/Decompiler/CDecompilerAction.cpp +++ b/lib/Decompiler/CDecompilerAction.cpp @@ -17,7 +17,6 @@ #include "revng/Support/Debug.h" #include "revng/Support/FunctionTags.h" -#include "revng-c/Decompiler/MarkForSerialization.h" #include "revng-c/RestructureCFGPass/ASTTree.h" #include "revng-c/RestructureCFGPass/ExprNode.h" #include "revng-c/RestructureCFGPass/RegionCFGTree.h" diff --git a/lib/Decompiler/CDecompilerAction.h b/lib/Decompiler/CDecompilerAction.h index 930843a51..89b5fce35 100644 --- a/lib/Decompiler/CDecompilerAction.h +++ b/lib/Decompiler/CDecompilerAction.h @@ -12,7 +12,7 @@ #include "clang/Frontend/FrontendAction.h" #include "revng-c/DataLayoutAnalysis/DLALayouts.h" -#include "revng-c/Decompiler/MarkForSerialization.h" +#include "revng-c/MarkForSerialization/MarkForSerializationFlags.h" #include "CDecompilerBeautify.h" diff --git a/lib/Decompiler/CDecompilerBeautify.cpp b/lib/Decompiler/CDecompilerBeautify.cpp index 339fa96b9..0dba2f9bd 100644 --- a/lib/Decompiler/CDecompilerBeautify.cpp +++ b/lib/Decompiler/CDecompilerBeautify.cpp @@ -13,7 +13,6 @@ #include "revng/Support/Assert.h" #include "revng/Support/Debug.h" -#include "revng-c/Decompiler/MarkForSerialization.h" #include "revng-c/RestructureCFGPass/ASTTree.h" #include "revng-c/RestructureCFGPass/ExprNode.h" #include "revng-c/RestructureCFGPass/GenerateAst.h" diff --git a/lib/Decompiler/CDecompilerBeautify.h b/lib/Decompiler/CDecompilerBeautify.h index 2d90ac5eb..00700e31a 100644 --- a/lib/Decompiler/CDecompilerBeautify.h +++ b/lib/Decompiler/CDecompilerBeautify.h @@ -4,7 +4,7 @@ // Copyright rev.ng Srls. See LICENSE.md for details. // -#include "revng-c/Decompiler/MarkForSerialization.h" +#include "revng-c/MarkForSerialization/MarkForSerializationFlags.h" #include "revng-c/RestructureCFGPass/ASTTree.h" extern unsigned ShortCircuitCounter; diff --git a/lib/Decompiler/CDecompilerPass.cpp b/lib/Decompiler/CDecompilerPass.cpp index aec281dfe..21f7034d5 100644 --- a/lib/Decompiler/CDecompilerPass.cpp +++ b/lib/Decompiler/CDecompilerPass.cpp @@ -26,7 +26,7 @@ #include "revng-c/DataLayoutAnalysis/DLALayouts.h" #include "revng-c/DataLayoutAnalysis/DLAPass.h" #include "revng-c/Decompiler/CDecompilerPass.h" -#include "revng-c/Decompiler/MarkForSerialization.h" +#include "revng-c/MarkForSerialization/MarkForSerializationPass.h" #include "revng-c/PHIASAPAssignmentInfo/PHIASAPAssignmentInfo.h" #include "revng-c/RestructureCFGPass/ASTTree.h" #include "revng-c/RestructureCFGPass/RestructureCFG.h" diff --git a/lib/Decompiler/CMakeLists.txt b/lib/Decompiler/CMakeLists.txt index b327091a0..73ad17a11 100644 --- a/lib/Decompiler/CMakeLists.txt +++ b/lib/Decompiler/CMakeLists.txt @@ -13,7 +13,6 @@ revng_add_analyses_library(Decompiler revngc FuncDeclCreationAction.cpp GlobalDeclCreationAction.cpp IRASTTypeTranslation.cpp - MarkForSerialization.cpp TypeDeclCreationAction.cpp) target_link_libraries(Decompiler @@ -27,6 +26,7 @@ target_link_libraries(Decompiler RemoveLLVMAssumeCalls RemoveLLVMDbgIntrinsics MakeEnvNull + MarkForSerialization ThreadSafeClangTooling Utils revng::revngModel diff --git a/lib/MarkForSerialization/CMakeLists.txt b/lib/MarkForSerialization/CMakeLists.txt new file mode 100644 index 000000000..8173a4e13 --- /dev/null +++ b/lib/MarkForSerialization/CMakeLists.txt @@ -0,0 +1,14 @@ +# +# Copyright rev.ng Srls. See LICENSE.md for details. +# + +revng_add_analyses_library(MarkForSerialization + revngc + MarkForSerializationPass.cpp) + +target_link_libraries(MarkForSerialization + LivenessAnalysis + RestructureCFGPass + TargetFunctionOption + revng::revngSupport + ${LLVM_LIBRARIES}) diff --git a/lib/Decompiler/MarkAnalysis.h b/lib/MarkForSerialization/MarkAnalysis.h similarity index 99% rename from lib/Decompiler/MarkAnalysis.h rename to lib/MarkForSerialization/MarkAnalysis.h index a238843b3..ba536a8e9 100644 --- a/lib/Decompiler/MarkAnalysis.h +++ b/lib/MarkForSerialization/MarkAnalysis.h @@ -11,8 +11,8 @@ #include "revng/ADT/ZipMapIterator.h" #include "revng/Support/MonotoneFramework.h" -#include "revng-c/Decompiler/MarkForSerialization.h" #include "revng-c/Liveness/LivenessAnalysis.h" +#include "revng-c/MarkForSerialization/MarkForSerializationFlags.h" namespace llvm { diff --git a/lib/Decompiler/MarkForSerialization.cpp b/lib/MarkForSerialization/MarkForSerializationPass.cpp similarity index 97% rename from lib/Decompiler/MarkForSerialization.cpp rename to lib/MarkForSerialization/MarkForSerializationPass.cpp index 0b1018834..79fd3d4e0 100644 --- a/lib/Decompiler/MarkForSerialization.cpp +++ b/lib/MarkForSerialization/MarkForSerializationPass.cpp @@ -13,9 +13,7 @@ #include "revng/Support/FunctionTags.h" #include "revng/Support/IRHelpers.h" -#include "revng-c/Decompiler/MarkForSerialization.h" -#include "revng-c/RestructureCFGPass/BasicBlockNode.h" -#include "revng-c/RestructureCFGPass/RegionCFGTree.h" +#include "revng-c/MarkForSerialization/MarkForSerializationPass.h" #include "revng-c/RestructureCFGPass/RestructureCFG.h" #include "revng-c/TargetFunctionOption/TargetFunctionOption.h" @@ -185,7 +183,6 @@ void Analysis::initialize() { } // namespace MarkAnalysis void MarkForSerializationPass::getAnalysisUsage(llvm::AnalysisUsage &AU) const { - AU.addRequired(); AU.addRequired(); AU.setPreservesAll(); } diff --git a/lib/RestructureCFGPass/CMakeLists.txt b/lib/RestructureCFGPass/CMakeLists.txt index abe91c4ae..33197189a 100644 --- a/lib/RestructureCFGPass/CMakeLists.txt +++ b/lib/RestructureCFGPass/CMakeLists.txt @@ -3,17 +3,16 @@ # revng_add_analyses_library(RestructureCFGPass - revngc - ASTNode.cpp - ASTTree.cpp - BasicBlockNode.cpp - ExprNode.cpp - MetaRegion.cpp - RegionCFGTree.cpp - RestructureCFG.cpp) + revngc + ASTNode.cpp + ASTTree.cpp + BasicBlockNode.cpp + ExprNode.cpp + MetaRegion.cpp + RegionCFGTree.cpp + RestructureCFG.cpp) target_link_libraries(RestructureCFGPass - TargetFunctionOption - revng::revngModel - revng::revngSupport - ${LLVM_LIBRARIES}) + revng::revngSupport + TargetFunctionOption + ${LLVM_LIBRARIES}) diff --git a/lib/RestructureCFGPass/RestructureCFG.cpp b/lib/RestructureCFGPass/RestructureCFG.cpp index 92b299306..8a95e2697 100644 --- a/lib/RestructureCFGPass/RestructureCFG.cpp +++ b/lib/RestructureCFGPass/RestructureCFG.cpp @@ -407,7 +407,6 @@ static cl::opt MetricsOutputPath("restructure-metrics-output-dir", void RestructureCFG::getAnalysisUsage(llvm::AnalysisUsage &AU) const { AU.setPreservesAll(); - AU.addRequired(); } inline void diff --git a/tests/Unit/MarkForSerializationTest.cpp b/tests/Unit/MarkForSerializationTest.cpp index 1f7661509..080561621 100644 --- a/tests/Unit/MarkForSerializationTest.cpp +++ b/tests/Unit/MarkForSerializationTest.cpp @@ -22,9 +22,9 @@ bool init_unit_test(); #include "revng/Support/IRHelpers.h" #include "revng/UnitTestHelpers/LLVMTestHelpers.h" -#include "revng-c/Decompiler/MarkForSerialization.h" +#include "revng-c/MarkForSerialization/MarkForSerializationPass.h" -#include "lib/Decompiler/MarkAnalysis.h" +#include "lib/MarkForSerialization/MarkAnalysis.h" struct BBSerializationFlags { std::string BBName;