// // Copyright (c) rev.ng Srls. See LICENSE.md for details. // #include "revng/Model/LoadModelPass.h" #include "revng-c/Decompiler/DLAPass.h" #include "DLAStep.h" #include "DLATypeSystem.h" char DLAPass::ID = 0; using Register = llvm::RegisterPass; static Register X("dla", "Data Layout Analysis Pass", false, false); void DLAPass::getAnalysisUsage(llvm::AnalysisUsage &AU) const { AU.addRequired(); AU.addRequired(); AU.addRequired(); AU.setPreservesAll(); } bool DLAPass::runOnModule(llvm::Module &M) { dla::StepManager SM; // Front-end Steps, that create initial nodes and edges revng_check(SM.addStep(this)); revng_check(SM.addStep(this)); // Middle-end Steps, that manipulate nodes and edges revng_check(SM.addStep()); revng_check(SM.addStep()); revng_check(SM.addStep()); revng_check(SM.addStep()); revng_check(SM.addStep()); revng_check(SM.addStep()); revng_check(SM.addStep()); // Back-end Steps, that build Layouts from LayoutTypeSystem nodes revng_check(SM.addStep()); revng_check(SM.addStep(Layouts, ValueLayouts)); dla::LayoutTypeSystem TS(M); SM.run(TS); return true; }