diff options
author | FICTURE7 <FICTURE7@gmail.com> | 2021-10-19 02:51:22 +0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-18 19:51:22 -0300 |
commit | fbf40424f4d3a9aecc7fe528d7503619738ce542 (patch) | |
tree | df9ba920add4d744fe527e78cc040ff4658a6d7e /ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs | |
parent | d512ce122cb1c9a7fe7cb40d3f85d642ee37f897 (diff) |
Add an early `TailMerge` pass (#2721)
* Add an early `TailMerge` pass
Some translations can have a lot of guest calls and since for each guest
call there is a call guard which may return. This can produce a lot of
epilogue code for returns. This pass merges the epilogue into a single
block.
```
Using filter 'hcq'.
Using metric 'code size'.
Total diff: -1648111 (-7.19 %) (bytes):
Base: 22913847
Diff: 21265736
Improved: 4567, regressed: 14, unchanged: 144
```
* Set PTC version
* Address feedback
* Handle `void` returning functions
* Actually handle `void` returning functions
* Fix `RegisterToLocal` logging
Diffstat (limited to 'ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs')
-rw-r--r-- | ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs b/ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs index c06ed520..9e243d37 100644 --- a/ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs +++ b/ARMeilleure/CodeGen/Optimizations/BlockPlacement.cs @@ -17,7 +17,7 @@ namespace ARMeilleure.CodeGen.Optimizations BasicBlock lastBlock = cfg.Blocks.Last; // Move cold blocks at the end of the list, so that they are emitted away from hot code. - for (block = cfg.Blocks.First; block != lastBlock; block = nextBlock) + for (block = cfg.Blocks.First; block != null; block = nextBlock) { nextBlock = block.ListNext; @@ -26,6 +26,11 @@ namespace ARMeilleure.CodeGen.Optimizations cfg.Blocks.Remove(block); cfg.Blocks.AddLast(block); } + + if (block == lastBlock) + { + break; + } } for (block = cfg.Blocks.First; block != null; block = nextBlock) |