diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2016-12-12 21:49:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-12 21:49:05 +0100 |
commit | 354e27c09603143cef43d666be5beaed8928c040 (patch) | |
tree | 7d85ff00a7c44c60e4797be332f4e24073eebeef | |
parent | e45bce1a64bd30c462abf51ab3b4eec69d5346aa (diff) | |
download | xamarin-forms-354e27c09603143cef43d666be5beaed8928c040.tar.gz xamarin-forms-354e27c09603143cef43d666be5beaed8928c040.tar.bz2 xamarin-forms-354e27c09603143cef43d666be5beaed8928c040.zip |
[XamlC] Optimize Stloc/Ldloc (#614)
-rw-r--r-- | Xamarin.Forms.Build.Tasks/MethodBodyExtensions.cs | 20 | ||||
-rw-r--r-- | Xamarin.Forms.Xaml.Xamlc/Xamarin.Forms.Xaml.Xamlc.csproj | 2 |
2 files changed, 21 insertions, 1 deletions
diff --git a/Xamarin.Forms.Build.Tasks/MethodBodyExtensions.cs b/Xamarin.Forms.Build.Tasks/MethodBodyExtensions.cs index f5bdc859..380cb59c 100644 --- a/Xamarin.Forms.Build.Tasks/MethodBodyExtensions.cs +++ b/Xamarin.Forms.Build.Tasks/MethodBodyExtensions.cs @@ -12,6 +12,7 @@ namespace Xamarin.Forms.Build.Tasks throw new ArgumentNullException(nameof(self)); self.OptimizeLongs(); + self.OptimizeStLdLoc(); self.OptimizeMacros(); } @@ -36,5 +37,24 @@ namespace Xamarin.Forms.Build.Tasks self.Instructions.Insert(++i, Instruction.Create(OpCodes.Conv_I8)); } } + + static void OptimizeStLdLoc(this MethodBody self) + { + var method = self.Method; + for (var i = 0; i < self.Instructions.Count; i++) { + var instruction = self.Instructions[i]; + if (instruction.OpCode.Code != Code.Stloc) + continue; + if (i + 1 >= self.Instructions.Count) + continue; + var next = self.Instructions[i + 1]; + int num = ((VariableDefinition)instruction.Operand).Index; + var vardef = instruction.Operand; + if (next.OpCode.Code != Code.Ldloc || num != ((VariableDefinition)next.Operand).Index) + continue; + ExpandMacro(instruction, OpCodes.Dup, null); + ExpandMacro(next, OpCodes.Stloc, vardef); + } + } } }
\ No newline at end of file diff --git a/Xamarin.Forms.Xaml.Xamlc/Xamarin.Forms.Xaml.Xamlc.csproj b/Xamarin.Forms.Xaml.Xamlc/Xamarin.Forms.Xaml.Xamlc.csproj index 4380fd30..4430103b 100644 --- a/Xamarin.Forms.Xaml.Xamlc/Xamarin.Forms.Xaml.Xamlc.csproj +++ b/Xamarin.Forms.Xaml.Xamlc/Xamarin.Forms.Xaml.Xamlc.csproj @@ -17,7 +17,7 @@ <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> <Externalconsole>true</Externalconsole> - <Commandlineparameters>-r "../../../Xamarin.Forms.Controls/bin/Debug/" -p "../../../Xamarin.Forms.Xaml.UnitTest/bin/Debug/;/Library/Frameworks/Mono.framework/Versions/3.12.1/lib/mono/4.5;/Library/Frameworks/Mono.framework/Versions/3.12.1/lib/mono/4.5/Facades/" --keep -v 4 ../../../Xamarin.Forms.Xaml.UnitTests/bin/Debug/Xamarin.Forms.Xaml.UnitTests.dll</Commandlineparameters> + <Commandlineparameters>-r "../../../Xamarin.Forms.Controls/bin/Debug/" -p "../../../Xamarin.Forms.Xaml.UnitTest/bin/Debug/;/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.5;/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.5/Facades/" --keep -v 4 ../../../Xamarin.Forms.Xaml.UnitTests/bin/Debug/Xamarin.Forms.Xaml.UnitTests.dll</Commandlineparameters> <AssemblyName>xamlc</AssemblyName> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup> |