/// \file CompileModule.cpp /// \brief The isolated kind is used to rappresent isolated root and functions. // // This file is distributed under the MIT License. See LICENSE.md for details. // #include #include #include "llvm/ADT/STLExtras.h" #include "revng/Model/Binary.h" #include "revng/Model/IRHelpers.h" #include "revng/Pipeline/AllRegistries.h" #include "revng/Pipeline/Context.h" #include "revng/Pipeline/PathComponent.h" #include "revng/Pipeline/Target.h" #include "revng/Pipes/FileContainer.h" #include "revng/Pipes/FunctionKind.h" #include "revng/Pipes/Kinds.h" #include "revng/Pipes/ModelGlobal.h" #include "revng/Pipes/RootKind.h" #include "revng/Pipes/TaggedFunctionKind.h" #include "revng/Support/Assert.h" #include "revng/Support/FunctionTags.h" #include "revng/Support/MetaAddress.h" using namespace pipeline; using namespace ::revng::pipes; using namespace llvm; void TaggedFunctionKind::expandTarget(const Context &Ctx, const Target &Input, TargetsList &Output) const { expandTargetImpl(Ctx, Input, Output, *this); } std::optional TaggedFunctionKind::symbolToTarget(const llvm::Function &Symbol) const { if (not Tag->isTagOf(&Symbol) or Symbol.isDeclaration()) return std::nullopt; auto Address = getMetaAddressOfIsolatedFunction(Symbol); revng_assert(Address.isValid()); return pipeline::Target({ Address.toString() }, *this); } using TaggedFK = TaggedFunctionKind; void TaggedFK::getInvalidations(const Context &Ctx, TargetsList &ToRemove, const GlobalTupleTreeDiff &Diff) const { const auto &CurrentModel = getModelFromContext(Ctx); if (not Ctx.containsReadOnlyContainer(BinaryCrossRelationsRole)) return; static constexpr auto BCRR = BinaryCrossRelationsRole; const auto &Container = Ctx.getReadOnlyContainer(BCRR); const auto *ModelDiff = Diff.getAs(); if (not ModelDiff) return; // ToRemove.push_back(Target("0x1000", *this)); }