apmoskevitz
dc2af218e4
Focus on CS8600 (not even close to done thee is a ton of these)
9 months ago
apmoskevitz
30421e7309
added notnullwhen annotations
9 months ago
apmoskevitz
ef8e709ecc
applied fixer for drect assignment from null
9 months ago
Daniel Grunwald
5a5be026d0
Avoid reference count temporarily dropping to zero while ConditionDetection moves instructions to other blocks.
...
This avoids recursively un-registering e.g. all LdLocs from their ILVariable.LoadInstructions, etc. (all the ILInstruction.Disconnected logic). This speeds up the example from #1193 by another factor 2.
2 years ago
Siegfried Pammer
0a2037ae1f
#3075 : Avoid processing already-transformed blocks by introducing BlockTransformContext.IndexOfFirstAlreadyTransformedInstruction, which allows us to track already transformed instructions after a block has been merged into another by ConditionDetection.
2 years ago
Daniel Grunwald
6757295b3b
Fix #2379 : Keep `return` statements around in original form for ConditionDetection, only transform to fall-through block-exit at the end of the transform pipeline.
...
This fixes an issue where `return` statements within try-blocks could turn into `goto` statements.
4 years ago
dotnet format
0d9f871a4f
#2128 : Reformat the whole code base.
5 years ago
Daniel Grunwald
417a2c3391
Revert the InvertIf change; it causes too many issues for the following transforms.
5 years ago
Daniel Grunwald
e083d43fb9
Fix ReduceNestingTransform
5 years ago
Daniel Grunwald
696fdca923
Always create a block when inverting an if.
...
This keeps the ILAst more uniform and ensures extraction is possible for the code in the then statement.
5 years ago
Siegfried Pammer
e4fda5c2e4
Rename HasILRange to ILRangeIsEmpty to properly reflect its implementation.
5 years ago
Daniel Grunwald
6c0216bbb9
Fix assertion in ReduceNestingTransform: after copying the exitInst, it was possible that the old copy of the exitInst became unreachable.
6 years ago
Daniel Grunwald
ccdabf2325
Fix a bunch of XmlDoc compiler warnings.
6 years ago
Siegfried Pammer
c1fca21e8a
Make ILRange field private - introduce public API for IL range manipulation.
6 years ago
Chicken-Bones
e9b766d708
Improve persistence of IL offsets through various transforms.
7 years ago
Chicken-Bones
52a279f861
Restore HighLevelLoopTransform pattern match for loop contents within if body
7 years ago
Chicken-Bones
7017d998d0
Improve switch decompilation in loops via early detection of continue blocks.
7 years ago
Chicken-Bones
5ed5ea0e0f
Improve block ordering in ConditionDetection using the ILOffsets of Leave instruction arguments
7 years ago
Daniel Grunwald
90d866d78a
Fix #1193 : Performance issues with deeply nested block structures
7 years ago
Daniel Grunwald
bafb6d1d49
Fix #1194 : empty if statements are decompiled into goto statements
7 years ago
Daniel Grunwald
4b96f48d87
Cosmetic changes during review of PR #1176
7 years ago
Chicken-Bones
3fb7c71f8a
Improve control flow decompilation in ConditionDetection
7 years ago
Siegfried Pammer
f8b27066a1
Remove ILInstructionExtensions.cs
8 years ago
Daniel Grunwald
102729cfde
Put switch instructions into their own BlockContainer.
...
This removes the need for "goto case" in the ILAst as we can just branch to the appropriate block.
It also means we can support "break;" within switch using the "leave" instruction (otherwise we'd have to introduce yet another special kind of jump).
8 years ago
Daniel Grunwald
8a68a94d35
Simplify use of SwitchInstruction in ILAst
...
* the default case is now handled as a normal case
* when dealing with basic blocks, SwitchInstruction will be the last instruction in the block
* introduced ILAst instruction for 'goto case'
8 years ago
Siegfried Pammer
2d2ca893e9
ConditionDetection: Remove empty else-branches.
8 years ago
Daniel Grunwald
39bb6856b7
Fix various bugs with compound assignments.
8 years ago
Daniel Grunwald
919219524b
Eliminate the dedicated logic.not instruction, and treat it as syntax sugar similar to logic.and/logic.or.
...
'logic.not(arg)' is now represented using 'comp(arg == ldc.i4 0)'.
8 years ago
Daniel Grunwald
259e322e26
Fix typo in IsBranchOrLeave()
8 years ago
Daniel Grunwald
513a01e4dd
Ignore non-void leave in ConditionDetection.
...
This fixes a slight regression in control flow prettyness introduced in 206cdecf30
8 years ago
Daniel Grunwald
69c77d75a5
Try to get rid of some more gotos.
8 years ago
Daniel Grunwald
cc33c27d9c
ConditionDetection: Try to prefer 'break;' over other gotos
8 years ago
Daniel Grunwald
fe84ea9730
WIP: yield return decompiler
9 years ago
Daniel Grunwald
e871f7c05a
Convert LoopDetection into a block transform.
9 years ago
Daniel Grunwald
ed3d4aba9d
Run IntroduceExitPoints before loop detection, and let loop detection introduce its own exit points.
...
Warning: this commit creates broken branches that enter blocks.
9 years ago
Siegfried Pammer
840ec04fde
Namespace adjustments for Syntax classes
9 years ago
Christoph Wille
1ce8349dd9
Adjust namespaces
9 years ago
Daniel Grunwald
7273fe58fd
Add BlockTransform concept and apply a bunch of refactoring essentials suggestions.
9 years ago
Daniel Grunwald
dfe70d5366
Improve detection of short-circuiting operators.
9 years ago
Daniel Grunwald
dd485b971d
Eliminate goto in conditional return in try block.
9 years ago
Daniel Grunwald
5150cdce25
Improve handling of short-circuiting operators.
9 years ago
Daniel Grunwald
15b776faa2
Initial attempt at short-circuiting if conditions
9 years ago
Daniel Grunwald
0fade5cb0f
Add single-stepping support to some ILAst transforms.
9 years ago
Daniel Grunwald
11bb3060a7
Try a bit harder to find an exitInst for switch-case.
9 years ago
Daniel Grunwald
a6fc52a63f
ConditionDetection: move blocks into switch sections
9 years ago
Daniel Grunwald
0e118f0977
LoopDetection: in loops without any exit points, exclude the largest possible code block from the loop
9 years ago
Daniel Grunwald
449bbe2043
Move transforms to transforms namespace
9 years ago
Daniel Grunwald
7e50076671
Introduce array.to.pointer instruction.
...
This is necessary to construct pinned regions in all cases.
9 years ago
Daniel Grunwald
288bb928ce
Attempt to improve control flow detection
10 years ago
Daniel Grunwald
2509f27223
* Rename ControlFlowSimplification to ConditionDetection
...
* Rename OptimizingTransform to ControlFlowSimplification
* Move control flow transforms to separate namespace.
10 years ago