While generating indirect call for R2R, I have noticed we generate redundant indirect address loads in x11 as well as x4 and end up using the one present in x4. In dotnet/coreclr#5020 we fixed x11 as being a register to store indirect cell address, but in dotnet/coreclr#16171 we moved to morph phase. However with that, we end up creating 2nd redundant addrp/add pair inside lower that uses x4 register.
9000000B adrp x11, [RELOC #0x20a0e212c50]
9100016B add x11, x11, #0
90000004 adrp x4, [RELOC #0x20a0e212c50]
91000084 add x4, x4, #0
F9400084 ldr x4, [x4]
D63F0080 blr x4
We need to investigate to see why x4 is needed and if yes, then simplify it to mov x4, x11.
category:cq
theme:ready-to-run
skill-level:intermediate
cost:large
While generating indirect call for R2R, I have noticed we generate redundant indirect address loads in
x11as well asx4and end up using the one present inx4. In dotnet/coreclr#5020 we fixedx11as being a register to store indirect cell address, but in dotnet/coreclr#16171 we moved to morph phase. However with that, we end up creating 2nd redundantaddrp/addpair inside lower that usesx4register.We need to investigate to see why
x4is needed and if yes, then simplify it tomov x4, x11.category:cq
theme:ready-to-run
skill-level:intermediate
cost:large