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
Ivan Krysak
11c0d7f02e
Stop using \brief doxygen command
2023-03-15 10:19:01 +01:00
Alessandro Di Federico
09541be398
getUniqueString: do not rely on named metadata
...
`getUniqueString` returns a dedup'd char array `GlobalVariable` given a
string. We used to rely on named metadata to dedup them. However, this
lead to issues with `LLVMContainer` cloning and linking.
The new implementation uses the name of the variable as the
de-decuplication key, circumventing the problem entirely and improving
performance.
2023-03-13 22:53:44 +01:00