Closed
Description
public int Test()
{
int[] arr = new int[10];
int i = 0;
while (i < 9)
{
if (i >= 2)
{
arr[i] = 1; // <---- IG04
}
i++;
}
return 0;
}
The line arr[i] = 1
generates the following code to calculate the address of element to save the value.
...
G_M8556_IG04:
93407C22 sxtw x2, x1
D37EF442 lsl x2, x2, #2
91004042 add x2, x2, #16
52800023 mov w3, #1
B8226803 str w3, [x0, x2]
...
vs. how x64 generates:
G_M27956_IG04:
4863CA movsxd rcx, edx
C744881001000000 mov dword ptr [rax+4*rcx+16], 1
The ARM64 pattern can be optimized to use post-index addressing mode using:
# x1 contains <<base address of arr>>+16
mov w0, 1
str w0, [x1], 4
category:cq
theme:optimization
skill-level:intermediate
cost:medium
Metadata
Metadata
Assignees
Type
Projects
Status
Done