summaryrefslogtreecommitdiff
path: root/Compiler/Optimizer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Compiler/Optimizer.cs')
-rw-r--r--Compiler/Optimizer.cs28
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