aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/CodeGen
diff options
context:
space:
mode:
authorjhorv <38920027+jhorv@users.noreply.github.com>2023-03-11 15:05:48 -0500
committerGitHub <noreply@github.com>2023-03-11 17:05:48 -0300
commit23c844b2aa84a65e573dcc023d19b8f5294a8baf (patch)
treebf9d41ee0f94b833bb52b6b0016ca99a991cd441 /ARMeilleure/CodeGen
parent81691b9e3716c7f7f8b243f0f4ded1d90c526a4e (diff)
Misc performance tweaks (#4509)
* use Array.Empty() where instead of allocating new zero-length arrays * structure for loops in a way that the JIT will elide array/Span bounds checking * avoiding function calls in for loop condition tests * avoid LINQ in a hot path * conform with code style * fix mistake in GetNextWaitingObject() * fix GetNextWaitingObject() possibility of returning null if all list items have TimePoint == long.MaxValue * make GetNextWaitingObject() behave FIFO behavior for multiple items with the same TimePoint
Diffstat (limited to 'ARMeilleure/CodeGen')
-rw-r--r--ARMeilleure/CodeGen/Arm64/CodeGenContext.cs2
-rw-r--r--ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs9
2 files changed, 3 insertions, 8 deletions
diff --git a/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs b/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs
index 1ddde0c1..cebfbde1 100644
--- a/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs
+++ b/ARMeilleure/CodeGen/Arm64/CodeGenContext.cs
@@ -265,7 +265,7 @@ namespace ARMeilleure.CodeGen.Arm64
}
else
{
- relocInfo = new RelocInfo(new RelocEntry[0]);
+ relocInfo = new RelocInfo(Array.Empty<RelocEntry>());
}
return (code, relocInfo);
diff --git a/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs b/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs
index 6ea62c28..d80157af 100644
--- a/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs
+++ b/ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs
@@ -433,16 +433,11 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
private static int GetHighestValueIndex(Span<int> span)
{
- int highest = span[0];
-
- if (highest == int.MaxValue)
- {
- return 0;
- }
+ int highest = int.MinValue;
int selected = 0;
- for (int index = 1; index < span.Length; index++)
+ for (int index = 0; index < span.Length; index++)
{
int current = span[index];