diff options
| author | jhorv <38920027+jhorv@users.noreply.github.com> | 2023-03-11 15:05:48 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-11 17:05:48 -0300 |
| commit | 23c844b2aa84a65e573dcc023d19b8f5294a8baf (patch) | |
| tree | bf9d41ee0f94b833bb52b6b0016ca99a991cd441 /ARMeilleure/CodeGen | |
| parent | 81691b9e3716c7f7f8b243f0f4ded1d90c526a4e (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.cs | 2 | ||||
| -rw-r--r-- | ARMeilleure/CodeGen/RegisterAllocators/LinearScanAllocator.cs | 9 |
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]; |
