Commit Graph

2366 Commits

Author SHA1 Message Date
Pietro Fezzardi f37c933ee7 Support StoreInst in hasSideEffects
Before this commit `StoreInst` weren't supported because they weren't
expected to reach the late stages of the decompilation pipeline where
the `hasSideEffects` helper function is used.
They were expected to be replaced by custom opcodes marked with
`FunctionTags::Assign`.

With the upcoming switch to the new decompilation pipeline, this helper
needs to be able to handle `StoreInst`s, because the custom opcode
functions will be dropped in favor of regular LLVM memory accesses.
2025-01-29 15:17:15 +01:00
Alessandro Di Federico 36edf810ef Introduce support for function pointers 2025-01-28 15:20:45 +01:00
Alessandro Di Federico 2128a80cc8 Preserve metadata after Function::deleteBody
Also, introduce and adopt a simple helper class to get this right.
2025-01-28 12:19:16 +01:00
Alessandro Di Federico 2879cbfdd3 PTMLCTypeBuilder: add missing const &
This lead to copy a model data structure instead of using the original
one, which, in turn, led to missed invalidation tracking.
2025-01-28 12:19:15 +01:00
Andrea Gussoni 9af0c2962c ScopeGraph: dump .dot of the ScopeGraph
Dump the `.dot` file representing the `ScopeGraph` in the
`dumpScopeGraph` debug function.
2025-01-15 11:54:28 +01:00
Andrea Gussoni d2fa797d5e ScopeGraph: implement DOTGraphTraits
Provide the `Scope<llvm::Function *>` specialization implementation for
the `DOTGraphTraits`.
2025-01-15 11:54:28 +01:00
Andrea Gussoni db719a23be ScopeGraph: delete Scope(&&) constructor
Delete the `Scope(const GraphType &&)` constructor, in order to avoid
potential bugs due to the storage of a temporary reference in the `const
GraphType &Graph` member.
2025-01-15 11:54:28 +01:00
Andrea Gussoni 684cbf649a ScopeGraph: implement Inverse<Scope<>>
Implement the `Inverse<Scope<...>>` `GraphTraits`. This are needed in
order to support the computation of the `PostDominatorTree` on a
`ScopeGraph`.

Add some `FileCheck` tests to test the dominator and postdominator trees
on the `ScopeGraph`.
2025-01-15 11:48:28 +01:00
Pietro Fezzardi f81bbcc754 Add new EagerMaterializationRangeIterator
Introduce the `EagerMaterializationRangeIterator`, which substitutes the
`GeneratorIterator`, and is used to materialize the successors of a
node in the `ScopeGraph`.

In addition, remove the `GeneratorIterator`.
2025-01-15 11:48:28 +01:00
Lauri Vasama 4a0867e394 Add emit-c MLIR pass 2025-01-10 08:04:20 +02:00
Lauri Vasama bda55aac19 Add Clift C Backend 2025-01-10 08:04:20 +02:00
Lauri Vasama 216489b06d Fix ModelOption value name 2025-01-10 08:03:20 +02:00
Lauri Vasama 4cedc22efb Merge access ops into AccessOp with indirect flag 2025-01-02 11:25:32 +02:00
Lauri Vasama fd4033ce7e Add ClassTypeAttr for structs and unions 2025-01-02 11:25:32 +02:00
Lauri Vasama 769c357648 Merge SizedType into TypeDefinitionAttr 2025-01-02 11:25:32 +02:00
Lauri Vasama 9f6003f1f4 Add SwitchOp::getConditionType 2025-01-02 11:25:32 +02:00
Lauri Vasama 11ff4d7abd Fix relational op tablegen naming 2025-01-02 11:25:32 +02:00
Lauri Vasama fe2e70e885 Improve label and goto ops 2025-01-02 11:25:32 +02:00
Lauri Vasama 3b8e9dc3bb Loosen YieldOp verification
Yield is not return. There is no need to verify the types being yielded.
f; is a valid expression statement, even when f is a function. In this
case a function is yielded, but that is fine.
2025-01-02 11:25:32 +02:00
Lauri Vasama 4052863dcf Fix CliftAttributes.td formatting 2025-01-02 11:25:32 +02:00
Lauri Vasama e0c3f352d8 Fix CliftInterfaces.td formatting 2025-01-02 11:25:32 +02:00
Lauri Vasama 03ef33f65c Add function location reference functions 2025-01-02 11:25:32 +02:00
Lauri Vasama 9d9de10660 Refactor primitive type location references 2025-01-02 11:25:32 +02:00
Lauri Vasama 7dd3743f89 Add missing keywords and operators in CBuilder 2025-01-02 11:25:32 +02:00
Lauri Vasama 8be366b168 Move MLIR includes to mlir/CMakeLists.txt 2025-01-02 11:25:32 +02:00
Lauri Vasama 3232105320 Make clift::ModuleOp IsolatedFromAbove 2025-01-02 11:25:32 +02:00
Giacomo Vercesi 05041a302a PipelineManager: save after running analyses
Save the context after an analysis (or analyses-list) has run. This
guarantees that at least the model is preserved in case of crash.
2024-12-20 12:24:28 +01:00
Andrea Gussoni 26cf42eb12 ESE: Introduce the Enforce Single Exit pass
Introduce the Enforce Single Exit pass, whose task is to normalize a
generic `ScopeGraph`, which may have multiple exit blocks (and/or
infinite loop regions), in order to have a single `sink_block` as exit
block.

This is done by adding a new entry block, a `sink_block`, and some
`scope_closer` edges (which are visible only on the `ScopeGraph`) that
enforce the property.

This is done taking inspiration from how the internally the
`PostDominatorTree` pass construct the temporary graph on which the post
dominance information is computed on.

Some unit tests are added in order to verify that the pass works as
expected.
2024-12-18 10:51:40 +01:00
Andrea Gussoni 3dc66217a4 GraphAlgorithms: remove unused code 2024-12-18 10:51:36 +01:00
Alessandro Di Federico ade0603d3f Add docs for artifacts and analyses 2024-12-11 16:15:10 +01:00
Alessandro Di Federico d2d32b304e Model: improve documentation 2024-12-11 16:15:09 +01:00
Alessandro Di Federico 5b7703aff3 Minor changes 2024-12-11 16:15:09 +01:00
Andrea Gussoni fa69bd24e5 ScopeGraph: introduce the ScopeGraph
Introduce the `ScopeCloser` and `GotoTarget` annotations in the IR, and
the relative necessary machinery, needed to handle scope closer and goto
edges for the new backend.

A specialization of the `llvm::GraphTraits`, called `ScopeGraph`, that
is able to handle both the above mentioned annotations is provided.

For the `llvm::GraphTraits` implementation, we introduce the
`GeneratorIterator` class, which uses a coroutine to store the status of
the iteration.

A debug logger pass is added, so that we are able to test the
functionality with `FileCheck`.
2024-12-05 15:43:57 +01:00
Alessandro Di Federico cfcbd3e5f9 Introduce model::Register::canonicalArchitecture
This commit fixes the fact that mipsel had apparently no registers due
to the fact that its registers were associated to mips.
2024-12-04 09:45:37 +01:00
Alessandro Di Federico 035e8e99a2 Minor changes 2024-12-03 12:12:44 +01:00
Alessandro Di Federico 832840c307 Importers: ignore unmapped code
This commit ensures that parts of the model that must point to code
(specifically `Binary::EntryPoint`, `Binary::ExtraCodeAddresses` and
`Function::Entry`) actually point to a segment mapped as +x.
2024-11-28 15:22:10 +01:00
Alessandro Di Federico 686083bdab Remove mentions to revng-c 2024-11-21 15:54:23 +01:00
Alessandro Di Federico 143c315196 Merge revng-c into revng 2024-11-21 10:50:55 +01:00
Ivan Krysak 64446d0453 Adopt name builder across the model users 2024-11-06 19:18:53 +02:00
Ivan Krysak 672ee5df50 Replace std::string_view with llvm::StringRef 2024-11-06 15:43:13 +02:00
Ivan Krysak 8e3c9c0788 Model: remove obsolete name methods 2024-11-06 15:43:13 +02:00
Ivan Krysak a67ba96644 Adopt name builder across the model users 2024-11-06 15:43:13 +02:00
Ivan Krysak 2a5d50630b Model: adopt name builder in verification 2024-11-06 15:43:13 +02:00
Ivan Krysak 2be6f4aebb TypeSystemPrinter: adopt name builder 2024-11-06 15:43:13 +02:00
Ivan Krysak ad868f57ad Model: introduce name builder 2024-11-06 15:43:13 +02:00
Ivan Krysak c101770c72 ModelTypeTests: pass the binary to the verifier 2024-11-06 15:42:44 +02:00
Ivan Krysak 0a3628e6fe Model: introduce naming configuration 2024-11-06 15:42:44 +02:00
Ivan Krysak 1eb80ecd2d Introduce an error creation helper 2024-11-06 15:20:37 +02:00
Ivan Krysak a12f5d9e97 Minor improvements 2024-11-04 18:51:12 +02:00
Alessandro Di Federico 8cd4ee3b59 Move Kinds.h to revng 2024-11-04 15:09:56 +01:00