Andrea Gussoni
8125a19379
JumpTargetManager: improve rebuildDispatcher
...
Improve the way in which we connect the non reachable `JumpTargets` when
rebuilding the dispatcher for non `SemanticsPreserving` `CFGForm`s.
When connecting group of jump targets that are not currently reachable
from the entry dispatcher, we elect the jump target with the lowest
program counter value, as the one to be connected to the dispatcher.
We also mark the jump targets now transitively reachables from the
elected one, as reachable, so to avoid adding other unnecessary edges
from the dispatcher.
2024-01-18 11:06:17 +01:00
Massimo Fioravanti
c276a439b5
Add pipeline invalidation
...
Replace the stub implementation of invalidation with the proper
implementation. A ReadPathCache is added to each global so that it can
keep tracks of what target are associated to which read paths.
2024-01-02 11:14:56 +01:00
Alessandro Di Federico
0e7d3a9a71
Pass PlainMetaAddress by pointer
2023-12-12 10:20:51 +01:00
Alessandro Di Federico
d8e41028b7
RegisterClobberer -> OpaqueRegisterUser
...
Extend RegisterClobberer to support also performing opaque reads.
Also, record all the generated instructions for easy purging.
2023-12-11 16:29:13 +01:00
Giacomo Vercesi
0cb3e497a4
Fix typos
2023-11-02 16:48:33 +01:00
Alessandro Di Federico
bd1b5e4ef9
newpc: add nomerge, willreturn, nounwind
2023-10-06 17:16:04 +02:00
Alessandro Di Federico
f51af94e8f
TupleTreeReference::isValid is for assertions only
2023-08-23 16:14:05 +02:00
Alessandro Di Federico
14525d91f5
Adopt llvm::Task
2023-08-01 10:51:16 +02:00
Alessandro Di Federico
e0c7038f46
Rework RootAnalyzer::optimize pipeline
...
This commit reorganizes and explains the reasoning behind the design of
the RootAnalyzer optimization pipeline.
2023-07-26 10:16:25 +02:00
Alessandro Di Federico
a24f3479ca
JumpTargetManager::readFromPointer: fix unmapped
...
This commit introduces a fix to correctly handle trying to read from an
unmapped region.
2023-07-26 10:16:25 +02:00
Alessandro Di Federico
d4d9e5dac5
DropRangeMetadataPass: preserve all analyses
2023-07-26 10:16:25 +02:00
Ivan Krysak
7d235f4fd0
Enforce licence header consistency
...
Also do some basic cleanup: capitalize first letters, add `.`
at the end of the sentences, and so on.
2023-07-03 15:23:10 +00:00
Ivan Krysak
9f1d9fd5d0
Use Container::contains() where appropriate
2023-07-02 15:06:11 +00:00
Ivan Krysak
bc98e0079f
Formatting: change PenaltyReturnTypeOnItsOwnLine
...
The new value is 21.
2023-07-02 13:20:49 +02:00
Ivan Krysak
01b4ec36c9
Formatting: set AllowShortEnumsOnASingleLine
...
The new value is `false`.
2023-07-02 13:15:08 +02:00
Ivan Krysak
7ed14ca65c
Minor improvements
2023-07-02 11:06:55 +00:00
Alessandro Di Federico
a65ccc3413
Introduce ValueMaterializer
...
`ValueMaterializer` is a rewrite of what was called `AdvancedValueInfo`
which follows the same principles.
The main benefits over the old version is:
* We materialize the data-flow graph and the CFG of the relevant part of
root. This makes debugging significantly easier.
* We drop the old MonotoneFramework infrastructure in favor of
getMaximalFixedPoint.
* We significantly reduce the amount of queries we make to
AdvancedValueInfo.
2023-06-30 13:39:22 +02:00
Alessandro Di Federico
d0b235c1f4
JTM::findCodePointers: ignore non-aligned data
2023-05-17 11:17:41 +02:00
Giacomo Vercesi
31cd2b53f9
rcc: add codespell
...
Add codespell to the list of checks performed by
revng-check-conventions. This should reduce the amount of typos present
in the revng codebase.
2023-05-11 10:05:32 +02:00
Alessandro Di Federico
da25162d74
JumpTargetManager: drop assertNoUnreachable
...
The assertion cannot really hold under certain CFG forms.
2023-04-28 14:34:58 +02:00
Alessandro Di Federico
50f396c43d
Drop revng.csv in favor of a Tag
2023-04-28 14:04:32 +02:00
Alessandro Di Federico
82aae6fa2a
Give a name to SegmentBoundaries global
...
Unnamed globals are evil.
2023-04-28 14:04:32 +02:00
Alessandro Di Federico
170749b0aa
Introduce revng::verify
2023-04-28 14:04:31 +02:00
Djordje Todorovic
c9b2ffaf72
JumpTargetManager: improve data structures
...
This commit adopts `llvm::DenseSet`, `llvm::DenseMap` and
`std::unordered_set` where needed.
It also tweaks some `llvm::SmallVector` sizes.
It brings an additional ~3% improvement during lifting.
2023-04-27 19:22:03 +02:00
Djordje Todorovic
e43fe18021
harvestWithAVI: split up in multiple functions
2023-04-27 19:22:00 +02:00
Djordje Todorovic
3f495d2bc3
harvestWithAVI: run InstCombine only once
2023-04-27 19:16:07 +02:00
Djordje Todorovic
07cd786ec4
Preliminary harvesting: disable InstCombine
...
Saves up to ~50% of time.
2023-04-27 19:16:07 +02:00
Djordje Todorovic
0604bc4d19
harvestWithAVI: limit InstCombine iterations to 1
2023-04-27 19:16:07 +02:00
Djordje Todorovic
872f14fad4
harvestWithAVI: disable GVN
...
This commit disables GVN in order to improve lifting performance.
It also increases `EarlyCSEMssaOptCap` so we keep catching all the jump
target we used to.
Lifting /bin/bash goes from ~29mins to ~5mins
2023-04-27 19:16:07 +02:00
Djordje Todorovic
37ab350102
Minor changes
2023-04-27 19:16:07 +02:00
Alessandro Di Federico
40135aad97
Drop CSVAliasAnalysisPass
2023-04-13 18:11:48 +02:00
Alessandro Di Federico
624cf2f160
AVI: add GVN
...
We should be able to drop this soon.
2023-04-13 18:11:48 +02:00
Alessandro Di Federico
0c991af685
AVI: after function_call, jump to anypc
...
We used to jump to the dispatcher, however we only sink to an
unreachable `anypc`. We were threfore significantly complicating the CFG
in case of indirect function calls.
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
f313a72453
DropHelperCalls: pass in loaded CSVs, not pointers
...
We used to pass pointers to helper functions, but we just need to pass
the loaded value: no need to leak the pointer to the CSV.
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
6564fc0568
Minor changes
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
cdf1654f36
CSAA: do not use ptr, use pointee type
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
bc4833078c
Fix InstCombine constructor invocation
...
In LLVM 12 the `InstCombine` constructor used to take a `bool`, in LLVM
16 it takes an integer. Implicit promotion was hiding this fact.
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
e73543e430
AsmCall: add parameter attribute for element type
...
Fix calls to inline assembly
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
f7f47ceac6
VariableManager: drop autodetection of ${ARCH}CPU
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
bcd374038c
s/zextOrSelf/zext/g
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
ae871f5062
Adopt setOnlyReadsMemory
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
43fd690ea8
InaccessibleMemOnly: adopt MemoryEffects
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
e131817334
Drop usage of Type::getPointerElementType
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
7a08d51816
Drop usages of PointerType::getElementType
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
26765f3d84
Drop usages of getBasicBlockList
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
a99d54457b
Drop usages of getInstList
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
449e95021a
Replace CallBase::getNumArgOperands with arg_size
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
06f9bca598
Adopt {add,remove}FnAttribute
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
d2caa1fad0
Make CreateLoad usages opaque pointers-compatible
2023-04-08 08:42:24 +02:00
Alessandro Di Federico
dbcdad0a4d
Switch from llvm::Optional to std::optional
2023-04-08 08:42:24 +02:00