Skip to content

Commit

Permalink
- Fix (#1214)
Browse files Browse the repository at this point in the history
  • Loading branch information
tgiphil authored Apr 7, 2024
1 parent 26c9b72 commit b56938a
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 6 deletions.
4 changes: 2 additions & 2 deletions Source/Mosa.Compiler.Framework/Compiler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -161,14 +161,14 @@ public sealed class Compiler
mosaSettings.SparseConditionalConstantPropagation && mosaSettings.SSA ? new SparseConditionalConstantPropagationStage() : null,
mosaSettings.BasicOptimizations && mosaSettings.SSA && (mosaSettings.ValueNumbering || mosaSettings.LoopInvariantCodeMotion || mosaSettings.SparseConditionalConstantPropagation) ? new OptimizationStage(false) : null,
mosaSettings.BitTracker ? new BitTrackerStage() : null,
mosaSettings.LoopRangeTracker && mosaSettings.SSA ? new LoopRangeTrackerStage() : null,
//mosaSettings.LoopRangeTracker && mosaSettings.SSA ? new LoopRangeTrackerStage() : null,
mosaSettings.BasicOptimizations ? new OptimizationStage(mosaSettings.LongExpansion) : null,

mosaSettings.TwoPassOptimization && mosaSettings.ValueNumbering && mosaSettings.SSA ? new ValueNumberingStage() : null,
mosaSettings.TwoPassOptimization && mosaSettings.LoopInvariantCodeMotion && mosaSettings.SSA ? new LoopInvariantCodeMotionStage() : null,
mosaSettings.TwoPassOptimization && mosaSettings.SparseConditionalConstantPropagation && mosaSettings.SSA ? new SparseConditionalConstantPropagationStage() : null,
mosaSettings.TwoPassOptimization && mosaSettings.BitTracker ? new BitTrackerStage() : null,
mosaSettings.TwoPassOptimization && mosaSettings.LoopRangeTracker && mosaSettings.SSA ? new LoopRangeTrackerStage() : null,
//mosaSettings.TwoPassOptimization && mosaSettings.LoopRangeTracker && mosaSettings.SSA ? new LoopRangeTrackerStage() : null,
mosaSettings.TwoPassOptimization && mosaSettings.BasicOptimizations && mosaSettings.SSA ? new OptimizationStage(mosaSettings.LongExpansion) : null,

new NopRemovalStage(),
Expand Down
19 changes: 19 additions & 0 deletions Source/Mosa.Compiler.Framework/ConditionCodeExtension.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
// Copyright (c) MOSA Project. Licensed under the New BSD License.

using System.Reflection.Metadata.Ecma335;

namespace Mosa.Compiler.Framework;

/// <summary>
Expand Down Expand Up @@ -70,6 +72,23 @@ public static ConditionCode GetOpposite(this ConditionCode conditionCode)
};
}

public static bool IsSigned(this ConditionCode conditionCode)
{
return conditionCode switch
{
ConditionCode.GreaterOrEqual => true,
ConditionCode.Greater => true,
ConditionCode.LessOrEqual => true,
ConditionCode.Less => true,
_ => false
};
}

public static bool IsUnsigned(this ConditionCode conditionCode)
{
return !conditionCode.IsSigned();
}

public static ConditionCode GetReverse(this ConditionCode conditionCode)
{
return conditionCode switch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public override bool Match(Context context, Transform transform)
if (previous.Instruction.IsMemoryRead)
return false;

if (!AreSame(context.Operand1, context.Result))
if (!AreSame(context.Operand1, context.Operand2))
return false;

if (!previous.Instruction.IsZeroFlagModified)
Expand Down
31 changes: 31 additions & 0 deletions Source/Mosa.Compiler.x86/Transforms/Tweak/Test32.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (c) MOSA Project. Licensed under the New BSD License.

using Mosa.Compiler.Framework;

namespace Mosa.Compiler.x86.Transforms.Tweak;

/// <summary>
/// Test32
/// </summary>
public sealed class Test32 : BaseTransform
{
public Test32() : base(X86.Test32, TransformType.Manual | TransformType.Transform)
{
}

public override bool Match(Context context, Transform transform)
{
if (!context.Operand1.IsConstant)
return false;

if (context.Operand1.IsPhysicalRegister)
return false;

return true;
}

public override void Transform(Context context, Transform transform)
{
transform.MoveOperand1ToVirtualRegister(context, X86.Mov32);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public static class TweakTransforms
public static readonly List<BaseTransform> List = new()
{
new Cmp32(),
new Test32(),
new Shl32(),
new Shld32(),
new Shr32(),
Expand Down
36 changes: 35 additions & 1 deletion Source/Mosa.UnitTests/Optimization/LoopStrengthReduction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,41 @@ public static int Reduction4()

for (var i = n; i > 0; i--)
{
a *= i;
a++;
}

return a;
}

[MosaUnitTest]
public static int Reduction4a()
{
var a = 8;
var n = 10;

for (var i = n; i > 0; i--)
{
a++;

if (i > 11)
return 0;
}

return a;
}

[MosaUnitTest]
public static int Reduction4b()
{
var a = 8;
var n = 10;

for (var i = n; i > 3; i--)
{
a++;

if (i < 1)
return 0;
}

return a;
Expand Down
4 changes: 2 additions & 2 deletions Source/Mosa.Utility.Configuration/CommandLineArguments.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ private static List<Argument> GetMap()
new Argument { Name = "-loop-invariant-code-motion-off", Setting = Name.Optimizations_LoopInvariantCodeMotion, Value = "false"},
new Argument { Name = "-platform-optimizations", Setting = Name.Optimizations_Platform, Value = "true"},
new Argument { Name = "-platform-optimizations-off", Setting = Name.Optimizations_Platform, Value = "false"},
new Argument { Name = "-bit-tracker", Setting = Name.Optimizations_BitTracker, Value = "true"},
new Argument { Name = "-bit-tracker-off", Setting = Name.Optimizations_BitTracker, Value = "false"},
new Argument { Name = "-bittracker", Setting = Name.Optimizations_BitTracker, Value = "true"},
new Argument { Name = "-bittracker-off", Setting = Name.Optimizations_BitTracker, Value = "false"},
new Argument { Name = "-looprange", Setting = Name.Optimizations_LoopRangeTracker, Value = "true"},
new Argument { Name = "-looprange-off", Setting = Name.Optimizations_LoopRangeTracker, Value = "false"},
new Argument { Name = "-devirtualization", Setting = Name.Optimizations_Devirtualization, Value = "true"},
new Argument { Name = "-devirtualization-off", Setting = Name.Optimizations_Devirtualization, Value = "false"},
new Argument { Name = "-inline-level", Setting = Name.Optimizations_Inline_Maximum},
Expand Down

0 comments on commit b56938a

Please sign in to comment.