diff options
Diffstat (limited to 'Compiler/Optimizer.cs')
| -rw-r--r-- | Compiler/Optimizer.cs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Compiler/Optimizer.cs b/Compiler/Optimizer.cs new file mode 100644 index 0000000..4646c1c --- /dev/null +++ b/Compiler/Optimizer.cs @@ -0,0 +1,28 @@ +namespace Q1.Compiler; + +using System.Text.RegularExpressions; + +public class Optimizer +{ + private string _instructions; + private int _currentIndex = 0; + + public Optimizer(List<string> instructions) + { + this._instructions = string.Join(Environment.NewLine, instructions); + } + + public string Optimize() + { + string output = this._instructions; + output = this.RemoveRedundantFallbackReturns(output); + + return output; + } + + private string RemoveRedundantFallbackReturns(string input) + { + string pattern = @"(mov .*, V0\n\s*ret\n)\s*mov 0, V0\n\s*ret"; + return Regex.Replace(input, pattern, "$1"); + } +}
\ No newline at end of file |
