-
Notifications
You must be signed in to change notification settings - Fork 4.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JIT: Allow more permissive forward subbing into call arguments #71161
JIT: Allow more permissive forward subbing into call arguments #71161
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch |
/azp run Fuzzlyn |
Azure Pipelines successfully started running 1 pipeline(s). |
The failures are #71193 and #71200. cc @dotnet/jit-contrib PTAL @AndyAyersMS |
Have you looked into some of these large percentage regressions (x64 win)?
|
Spot checking the regressions they all look like the following: @@ -7,9 +7,9 @@
; 0 inlinees with PGO data; 2 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 this [V00,T00] ( 4, 4 ) byref -> rcx this single-def
+; V00 this [V00,T00] ( 4, 4 ) byref -> [rsp+08H] this single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [rsp+00H] "OutgoingArgSpace"
-; V02 tmp1 [V02,T01] ( 2, 4 ) int -> rax "impAppendStmt"
+;* V02 tmp1 [V02 ] ( 0, 0 ) int -> zero-ref "impAppendStmt"
;
; Lcl frame size = 0
@@ -17,17 +17,21 @@ G_M4318_IG01: ; gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc
;; size=0 bbWeight=1 PerfScore 0.00
G_M4318_IG02: ; gcrefRegs=00000000 {}, byrefRegs=00000002 {rcx}, byref
; byrRegs +[rcx]
- mov eax, dword ptr [rcx]
- mov edx, dword ptr [rcx+4]
- mov ecx, eax
+ mov bword ptr [rsp+08H], rcx
+ ; GC ptr vars +{V00}
+ mov ecx, dword ptr [rcx]
; byrRegs -[rcx]
- ;; size=7 bbWeight=1 PerfScore 4.25
+ mov rdx, bword ptr [rsp+08H]
+ ; byrRegs +[rdx]
+ mov edx, dword ptr [rdx+4]
+ ; byrRegs -[rdx]
+ ;; size=15 bbWeight=1 PerfScore 6.00
G_M4318_IG03: ; , epilog, nogc, extend
tail.jmp [System.HashCode:Combine(int,int):int]
; gcr arg pop 0
;; size=6 bbWeight=1 PerfScore 2.00
-; Total bytes of code 13, prolog size 0, PerfScore 7.55, instruction count 4, allocated bytes for code 13 (MethodHash=68b0ef21) for method System.Drawing.CharacterRange:GetHashCode():int:this
+; Total bytes of code 21, prolog size 0, PerfScore 10.10, instruction count 5, allocated bytes for code 21 (MethodHash=68b0ef21) for method System.Drawing.CharacterRange:GetHashCode():int:this
; ============================================================
Unwind Info:
This is one of the cases I think we have talked about before where we could make the sort better by taking into account that placing an argument may clobber a register used by a future argument. I hope to look into that in the future. |
Is there anything else you think I should do here @AndyAyersMS? |
No, this looks good. |
After #70893 and #70931 we should be able to allow this.
Diffs