Skip to content
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

[X64] xtqqczze/dotnet-runtime/CurrentEraValue #475

Open
MihuBot opened this issue Jul 4, 2024 · 3 comments
Open

[X64] xtqqczze/dotnet-runtime/CurrentEraValue #475

MihuBot opened this issue Jul 4, 2024 · 3 comments

Comments

@MihuBot
Copy link
Owner

MihuBot commented Jul 4, 2024

Job completed in 14 minutes.

Diffs

Found 263 files with textual diffs.

Summary of Code Size diffs:
(Lower is better)

Total bytes of base: 41551340
Total bytes of diff: 41551403
Total bytes of delta: 63 (0.00 % of base)
Total relative delta: 0.14
    diff is a regression.
    relative diff is a regression.


Top file regressions (bytes):
          65 : System.Private.CoreLib.dasm (0.00 % of base)

Top file improvements (bytes):
          -2 : System.Security.Cryptography.dasm (-0.00 % of base)

2 total files with Code Size differences (1 improved, 1 regressed), 257 unchanged.

Top method regressions (bytes):
          20 (3.05 % of base) : System.Private.CoreLib.dasm - System.Globalization.GregorianCalendarHelper:GetYearOffset(int,int,ubyte):int:this (FullOpts)
          15 (6.41 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:GetAbbreviatedEraName(int):System.String:this (FullOpts)
          15 (7.77 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this (FullOpts)
          15 (3.18 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GregorianToLunar(int,int,int,byref,byref,byref):this (FullOpts)
          12 (5.66 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:CheckEraRange(int):this (FullOpts)
           1 (0.05 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:DoStrictParse(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,System.Globalization.DateTimeFormatInfo,byref):ubyte (FullOpts)
           1 (0.09 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:ParseISO8601(byref,byref,int,byref):ubyte (FullOpts)
           1 (0.05 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:TryParse(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo,int,byref):ubyte (FullOpts) (2 methods)
           1 (0.27 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:AddYears(System.DateTime,int):System.DateTime:this (FullOpts)
           1 (0.93 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:CheckYearMonthRange(int,int,int):int:this (FullOpts)
           1 (0.39 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetDayOfYear(System.DateTime):int:this (FullOpts)
           1 (1.64 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetLeapMonth(int,int):int:this (FullOpts)
           1 (1.52 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetMonthsInYear(int,int):int:this (FullOpts)
           1 (1.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:InternalGetDaysInMonth(int,int):int:this (FullOpts)
           1 (4.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:InternalIsLeapYear(int):ubyte:this (FullOpts)
           1 (0.30 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:IsLeapDay(int,int,int,int):ubyte:this (FullOpts)
           1 (1.32 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:IsLeapMonth(int,int,int):ubyte:this (FullOpts)
           1 (1.75 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:IsLeapYear(int,int):ubyte:this (FullOpts)

Top method improvements (bytes):
          -5 (-1.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:MaxEraCalendarYear(int):int:this (FullOpts)
          -5 (-1.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:MinEraCalendarYear(int):int:this (FullOpts)
          -3 (-0.51 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:AddMonths(System.DateTime,int):System.DateTime:this (FullOpts)
          -2 (-1.98 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:IsValidMonth(int,int,int):ubyte:this (FullOpts)
          -2 (-0.43 % of base) : System.Private.CoreLib.dasm - System.Globalization.HijriCalendar:GetDatePart(long,int):int:this (FullOpts)
          -1 (-1.00 % of base) : System.Security.Cryptography.dasm - Internal.Cryptography.Helpers:IsValidMonth(System.Globalization.Calendar,int,int,int):ubyte (FullOpts)
          -1 (-5.56 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:GetDaysInYear(int):int:this (FullOpts)
          -1 (-0.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:GetLeapMonth(int,int):int:this (FullOpts)
          -1 (-5.56 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:GetMonthsInYear(int):int:this (FullOpts)
          -1 (-5.56 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:IsLeapMonth(int,int):ubyte:this (FullOpts)
          -1 (-0.53 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetYear(System.DateTime):int:this (FullOpts)
          -1 (-0.27 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:AddYears(System.DateTime,int):System.DateTime:this (FullOpts)
          -1 (-0.42 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:CheckHebrewMonthValue(int,int,int):this (FullOpts)
          -1 (-0.49 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:IsLeapDay(int,int,int,int):ubyte:this (FullOpts)
          -1 (-0.24 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.X509Certificate:FormatDate(System.DateTime):System.String (FullOpts)

Top method regressions (percentages):
          15 (7.77 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this (FullOpts)
          15 (6.41 % of base) : System.Private.CoreLib.dasm - System.Globalization.DateTimeFormatInfo:GetAbbreviatedEraName(int):System.String:this (FullOpts)
          12 (5.66 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:CheckEraRange(int):this (FullOpts)
           1 (4.00 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:InternalIsLeapYear(int):ubyte:this (FullOpts)
          15 (3.18 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GregorianToLunar(int,int,int,byref,byref,byref):this (FullOpts)
          20 (3.05 % of base) : System.Private.CoreLib.dasm - System.Globalization.GregorianCalendarHelper:GetYearOffset(int,int,ubyte):int:this (FullOpts)
           1 (1.75 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:IsLeapYear(int,int):ubyte:this (FullOpts)
           1 (1.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:InternalGetDaysInMonth(int,int):int:this (FullOpts)
           1 (1.64 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetLeapMonth(int,int):int:this (FullOpts)
           1 (1.52 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetMonthsInYear(int,int):int:this (FullOpts)
           1 (1.32 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:IsLeapMonth(int,int,int):ubyte:this (FullOpts)
           1 (0.93 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:CheckYearMonthRange(int,int,int):int:this (FullOpts)
           1 (0.39 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetDayOfYear(System.DateTime):int:this (FullOpts)
           1 (0.30 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:IsLeapDay(int,int,int,int):ubyte:this (FullOpts)
           1 (0.27 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:AddYears(System.DateTime,int):System.DateTime:this (FullOpts)
           1 (0.09 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:ParseISO8601(byref,byref,int,byref):ubyte (FullOpts)
           1 (0.05 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:DoStrictParse(System.ReadOnlySpan`1[ushort],System.ReadOnlySpan`1[ushort],int,System.Globalization.DateTimeFormatInfo,byref):ubyte (FullOpts)
           1 (0.05 % of base) : System.Private.CoreLib.dasm - System.DateTimeParse:TryParse(System.ReadOnlySpan`1[ushort],System.Globalization.DateTimeFormatInfo,int,byref):ubyte (FullOpts) (2 methods)

Top method improvements (percentages):
          -1 (-5.56 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:GetDaysInYear(int):int:this (FullOpts)
          -1 (-5.56 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:GetMonthsInYear(int):int:this (FullOpts)
          -1 (-5.56 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:IsLeapMonth(int,int):ubyte:this (FullOpts)
          -2 (-1.98 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:IsValidMonth(int,int,int):ubyte:this (FullOpts)
          -5 (-1.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:MaxEraCalendarYear(int):int:this (FullOpts)
          -5 (-1.57 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:MinEraCalendarYear(int):int:this (FullOpts)
          -1 (-1.00 % of base) : System.Security.Cryptography.dasm - Internal.Cryptography.Helpers:IsValidMonth(System.Globalization.Calendar,int,int,int):ubyte (FullOpts)
          -1 (-0.67 % of base) : System.Private.CoreLib.dasm - System.Globalization.Calendar:GetLeapMonth(int,int):int:this (FullOpts)
          -1 (-0.53 % of base) : System.Private.CoreLib.dasm - System.Globalization.EastAsianLunisolarCalendar:GetYear(System.DateTime):int:this (FullOpts)
          -3 (-0.51 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:AddMonths(System.DateTime,int):System.DateTime:this (FullOpts)
          -1 (-0.49 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:IsLeapDay(int,int,int,int):ubyte:this (FullOpts)
          -2 (-0.43 % of base) : System.Private.CoreLib.dasm - System.Globalization.HijriCalendar:GetDatePart(long,int):int:this (FullOpts)
          -1 (-0.42 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:CheckHebrewMonthValue(int,int,int):this (FullOpts)
          -1 (-0.27 % of base) : System.Private.CoreLib.dasm - System.Globalization.HebrewCalendar:AddYears(System.DateTime,int):System.DateTime:this (FullOpts)
          -1 (-0.24 % of base) : System.Security.Cryptography.dasm - System.Security.Cryptography.X509Certificates.X509Certificate:FormatDate(System.DateTime):System.String (FullOpts)

33 total methods with Code Size differences (15 improved, 18 regressed), 252440 unchanged.

--------------------------------------------------------------------------------

Artifacts:

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 4, 2024

Top method regressions

20 (3.05 % of base) - System.Globalization.GregorianCalendarHelper:GetYearOffset(int,int,ubyte):int:this
 ; Assembly listing for method System.Globalization.GregorianCalendarHelper:GetYearOffset(int,int,ubyte):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 2 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T10] (  4,  3   )     ref  ->  r14         this class-hnd single-def <System.Globalization.GregorianCalendarHelper>
+;  V00 this         [V00,T11] (  4,  3   )     ref  ->  r14         this class-hnd single-def <System.Globalization.GregorianCalendarHelper>
 ;  V01 arg1         [V01,T07] (  6,  4.50)     int  ->  rbx         single-def
 ;  V02 arg2         [V02,T06] (  5,  7   )     int  ->  rdx        
 ;  V03 arg3         [V03,T08] (  5,  3.50)   ubyte  ->  r15         single-def
 ;  V04 loc0         [V04,T05] (  5,  9   )     ref  ->  r14         class-hnd exact single-def <System.Globalization.EraInfo[]>
 ;  V05 loc1         [V05,T14] (  2,  1   )     int  ->  r13        
 ;  V06 loc2         [V06,T04] (  8, 10   )     ref  ->  [rbp-0x30]  class-hnd exact <System.Globalization.EraInfo>
 ;  V07 loc3         [V07,T02] (  7, 12.50)     int  ->  rbx        
 ;  V08 loc4         [V08,T00] ( 12, 17.29)     int  ->  r13        
 ;# V09 OutArgs      [V09    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V10 tmp1         [V10,T17] (  3,  0   )     ref  ->  r15         class-hnd exact "Single-def Box Helper" <System.Int32>
 ;  V11 tmp2         [V11,T22] (  2,  0   )     ref  ->  r14         class-hnd exact "impImportAndPushBox" <System.String>
 ;  V12 tmp3         [V12,T18] (  3,  0   )     ref  ->  r13         class-hnd exact "Single-def Box Helper" <System.Int32>
 ;  V13 tmp4         [V13,T19] (  3,  0   )     ref  ->  rbx         class-hnd exact "NewObj constructor temp" <System.ArgumentOutOfRangeException>
 ;  V14 tmp5         [V14,T20] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
 ;  V15 tmp6         [V15,T21] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
-;  V16 tmp7         [V16,T12] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
-;  V17 tmp8         [V17,T11] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
+;  V16 tmp7         [V16,T10] (  5,  5   )     ref  ->  r13         class-hnd single-def "Inlining Arg" <System.Globalization.Calendar>
+;  V17 tmp8         [V17,T12] (  2,  1   )   ubyte  ->  rax         "Inline return value spill temp"
 ;  V18 tmp9         [V18,T23] (  2,  0   )     ref  ->  r12         "argument with side effect"
 ;  V19 tmp10        [V19,T24] (  2,  0   )     ref  ->  rdx         "argument with side effect"
 ;  V20 tmp11        [V20,T25] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
 ;  V21 tmp12        [V21,T26] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V22 tmp13        [V22,T27] (  2,  0   )     ref  ->  r15         single-def "argument with side effect"
 ;  V23 tmp14        [V23,T28] (  2,  0   )     ref  ->  rdx         single-def "argument with side effect"
 ;  V24 cse0         [V24,T16] (  3,  0.12)     int  ->  rdi         "CSE #10: conservative"
 ;  V25 cse1         [V25,T03] (  3, 11.88)     int  ->  rdi         "CSE #06: aggressive"
 ;  V26 cse2         [V26,T15] (  3,  1.50)     int  ->  rdi         "CSE #03: moderate"
 ;  V27 cse3         [V27,T09] (  5,  5.29)     int  ->  r12         "CSE #01: aggressive"
 ;  V28 cse4         [V28,T13] (  3,  1.50)   byref  ->  rsi         "CSE #02: moderate"
 ;  V29 rat0         [V29,T01] (  6, 17   )    long  ->  r13         "Widened IV V05"
 ;
 ; Lcl frame size = 8
 
 G_M29959_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        lea      rbp, [rsp+0x30]
        mov      r14, rdi
        mov      ebx, esi
        mov      r15d, ecx
 						;; size=24 bbWeight=1 PerfScore 8.25
 G_M29959_IG02:
        test     ebx, ebx
        jge      SHORT G_M29959_IG06
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M29959_IG03:
        test     r15b, r15b
-       jne      G_M29959_IG27
+       jne      G_M29959_IG28
 						;; size=9 bbWeight=0.50 PerfScore 0.62
 G_M29959_IG04:
        mov      eax, -1
 						;; size=5 bbWeight=0.50 PerfScore 0.12
 G_M29959_IG05:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M29959_IG06:
        test     edx, edx
+       jne      SHORT G_M29959_IG08
+       mov      r13, gword ptr [r14+0x08]
+       cmp      dword ptr [r13+0x08], -1
        jne      SHORT G_M29959_IG07
-       mov      rdi, gword ptr [r14+0x08]
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x10]System.Globalization.Calendar:get_CurrentEraValue():int:this
-       mov      edx, eax
-						;; size=20 bbWeight=0.50 PerfScore 5.25
+       mov      rdi, r13
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       call     [rax]System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       mov      dword ptr [r13+0x08], eax
+						;; size=34 bbWeight=0.50 PerfScore 5.88
 G_M29959_IG07:
+       mov      edx, dword ptr [r13+0x08]
+						;; size=4 bbWeight=0.50 PerfScore 1.00
+G_M29959_IG08:
        mov      r14, gword ptr [r14+0x10]
        xor      r13d, r13d
        mov      r12d, dword ptr [r14+0x08]
        test     r12d, r12d
-       jle      SHORT G_M29959_IG13
-       align    [3 bytes for IG08]
-						;; size=19 bbWeight=0.50 PerfScore 2.88
-G_M29959_IG08:
+       jle      SHORT G_M29959_IG14
+       align    [1 bytes for IG09]
+						;; size=17 bbWeight=0.50 PerfScore 2.88
+G_M29959_IG09:
        mov      rcx, gword ptr [r14+8*r13+0x10]
        cmp      edx, dword ptr [rcx+0x28]
-       jne      SHORT G_M29959_IG12
+       jne      SHORT G_M29959_IG13
 						;; size=10 bbWeight=4 PerfScore 24.00
-G_M29959_IG09:
+G_M29959_IG10:
        cmp      ebx, dword ptr [rcx+0x30]
-       jl       SHORT G_M29959_IG20
+       jl       SHORT G_M29959_IG21
        cmp      ebx, dword ptr [rcx+0x34]
-       jg       SHORT G_M29959_IG14
+       jg       SHORT G_M29959_IG15
 						;; size=10 bbWeight=0.50 PerfScore 4.00
-G_M29959_IG10:
+G_M29959_IG11:
        mov      eax, dword ptr [rcx+0x2C]
 						;; size=3 bbWeight=0.50 PerfScore 1.00
-G_M29959_IG11:
+G_M29959_IG12:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M29959_IG12:
+G_M29959_IG13:
        lea      ecx, [r13+0x01]
        mov      r13d, ecx
        cmp      r12d, r13d
-       jg       SHORT G_M29959_IG08
+       jg       SHORT G_M29959_IG09
 						;; size=12 bbWeight=4 PerfScore 8.00
-G_M29959_IG13:
-       test     r15b, r15b
-       je       SHORT G_M29959_IG04
-       jmp      G_M29959_IG25
-						;; size=10 bbWeight=0.50 PerfScore 1.62
 G_M29959_IG14:
+       test     r15b, r15b
+       je       G_M29959_IG04
+       jmp      G_M29959_IG26
+						;; size=14 bbWeight=0.50 PerfScore 1.62
+G_M29959_IG15:
        mov      rsi, 0xD1FFAB1E      ; static handle
        mov      edi, dword ptr [rsi]
        test     edi, edi
-       jge      SHORT G_M29959_IG22
+       jge      SHORT G_M29959_IG23
 						;; size=16 bbWeight=0.50 PerfScore 1.75
-G_M29959_IG15:
+G_M29959_IG16:
        mov      gword ptr [rbp-0x30], rcx
        sub      ebx, dword ptr [rcx+0x34]
        dec      r13d
-       js       SHORT G_M29959_IG18
+       js       SHORT G_M29959_IG19
 						;; size=12 bbWeight=0.50 PerfScore 2.62
-G_M29959_IG16:
+G_M29959_IG17:
        cmp      r12d, r13d
-       jle      SHORT G_M29959_IG23
-       align    [0 bytes for IG17]
+       jle      SHORT G_M29959_IG24
+       align    [0 bytes for IG18]
 						;; size=5 bbWeight=0.25 PerfScore 0.31
-G_M29959_IG17:
+G_M29959_IG18:
        mov      edi, r13d
        mov      rsi, gword ptr [r14+8*rdi+0x10]
        mov      edi, dword ptr [rsi+0x34]
        cmp      edi, ebx
        mov      rcx, gword ptr [rbp-0x30]
-       jl       SHORT G_M29959_IG19
-       jmp      SHORT G_M29959_IG10
+       jl       SHORT G_M29959_IG20
+       jmp      SHORT G_M29959_IG11
 						;; size=21 bbWeight=3.96 PerfScore 33.66
-G_M29959_IG18:
+G_M29959_IG19:
        mov      rcx, gword ptr [rbp-0x30]
-       jmp      SHORT G_M29959_IG20
+       jmp      SHORT G_M29959_IG21
 						;; size=6 bbWeight=0.25 PerfScore 0.75
-G_M29959_IG19:
+G_M29959_IG20:
        sub      ebx, edi
        dec      r13d
-       jns      SHORT G_M29959_IG21
+       jns      SHORT G_M29959_IG22
 						;; size=7 bbWeight=3.96 PerfScore 5.94
-G_M29959_IG20:
+G_M29959_IG21:
        test     r15b, r15b
-       je       SHORT G_M29959_IG13
-       jmp      G_M29959_IG26
+       je       SHORT G_M29959_IG14
+       jmp      G_M29959_IG27
 						;; size=10 bbWeight=0.50 PerfScore 1.62
-G_M29959_IG21:
+G_M29959_IG22:
        mov      gword ptr [rbp-0x30], rcx
-       jmp      SHORT G_M29959_IG17
+       jmp      SHORT G_M29959_IG18
 						;; size=6 bbWeight=1.98 PerfScore 5.94
-G_M29959_IG22:
+G_M29959_IG23:
        test     edi, edi
-       jg       SHORT G_M29959_IG20
+       jg       SHORT G_M29959_IG21
        mov      gword ptr [rbp-0x30], rcx
        mov      rdi, 0xD1FFAB1E      ; 'Switch.System.Globalization.EnforceJapaneseEraYearRanges'
        mov      rax, 0xD1FFAB1E      ; code for System.LocalAppContextSwitches:GetCachedSwitchValueInternal(System.String,byref):ubyte
        call     [rax]System.LocalAppContextSwitches:GetCachedSwitchValueInternal(System.String,byref):ubyte
        test     eax, eax
        mov      rcx, gword ptr [rbp-0x30]
-       jne      SHORT G_M29959_IG20
-       jmp      SHORT G_M29959_IG15
+       jne      SHORT G_M29959_IG21
+       jmp      SHORT G_M29959_IG16
 						;; size=40 bbWeight=0.50 PerfScore 5.00
-G_M29959_IG23:
+G_M29959_IG24:
        cmp      r13d, r12d
-       jae      G_M29959_IG28
+       jae      G_M29959_IG29
        mov      edi, r13d
        mov      rdi, gword ptr [r14+8*rdi+0x10]
        mov      edi, dword ptr [rdi+0x34]
        cmp      edi, ebx
        mov      rcx, gword ptr [rbp-0x30]
-       jge      G_M29959_IG10
+       jge      G_M29959_IG11
        sub      ebx, edi
        dec      r13d
-       js       SHORT G_M29959_IG20
+       js       SHORT G_M29959_IG21
 						;; size=39 bbWeight=0.04 PerfScore 0.37
-G_M29959_IG24:
+G_M29959_IG25:
        mov      gword ptr [rbp-0x30], rcx
-       jmp      SHORT G_M29959_IG23
+       jmp      SHORT G_M29959_IG24
 						;; size=6 bbWeight=0.02 PerfScore 0.06
-G_M29959_IG25:
+G_M29959_IG26:
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x14AFC
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r15, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        mov      rdx, rax
        mov      rsi, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=83 bbWeight=0 PerfScore 0.00
-G_M29959_IG26:
+G_M29959_IG27:
        mov      rbx, rcx
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_Range():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_Range():System.String
        mov      r14, rax
        mov      edi, dword ptr [rbx+0x30]
        mov      dword ptr [r15+0x08], edi
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      r13, rax
        mov      edi, dword ptr [rbx+0x34]
        mov      dword ptr [r13+0x08], edi
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x1407
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r12, rax
        mov      rdx, r13
        mov      rsi, r15
        mov      rdi, r14
        mov      rax, 0xD1FFAB1E      ; code for System.SR:Format(System.String,System.Object,System.Object):System.String
        call     [rax]System.SR:Format(System.String,System.Object,System.Object):System.String
        mov      rdx, rax
        mov      rsi, r12
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=160 bbWeight=0 PerfScore 0.00
-G_M29959_IG27:
+G_M29959_IG28:
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x1407
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r15, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_NeedNonNegNum():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_NeedNonNegNum():System.String
        mov      rdx, rax
        mov      rsi, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=83 bbWeight=0 PerfScore 0.00
-G_M29959_IG28:
+G_M29959_IG29:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 656, prolog size 24, PerfScore 119.28, instruction count 181, allocated bytes for code 664 (MethodHash=7b408af8) for method System.Globalization.GregorianCalendarHelper:GetYearOffset(int,int,ubyte):int:this (FullOpts)
+; Total bytes of code 676, prolog size 24, PerfScore 120.91, instruction count 184, allocated bytes for code 680 (MethodHash=7b408af8) for method System.Globalization.GregorianCalendarHelper:GetYearOffset(int,int,ubyte):int:this (FullOpts)
15 (6.41 % of base) - System.Globalization.DateTimeFormatInfo:GetAbbreviatedEraName(int):System.String:this
 ; Assembly listing for method System.Globalization.DateTimeFormatInfo:GetAbbreviatedEraName(int):System.String:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  6,  4.50)     ref  ->  r15         this class-hnd single-def <System.Globalization.DateTimeFormatInfo>
 ;  V01 arg1         [V01,T00] ( 10,  5.50)     int  ->  rbx        
 ;  V02 loc0         [V02,T03] (  3,  1.50)     ref  ->  rax         class-hnd exact single-def <System.String[]>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V04 tmp1         [V04,T05] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
 ;  V05 tmp2         [V05,T06] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
-;  V06 tmp3         [V06,T02] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
+;  V06 tmp3         [V06,T02] (  5,  5   )     ref  ->  rbx         class-hnd single-def "Inlining Arg" <System.Globalization.Calendar>
 ;  V07 tmp4         [V07,T07] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
 ;  V08 tmp5         [V08,T08] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
 ;  V09 cse0         [V09,T04] (  2,  1   )     int  ->  rdi         "CSE #01: moderate"
 ;
 ; Lcl frame size = 8
 
 G_M35548_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      r15, rdi
        mov      ebx, esi
 						;; size=17 bbWeight=1 PerfScore 6.00
 G_M35548_IG02:
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.DateTimeFormatInfo:get_AbbreviatedEraNames():System.String[]:this
        call     [rax]System.Globalization.DateTimeFormatInfo:get_AbbreviatedEraNames():System.String[]:this
        cmp      dword ptr [rax+0x08], 0
        jne      SHORT G_M35548_IG05
 						;; size=21 bbWeight=1 PerfScore 7.50
 G_M35548_IG03:
        mov      rdi, r15
        mov      esi, ebx
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this
 						;; size=15 bbWeight=0.50 PerfScore 0.38
 G_M35548_IG04:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        tail.jmp [rax]System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this
 						;; size=13 bbWeight=0.50 PerfScore 2.12
 G_M35548_IG05:
        test     ebx, ebx
+       jne      SHORT G_M35548_IG07
+       mov      rbx, gword ptr [r15+0x90]
+       cmp      dword ptr [rbx+0x08], -1
        jne      SHORT G_M35548_IG06
-       mov      rdi, gword ptr [r15+0x90]
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x10]System.Globalization.Calendar:get_CurrentEraValue():int:this
-       mov      ebx, eax
-						;; size=23 bbWeight=0.50 PerfScore 5.25
+       mov      rdi, rbx
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       call     [rax]System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       mov      dword ptr [rbx+0x08], eax
+						;; size=35 bbWeight=0.50 PerfScore 5.88
 G_M35548_IG06:
+       mov      ebx, dword ptr [rbx+0x08]
+						;; size=3 bbWeight=0.50 PerfScore 1.00
+G_M35548_IG07:
        mov      rax, gword ptr [r15+0x138]
        dec      ebx
        mov      edi, dword ptr [rax+0x08]
        cmp      edi, ebx
-       jbe      SHORT G_M35548_IG08
+       jbe      SHORT G_M35548_IG09
        mov      edi, ebx
        mov      rax, gword ptr [rax+8*rdi+0x10]
 						;; size=23 bbWeight=0.50 PerfScore 3.88
-G_M35548_IG07:
+G_M35548_IG08:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=0.50 PerfScore 1.62
-G_M35548_IG08:
+G_M35548_IG09:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        lea      edi, [rbx+0x01]
        mov      dword ptr [r15+0x08], edi
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x14AFC
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        mov      rcx, rax
        mov      rsi, r14
        mov      rdx, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=111 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 234, prolog size 12, PerfScore 26.75, instruction count 65, allocated bytes for code 234 (MethodHash=351f7523) for method System.Globalization.DateTimeFormatInfo:GetAbbreviatedEraName(int):System.String:this (FullOpts)
+; Total bytes of code 249, prolog size 12, PerfScore 28.38, instruction count 68, allocated bytes for code 249 (MethodHash=351f7523) for method System.Globalization.DateTimeFormatInfo:GetAbbreviatedEraName(int):System.String:this (FullOpts)
15 (7.77 % of base) - System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this
 ; Assembly listing for method System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
-; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
+; 0 inlinees with PGO data; 1 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  4,  3.50)     ref  ->  r15         this class-hnd single-def <System.Globalization.DateTimeFormatInfo>
 ;  V01 arg1         [V01,T00] (  9,  7.50)     int  ->  rbx        
-;  V02 loc0         [V02,T02] (  3,  3   )     ref  ->  rax         class-hnd exact single-def <System.String[]>
+;  V02 loc0         [V02,T03] (  3,  3   )     ref  ->  rax         class-hnd exact single-def <System.String[]>
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V04 tmp1         [V04,T05] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
 ;  V05 tmp2         [V05,T06] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
-;  V06 tmp3         [V06,T03] (  3,  3   )     ref  ->  rdi         single-def "argument with side effect"
+;  V06 tmp3         [V06,T02] (  5,  5   )     ref  ->  rbx         class-hnd single-def "Inlining Arg" <System.Globalization.Calendar>
 ;  V07 tmp4         [V07,T07] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
 ;  V08 tmp5         [V08,T08] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
 ;  V09 cse0         [V09,T04] (  2,  2   )     int  ->  rdi         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M27329_IG01:
        push     rbp
        push     r15
        push     r14
        push     rbx
        push     rax
        lea      rbp, [rsp+0x20]
        mov      r15, rdi
        mov      ebx, esi
 						;; size=17 bbWeight=1 PerfScore 6.00
 G_M27329_IG02:
        test     ebx, ebx
-       jne      SHORT G_M27329_IG04
+       jne      SHORT G_M27329_IG05
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M27329_IG03:
-       mov      rdi, gword ptr [r15+0x90]
-       mov      rax, qword ptr [rdi]
-       mov      rax, qword ptr [rax+0x48]
-       call     [rax+0x10]System.Globalization.Calendar:get_CurrentEraValue():int:this
-       mov      ebx, eax
-						;; size=19 bbWeight=0.50 PerfScore 4.62
+       mov      rbx, gword ptr [r15+0x90]
+       cmp      dword ptr [rbx+0x08], -1
+       jne      SHORT G_M27329_IG04
+       mov      rdi, rbx
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       call     [rax]System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       mov      dword ptr [rbx+0x08], eax
+						;; size=31 bbWeight=0.50 PerfScore 5.25
 G_M27329_IG04:
+       mov      ebx, dword ptr [rbx+0x08]
+						;; size=3 bbWeight=0.50 PerfScore 1.00
+G_M27329_IG05:
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.DateTimeFormatInfo:get_EraNames():System.String[]:this
        call     [rax]System.Globalization.DateTimeFormatInfo:get_EraNames():System.String[]:this
        dec      ebx
        mov      edi, dword ptr [rax+0x08]
        cmp      edi, ebx
-       jbe      SHORT G_M27329_IG06
+       jbe      SHORT G_M27329_IG07
        mov      edi, ebx
        mov      rax, gword ptr [rax+8*rdi+0x10]
 						;; size=31 bbWeight=1 PerfScore 9.25
-G_M27329_IG05:
+G_M27329_IG06:
        add      rsp, 8
        pop      rbx
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=11 bbWeight=1 PerfScore 3.25
-G_M27329_IG06:
+G_M27329_IG07:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        lea      edi, [rbx+0x01]
        mov      dword ptr [r15+0x08], edi
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, 0x14AFC
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        mov      rcx, rax
        mov      rsi, r14
        mov      rdx, r15
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=111 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 193, prolog size 12, PerfScore 24.38, instruction count 53, allocated bytes for code 193 (MethodHash=0b4d953e) for method System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this (FullOpts)
+; Total bytes of code 208, prolog size 12, PerfScore 26.00, instruction count 56, allocated bytes for code 208 (MethodHash=0b4d953e) for method System.Globalization.DateTimeFormatInfo:GetEraName(int):System.String:this (FullOpts)
15 (3.18 % of base) - System.Globalization.EastAsianLunisolarCalendar:GregorianToLunar(int,int,int,byref,byref,byref):this
 ; Assembly listing for method System.Globalization.EastAsianLunisolarCalendar:GregorianToLunar(int,int,int,byref,byref,byref):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 3 single block inlinees; 0 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T05] (  9,  7   )     ref  ->  r14         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
+;  V00 this         [V00,T05] ( 11,  8   )     ref  ->  r14         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
 ;  V01 arg1         [V01,T08] (  4,  4   )     int  ->  r12         single-def
 ;  V02 arg2         [V02,T07] (  5,  4   )     int  ->  r13         single-def
 ;  V03 arg3         [V03,T10] (  4,  3.50)     int  ->  [rbp-0x2C]  single-def
 ;  V04 arg4         [V04,T04] ( 15, 10   )   byref  ->  r15         single-def
 ;  V05 arg5         [V05,T02] (  5, 11   )   byref  ->  rbx         single-def
 ;  V06 arg6         [V06,T23] (  1,  1   )   byref  ->  [rbp+0x10]  single-def
 ;  V07 loc0         [V07,T12] (  5,  3   )     int  ->  [rbp-0x30] 
 ;  V08 loc1         [V08,T15] (  4,  2.50)     int  ->  rax        
 ;  V09 loc2         [V09,T00] ( 14, 21   )     int  ->  [rbp-0x34] 
 ;  V10 loc3         [V10,T03] (  4, 13   )     int  ->  [rbp-0x38] 
 ;  V11 loc4         [V11,T09] (  3,  6   )     int  ->  rax        
 ;  V12 loc5         [V12,T01] (  5, 14   )     int  ->  rcx        
 ;* V13 loc6         [V13    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[int]>
 ;# V14 OutArgs      [V14    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V15 tmp1         [V15    ] (  0,  0   )     int  ->  zero-ref   
 ;* V16 tmp2         [V16    ] (  0,  0   )     int  ->  zero-ref    "non-inline candidate call"
 ;* V17 tmp3         [V17    ] (  0,  0   )     int  ->  zero-ref   
 ;* V18 tmp4         [V18    ] (  0,  0   )     int  ->  zero-ref   
 ;  V19 tmp5         [V19,T20] (  2,  1   )     int  ->  rsi        
 ;  V20 tmp6         [V20,T17] (  2,  2   )     int  ->  rcx        
 ;  V21 tmp7         [V21,T06] (  3,  8   )     int  ->  rcx        
 ;* V22 tmp8         [V22    ] (  0,  0   )     int  ->  zero-ref   
 ;* V23 tmp9         [V23    ] (  0,  0   )     int  ->  zero-ref   
 ;  V24 tmp10        [V24,T21] (  2,  1   )     int  ->  rsi        
 ;* V25 tmp11        [V25    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]>
 ;* V26 tmp12        [V26    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]>
 ;* V27 tmp13        [V27    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]>
 ;  V28 tmp14        [V28,T16] (  3,  2   )   byref  ->  rdi         "field V13._reference (fldOffset=0x0)" P-INDEP
 ;* V29 tmp15        [V29,T22] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
 ;  V30 tmp16        [V30,T18] (  2,  1   )   byref  ->  rdi         single-def "field V25._reference (fldOffset=0x0)" P-INDEP
 ;* V31 tmp17        [V31,T24] (  0,  0   )     int  ->  zero-ref    "field V25._length (fldOffset=0x8)" P-INDEP
 ;  V32 tmp18        [V32,T19] (  2,  1   )   byref  ->  rdi         single-def "field V26._reference (fldOffset=0x0)" P-INDEP
 ;* V33 tmp19        [V33,T25] (  0,  0   )     int  ->  zero-ref    "field V26._length (fldOffset=0x8)" P-INDEP
 ;* V34 tmp20        [V34    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V27._reference (fldOffset=0x0)" P-INDEP
 ;* V35 tmp21        [V35    ] (  0,  0   )     int  ->  zero-ref    "field V27._length (fldOffset=0x8)" P-INDEP
-;  V36 cse0         [V36,T11] (  7,  5   )    long  ->  [rbp-0x40]  spill-single-def "CSE #04: moderate"
+;  V36 cse0         [V36,T11] (  7,  4   )    long  ->  [rbp-0x40]  multi-def "CSE #04: moderate"
 ;  V37 cse1         [V37,T13] (  3,  3   )     int  ->  rax         "CSE #01: moderate"
 ;  V38 cse2         [V38,T14] (  3,  3   )     int  ->  rcx         "CSE #05: moderate"
 ;
 ; Lcl frame size = 24
 
 G_M4131_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        lea      rbp, [rsp+0x40]
        mov      dword ptr [rbp-0x2C], ecx
        mov      r14, rdi
        mov      r12d, esi
        mov      r13d, edx
        mov      r15, r8
        mov      rbx, r9
 						;; size=37 bbWeight=1 PerfScore 9.00
 G_M4131_IG02:
        mov      edi, r12d
        mov      rcx, 0xD1FFAB1E      ; code for System.Globalization.EastAsianLunisolarCalendar:GregorianIsLeapYear(int):ubyte
        call     [rcx]System.Globalization.EastAsianLunisolarCalendar:GregorianIsLeapYear(int):ubyte
        test     eax, eax
        jne      SHORT G_M4131_IG04
 						;; size=19 bbWeight=1 PerfScore 4.75
 G_M4131_IG03:
        mov      rdi, 0xD1FFAB1E      ; static handle
        jmp      SHORT G_M4131_IG05
        align    [0 bytes for IG11]
 						;; size=12 bbWeight=0.50 PerfScore 1.12
 G_M4131_IG04:
        mov      rdi, 0xD1FFAB1E      ; static handle
 						;; size=10 bbWeight=0.50 PerfScore 0.12
 G_M4131_IG05:
        lea      eax, [r13-0x01]
        cmp      eax, 12
        jae      G_M4131_IG17
        mov      ecx, dword ptr [rbp-0x2C]
        mov      edx, ecx
        add      edx, dword ptr [rdi+4*rax]
        mov      dword ptr [rbp-0x34], edx
        mov      dword ptr [r15], r12d
        mov      r12d, dword ptr [r15]
        mov      rdi, r14
        mov      rdx, qword ptr [r14]
        mov      rdx, qword ptr [rdx+0x78]
-       mov      qword ptr [rbp-0x40], rdx
-       call     [rdx+0x20]System.Globalization.EastAsianLunisolarCalendar:get_MaxCalendarYear():int:this
+       call     [rdx+0x18]System.Globalization.EastAsianLunisolarCalendar:get_MaxCalendarYear():int:this
        inc      eax
        cmp      r12d, eax
        jne      SHORT G_M4131_IG07
-						;; size=54 bbWeight=1 PerfScore 19.75
+						;; size=50 bbWeight=1 PerfScore 18.75
 G_M4131_IG06:
        dec      dword ptr [r15]
        mov      edi, dword ptr [r15]
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.EastAsianLunisolarCalendar:GregorianIsLeapYear(int):ubyte
        call     [rax]System.Globalization.EastAsianLunisolarCalendar:GregorianIsLeapYear(int):ubyte
        mov      esi, 366
        mov      edi, 365
        test     eax, eax
        cmove    esi, edi
        mov      r12d, dword ptr [rbp-0x34]
        add      r12d, esi
        jmp      SHORT G_M4131_IG09
 						;; size=42 bbWeight=0.50 PerfScore 6.25
 G_M4131_IG07:
        mov      esi, dword ptr [r15]
        mov      rdi, r14
        mov      edx, 1
-       mov      rax, qword ptr [rbp-0x40]
-       call     [rax]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
+       mov      rax, qword ptr [r14]
+       mov      rax, qword ptr [rax+0x70]
+       mov      qword ptr [rbp-0x40], rax
+       call     [rax+0x38]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
        mov      dword ptr [rbp-0x30], eax
        mov      esi, dword ptr [r15]
        mov      rdi, r14
        mov      edx, 2
        mov      rcx, qword ptr [rbp-0x40]
-       call     [rcx]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
+       call     [rcx+0x38]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
        mov      ecx, dword ptr [rbp-0x30]
        cmp      r13d, ecx
        jl       SHORT G_M4131_IG08
        jne      SHORT G_M4131_IG10
        mov      r13d, dword ptr [rbp-0x2C]
        cmp      r13d, eax
        jge      SHORT G_M4131_IG10
-						;; size=56 bbWeight=0.50 PerfScore 9.75
+						;; size=65 bbWeight=0.50 PerfScore 11.75
 G_M4131_IG08:
        dec      dword ptr [r15]
        mov      edi, dword ptr [r15]
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.EastAsianLunisolarCalendar:GregorianIsLeapYear(int):ubyte
        call     [rax]System.Globalization.EastAsianLunisolarCalendar:GregorianIsLeapYear(int):ubyte
        mov      esi, 366
        mov      edi, 365
        test     eax, eax
        cmove    esi, edi
        mov      r12d, dword ptr [rbp-0x34]
        add      r12d, esi
 						;; size=40 bbWeight=0.50 PerfScore 5.25
 G_M4131_IG09:
        mov      esi, dword ptr [r15]
        mov      rdi, r14
        mov      edx, 1
-       mov      r13, qword ptr [rbp-0x40]
-       call     [r13]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
+       mov      rax, qword ptr [r14]
+       mov      rcx, qword ptr [rax+0x70]
+       mov      r13, rcx
+       call     [r13+0x38]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
        mov      dword ptr [rbp-0x30], eax
        mov      esi, dword ptr [r15]
        mov      rdi, r14
        mov      edx, 2
-       call     [r13]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
+       call     [r13+0x38]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
        mov      dword ptr [rbp-0x34], r12d
+       mov      qword ptr [rbp-0x40], r13
        mov      ecx, dword ptr [rbp-0x30]
-						;; size=44 bbWeight=0.50 PerfScore 7.50
+						;; size=54 bbWeight=0.50 PerfScore 9.62
 G_M4131_IG10:
        dec      ecx
        cmp      ecx, 12
        jae      G_M4131_IG17
        mov      esi, ecx
        mov      rdi, 0xD1FFAB1E      ; static handle
        mov      r12d, dword ptr [rbp-0x34]
        sub      r12d, dword ptr [rdi+4*rsi]
        dec      eax
        sub      r12d, eax
        mov      dword ptr [rbp-0x38], 0x8000
        mov      esi, dword ptr [r15]
        mov      rdi, r14
        mov      edx, 3
        mov      r13, qword ptr [rbp-0x40]
-       call     [r13]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
+       call     [r13+0x38]System.Globalization.EastAsianLunisolarCalendar:GetYearInfo(int,int):int:this
        mov      ecx, 30
        mov      edx, 29
        test     eax, 0x8000
        cmove    ecx, edx
        mov      dword ptr [rbx], 1
        cmp      r12d, ecx
        jle      SHORT G_M4131_IG15
 						;; size=91 bbWeight=1 PerfScore 17.25
 G_M4131_IG11:
        sub      r12d, ecx
        inc      dword ptr [rbx]
        mov      r15d, dword ptr [rbp-0x38]
        sar      r15d, 1
        test     eax, r15d
        jne      SHORT G_M4131_IG13
 						;; size=17 bbWeight=4 PerfScore 24.00
 G_M4131_IG12:
        mov      ecx, 29
        jmp      SHORT G_M4131_IG14
 						;; size=7 bbWeight=2 PerfScore 4.50
 G_M4131_IG13:
        mov      ecx, 30
 						;; size=5 bbWeight=2 PerfScore 0.50
 G_M4131_IG14:
        cmp      r12d, ecx
        mov      dword ptr [rbp-0x38], r15d
        jg       SHORT G_M4131_IG11
 						;; size=9 bbWeight=4 PerfScore 9.00
 G_M4131_IG15:
        mov      rbx, bword ptr [rbp+0x10]
        mov      dword ptr [rbx], r12d
 						;; size=7 bbWeight=1 PerfScore 2.00
 G_M4131_IG16:
        add      rsp, 24
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M4131_IG17:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 471, prolog size 37, PerfScore 125.00, instruction count 137, allocated bytes for code 471 (MethodHash=2499efdc) for method System.Globalization.EastAsianLunisolarCalendar:GregorianToLunar(int,int,int,byref,byref,byref):this (FullOpts)
+; Total bytes of code 486, prolog size 37, PerfScore 128.12, instruction count 141, allocated bytes for code 486 (MethodHash=2499efdc) for method System.Globalization.EastAsianLunisolarCalendar:GregorianToLunar(int,int,int,byref,byref,byref):this (FullOpts)
12 (5.66 % of base) - System.Globalization.EastAsianLunisolarCalendar:CheckEraRange(int):this
 ; Assembly listing for method System.Globalization.EastAsianLunisolarCalendar:CheckEraRange(int):this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T00] (  9,  8   )     ref  ->  rbx         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
+;  V00 this         [V00,T00] ( 11,  9   )     ref  ->  rbx         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
 ;  V01 arg1         [V01,T01] (  7,  5.50)     int  ->  r15        
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V03 tmp1         [V03    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret "spilled call-like call argument" <System.DateTime>
 ;  V04 tmp2         [V04,T07] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
 ;  V05 tmp3         [V05,T08] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
 ;* V06 tmp4         [V06    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret "spilled call-like call argument" <System.DateTime>
 ;  V07 tmp5         [V07,T05] (  2,  2   )    long  ->  rsi         "field V03._dateData (fldOffset=0x0)" P-INDEP
 ;  V08 tmp6         [V08,T06] (  2,  2   )    long  ->  rsi         "field V06._dateData (fldOffset=0x0)" P-INDEP
 ;  V09 tmp7         [V09,T09] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
 ;  V10 tmp8         [V10,T10] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
-;  V11 cse0         [V11,T03] (  3,  3   )    long  ->  r13         "CSE #02: aggressive"
-;  V12 cse1         [V12,T04] (  3,  3   )    long  ->  r14         "CSE #03: aggressive"
-;  V13 cse2         [V13,T02] (  5,  4   )    long  ->  r14         multi-def "CSE #01: aggressive"
+;  V11 cse0         [V11,T02] (  3,  3   )    long  ->  r13         "CSE #02: aggressive"
+;  V12 cse1         [V12,T03] (  3,  3   )    long  ->  r14         "CSE #03: aggressive"
+;  V13 cse2         [V13,T04] (  3,  3   )    long  ->  r14         "CSE #01: aggressive"
 ;
 ; Lcl frame size = 0
 
 G_M54329_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15d, esi
 						;; size=19 bbWeight=1 PerfScore 6.00
 G_M54329_IG02:
        test     r15d, r15d
-       jne      SHORT G_M54329_IG04
+       jne      SHORT G_M54329_IG05
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M54329_IG03:
+       cmp      dword ptr [rbx+0x08], -1
+       jne      SHORT G_M54329_IG04
        mov      rdi, rbx
-       mov      r14, qword ptr [rbx]
-       mov      rax, qword ptr [r14+0x48]
-       call     [rax+0x10]System.Globalization.Calendar:get_CurrentEraValue():int:this
-       mov      r15d, eax
-						;; size=16 bbWeight=0.50 PerfScore 3.75
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       call     [rax]System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       mov      dword ptr [rbx+0x08], eax
+						;; size=24 bbWeight=0.50 PerfScore 4.25
 G_M54329_IG04:
+       mov      r15d, dword ptr [rbx+0x08]
+						;; size=4 bbWeight=0.50 PerfScore 1.00
+G_M54329_IG05:
        mov      rdi, rbx
        mov      r14, qword ptr [rbx]
        mov      r13, qword ptr [r14+0x78]
-       call     [r13+0x30]System.Globalization.EastAsianLunisolarCalendar:get_MinDate():System.DateTime:this
+       call     [r13+0x28]System.Globalization.EastAsianLunisolarCalendar:get_MinDate():System.DateTime:this
        mov      rsi, rax
        mov      rdi, rbx
        mov      r14, qword ptr [r14+0x58]
-       call     [r14+0x10]System.Globalization.Calendar:GetEra(System.DateTime):int:this
+       call     [r14+0x08]System.Globalization.Calendar:GetEra(System.DateTime):int:this
        cmp      eax, r15d
-       jg       SHORT G_M54329_IG06
+       jg       SHORT G_M54329_IG07
        mov      rdi, rbx
-       call     [r13+0x38]System.Globalization.EastAsianLunisolarCalendar:get_MaxDate():System.DateTime:this
+       call     [r13+0x30]System.Globalization.EastAsianLunisolarCalendar:get_MaxDate():System.DateTime:this
        mov      rsi, rax
        mov      rdi, rbx
-       call     [r14+0x10]System.Globalization.Calendar:GetEra(System.DateTime):int:this
+       call     [r14+0x08]System.Globalization.Calendar:GetEra(System.DateTime):int:this
        cmp      eax, r15d
-       jl       SHORT G_M54329_IG06
+       jl       SHORT G_M54329_IG07
 						;; size=55 bbWeight=1 PerfScore 22.00
-G_M54329_IG05:
+G_M54329_IG06:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=1 PerfScore 3.50
-G_M54329_IG06:
+G_M54329_IG07:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      dword ptr [rbx+0x08], r15d
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      edi, 0x14AFC
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        mov      rcx, rax
        mov      rsi, r14
        mov      rdx, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=108 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 212, prolog size 13, PerfScore 36.50, instruction count 60, allocated bytes for code 212 (MethodHash=49422bc6) for method System.Globalization.EastAsianLunisolarCalendar:CheckEraRange(int):this (FullOpts)
+; Total bytes of code 224, prolog size 13, PerfScore 38.00, instruction count 62, allocated bytes for code 224 (MethodHash=49422bc6) for method System.Globalization.EastAsianLunisolarCalendar:CheckEraRange(int):this (FullOpts)

Larger list of diffs: https://gist.github.com/MihuBot/409c5832cba6c3090e35eaa62df170a6

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 4, 2024

Top method improvements

-5 (-1.57 % of base) - System.Globalization.EastAsianLunisolarCalendar:MaxEraCalendarYear(int):int:this
 ; Assembly listing for method System.Globalization.EastAsianLunisolarCalendar:MaxEraCalendarYear(int):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T01] ( 11,  7.50)     ref  ->  rbx         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
+;  V00 this         [V00,T01] ( 15,  9.50)     ref  ->  rbx         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
 ;  V01 arg1         [V01,T02] (  7,  7.50)     int  ->  r15        
-;  V02 loc0         [V02,T03] (  5,  7   )     ref  ->  r12         class-hnd exact single-def <System.Globalization.EraInfo[]>
-;  V03 loc1         [V03,T08] (  2,  1   )     int  ->  rdi        
+;  V02 loc0         [V02,T03] (  5,  7   )     ref  ->  r13         class-hnd exact single-def <System.Globalization.EraInfo[]>
+;  V03 loc1         [V03,T07] (  2,  1   )     int  ->  rdi        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V05 tmp1         [V05    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret "spilled call-like call argument" <System.DateTime>
-;  V06 tmp2         [V06,T11] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
-;  V07 tmp3         [V07,T12] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
-;  V08 tmp4         [V08,T07] (  2,  2   )     int  ->  r12         "non-inline candidate call"
+;  V06 tmp2         [V06,T10] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
+;  V07 tmp3         [V07,T11] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
+;  V08 tmp4         [V08,T06] (  2,  2   )     int  ->  r13         "non-inline candidate call"
 ;* V09 tmp5         [V09    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret "spilled call-like call argument" <System.DateTime>
-;  V10 tmp6         [V10,T09] (  2,  1   )    long  ->  rsi         "field V05._dateData (fldOffset=0x0)" P-INDEP
-;  V11 tmp7         [V11,T10] (  2,  1   )    long  ->  rdx         "field V09._dateData (fldOffset=0x0)" P-INDEP
-;  V12 tmp8         [V12,T13] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
-;  V13 tmp9         [V13,T14] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
-;  V14 cse0         [V14,T05] (  7,  4.50)    long  ->  r13         "CSE #02: aggressive"
+;  V10 tmp6         [V10,T08] (  2,  1   )    long  ->  rsi         "field V05._dateData (fldOffset=0x0)" P-INDEP
+;  V11 tmp7         [V11,T09] (  2,  1   )    long  ->  rdx         "field V09._dateData (fldOffset=0x0)" P-INDEP
+;  V12 tmp8         [V12,T12] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
+;  V13 tmp9         [V13,T13] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
+;  V14 cse0         [V14,T05] (  7,  4.50)    long  ->  r14         "CSE #02: aggressive"
 ;  V15 cse1         [V15,T04] (  3,  5   )     int  ->  rcx         "CSE #03: aggressive"
-;  V16 cse2         [V16,T06] (  4,  3   )    long  ->  r14         "CSE #01: aggressive"
-;  V17 rat0         [V17,T00] (  6, 17   )    long  ->  rdi         "Widened IV V03"
+;  V16 rat0         [V16,T00] (  6, 17   )    long  ->  rdi         "Widened IV V03"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 0
 
 G_M1184_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
-       push     r12
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x30]
+       lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15d, esi
-						;; size=22 bbWeight=1 PerfScore 8.00
+						;; size=19 bbWeight=1 PerfScore 6.00
 G_M1184_IG02:
        mov      rdi, rbx
-       mov      r14, qword ptr [rbx]
-       mov      r13, qword ptr [r14+0x78]
-       call     [r13+0x28]System.Globalization.EastAsianLunisolarCalendar:get_CalEraInfo():System.Globalization.EraInfo[]:this
-       mov      r12, rax
-       test     r12, r12
+       mov      rax, qword ptr [rbx]
+       mov      r14, qword ptr [rax+0x78]
+       call     [r14+0x20]System.Globalization.EastAsianLunisolarCalendar:get_CalEraInfo():System.Globalization.EraInfo[]:this
+       mov      r13, rax
+       test     r13, r13
        jne      SHORT G_M1184_IG05
 						;; size=22 bbWeight=1 PerfScore 8.75
 G_M1184_IG03:
        mov      rdi, rbx
-       mov      rax, r13
+       mov      rax, r14
 						;; size=6 bbWeight=0.50 PerfScore 0.25
 G_M1184_IG04:
-       add      rsp, 8
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
-       tail.jmp [rax+0x20]System.Globalization.EastAsianLunisolarCalendar:get_MaxCalendarYear():int:this
-						;; size=18 bbWeight=0.50 PerfScore 2.62
+       tail.jmp [rax+0x18]System.Globalization.EastAsianLunisolarCalendar:get_MaxCalendarYear():int:this
+						;; size=12 bbWeight=0.50 PerfScore 2.25
 G_M1184_IG05:
        test     r15d, r15d
+       jne      SHORT G_M1184_IG07
+       cmp      dword ptr [rbx+0x08], -1
        jne      SHORT G_M1184_IG06
        mov      rdi, rbx
-       mov      rax, qword ptr [r14+0x48]
-       call     [rax+0x10]System.Globalization.Calendar:get_CurrentEraValue():int:this
-       mov      r15d, eax
-						;; size=18 bbWeight=0.50 PerfScore 3.38
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       call     [rax]System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       mov      dword ptr [rbx+0x08], eax
+						;; size=29 bbWeight=0.50 PerfScore 4.88
 G_M1184_IG06:
+       mov      r15d, dword ptr [rbx+0x08]
+						;; size=4 bbWeight=0.50 PerfScore 1.00
+G_M1184_IG07:
        mov      rdi, rbx
-       call     [r13+0x38]System.Globalization.EastAsianLunisolarCalendar:get_MaxDate():System.DateTime:this
+       call     [r14+0x30]System.Globalization.EastAsianLunisolarCalendar:get_MaxDate():System.DateTime:this
        mov      rsi, rax
        mov      rdi, rbx
-       mov      rax, qword ptr [r14+0x58]
-       call     [rax+0x10]System.Globalization.Calendar:GetEra(System.DateTime):int:this
+       mov      rax, qword ptr [rbx]
+       mov      rax, qword ptr [rax+0x58]
+       call     [rax+0x08]System.Globalization.Calendar:GetEra(System.DateTime):int:this
        cmp      eax, r15d
-       jne      SHORT G_M1184_IG08
+       jne      SHORT G_M1184_IG09
        mov      rdi, rbx
-       call     [r13+0x20]System.Globalization.EastAsianLunisolarCalendar:get_MaxCalendarYear():int:this
-       mov      r12d, eax
+       call     [r14+0x18]System.Globalization.EastAsianLunisolarCalendar:get_MaxCalendarYear():int:this
+       mov      r13d, eax
        mov      rdi, rbx
-       call     [r13+0x38]System.Globalization.EastAsianLunisolarCalendar:get_MaxDate():System.DateTime:this
+       call     [r14+0x30]System.Globalization.EastAsianLunisolarCalendar:get_MaxDate():System.DateTime:this
        mov      rdx, rax
        mov      rdi, rbx
-       mov      esi, r12d
-       mov      rax, r13
-						;; size=54 bbWeight=0.50 PerfScore 8.88
-G_M1184_IG07:
-       add      rsp, 8
+       mov      esi, r13d
+       mov      rax, r14
+						;; size=57 bbWeight=0.50 PerfScore 9.88
+G_M1184_IG08:
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
-       tail.jmp [rax+0x08]System.Globalization.EastAsianLunisolarCalendar:GetYear(int,System.DateTime):int:this
-						;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M1184_IG08:
+       tail.jmp [rax]System.Globalization.EastAsianLunisolarCalendar:GetYear(int,System.DateTime):int:this
+						;; size=11 bbWeight=0.50 PerfScore 2.25
+G_M1184_IG09:
        xor      edi, edi
-       mov      ecx, dword ptr [r12+0x08]
+       mov      ecx, dword ptr [r13+0x08]
        test     ecx, ecx
-       jle      SHORT G_M1184_IG13
-       align    [0 bytes for IG09]
-						;; size=11 bbWeight=0.50 PerfScore 1.75
-G_M1184_IG09:
-       mov      rax, gword ptr [r12+8*rdi+0x10]
+       jle      SHORT G_M1184_IG14
+       align    [0 bytes for IG10]
+						;; size=10 bbWeight=0.50 PerfScore 1.75
+G_M1184_IG10:
+       mov      rax, gword ptr [r13+8*rdi+0x10]
        cmp      dword ptr [rax+0x28], r15d
-       jne      SHORT G_M1184_IG12
+       jne      SHORT G_M1184_IG13
 						;; size=11 bbWeight=4 PerfScore 24.00
-G_M1184_IG10:
+G_M1184_IG11:
        mov      eax, edi
-       mov      rax, gword ptr [r12+8*rax+0x10]
+       mov      rax, gword ptr [r13+8*rax+0x10]
        mov      eax, dword ptr [rax+0x34]
 						;; size=10 bbWeight=0.50 PerfScore 2.12
-G_M1184_IG11:
-       add      rsp, 8
+G_M1184_IG12:
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M1184_IG12:
+						;; size=9 bbWeight=0.50 PerfScore 1.75
+G_M1184_IG13:
        inc      edi
        cmp      ecx, edi
-       jg       SHORT G_M1184_IG09
+       jg       SHORT G_M1184_IG10
 						;; size=6 bbWeight=4 PerfScore 6.00
-G_M1184_IG13:
+G_M1184_IG14:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      dword ptr [rbx+0x08], r15d
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      edi, 0x14AFC
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        mov      rcx, rax
        mov      rsi, r14
        mov      rdx, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=108 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 319, prolog size 22, PerfScore 70.50, instruction count 102, allocated bytes for code 319 (MethodHash=016bfb5f) for method System.Globalization.EastAsianLunisolarCalendar:MaxEraCalendarYear(int):int:this (FullOpts)
+; Total bytes of code 314, prolog size 19, PerfScore 70.88, instruction count 98, allocated bytes for code 314 (MethodHash=016bfb5f) for method System.Globalization.EastAsianLunisolarCalendar:MaxEraCalendarYear(int):int:this (FullOpts)
-5 (-1.57 % of base) - System.Globalization.EastAsianLunisolarCalendar:MinEraCalendarYear(int):int:this
 ; Assembly listing for method System.Globalization.EastAsianLunisolarCalendar:MinEraCalendarYear(int):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
+; 0 inlinees with PGO data; 0 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
-;  V00 this         [V00,T01] ( 11,  7.50)     ref  ->  rbx         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
+;  V00 this         [V00,T01] ( 15,  9.50)     ref  ->  rbx         this class-hnd single-def <System.Globalization.EastAsianLunisolarCalendar>
 ;  V01 arg1         [V01,T02] (  7,  7.50)     int  ->  r15        
-;  V02 loc0         [V02,T03] (  5,  7   )     ref  ->  r12         class-hnd exact single-def <System.Globalization.EraInfo[]>
-;  V03 loc1         [V03,T08] (  2,  1   )     int  ->  rdi        
+;  V02 loc0         [V02,T03] (  5,  7   )     ref  ->  r13         class-hnd exact single-def <System.Globalization.EraInfo[]>
+;  V03 loc1         [V03,T07] (  2,  1   )     int  ->  rdi        
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;* V05 tmp1         [V05    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret "spilled call-like call argument" <System.DateTime>
-;  V06 tmp2         [V06,T11] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
-;  V07 tmp3         [V07,T12] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
-;  V08 tmp4         [V08,T07] (  2,  2   )     int  ->  r12         "non-inline candidate call"
+;  V06 tmp2         [V06,T10] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
+;  V07 tmp3         [V07,T11] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
+;  V08 tmp4         [V08,T06] (  2,  2   )     int  ->  r13         "non-inline candidate call"
 ;* V09 tmp5         [V09    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret "spilled call-like call argument" <System.DateTime>
-;  V10 tmp6         [V10,T09] (  2,  1   )    long  ->  rsi         "field V05._dateData (fldOffset=0x0)" P-INDEP
-;  V11 tmp7         [V11,T10] (  2,  1   )    long  ->  rdx         "field V09._dateData (fldOffset=0x0)" P-INDEP
-;  V12 tmp8         [V12,T13] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
-;  V13 tmp9         [V13,T14] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
-;  V14 cse0         [V14,T05] (  7,  4.50)    long  ->  r13         "CSE #02: aggressive"
+;  V10 tmp6         [V10,T08] (  2,  1   )    long  ->  rsi         "field V05._dateData (fldOffset=0x0)" P-INDEP
+;  V11 tmp7         [V11,T09] (  2,  1   )    long  ->  rdx         "field V09._dateData (fldOffset=0x0)" P-INDEP
+;  V12 tmp8         [V12,T12] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
+;  V13 tmp9         [V13,T13] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
+;  V14 cse0         [V14,T05] (  7,  4.50)    long  ->  r14         "CSE #02: aggressive"
 ;  V15 cse1         [V15,T04] (  3,  5   )     int  ->  rcx         "CSE #03: aggressive"
-;  V16 cse2         [V16,T06] (  4,  3   )    long  ->  r14         "CSE #01: aggressive"
-;  V17 rat0         [V17,T00] (  6, 17   )    long  ->  rdi         "Widened IV V03"
+;  V16 rat0         [V16,T00] (  6, 17   )    long  ->  rdi         "Widened IV V03"
 ;
-; Lcl frame size = 8
+; Lcl frame size = 0
 
 G_M38142_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
-       push     r12
        push     rbx
-       push     rax
-       lea      rbp, [rsp+0x30]
+       lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15d, esi
-						;; size=22 bbWeight=1 PerfScore 8.00
+						;; size=19 bbWeight=1 PerfScore 6.00
 G_M38142_IG02:
        mov      rdi, rbx
-       mov      r14, qword ptr [rbx]
-       mov      r13, qword ptr [r14+0x78]
-       call     [r13+0x28]System.Globalization.EastAsianLunisolarCalendar:get_CalEraInfo():System.Globalization.EraInfo[]:this
-       mov      r12, rax
-       test     r12, r12
+       mov      rax, qword ptr [rbx]
+       mov      r14, qword ptr [rax+0x78]
+       call     [r14+0x20]System.Globalization.EastAsianLunisolarCalendar:get_CalEraInfo():System.Globalization.EraInfo[]:this
+       mov      r13, rax
+       test     r13, r13
        jne      SHORT G_M38142_IG05
 						;; size=22 bbWeight=1 PerfScore 8.75
 G_M38142_IG03:
        mov      rdi, rbx
-       mov      rax, r13
+       mov      rax, r14
 						;; size=6 bbWeight=0.50 PerfScore 0.25
 G_M38142_IG04:
-       add      rsp, 8
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
-       tail.jmp [rax+0x18]System.Globalization.EastAsianLunisolarCalendar:get_MinCalendarYear():int:this
-						;; size=18 bbWeight=0.50 PerfScore 2.62
+       tail.jmp [rax+0x10]System.Globalization.EastAsianLunisolarCalendar:get_MinCalendarYear():int:this
+						;; size=12 bbWeight=0.50 PerfScore 2.25
 G_M38142_IG05:
        test     r15d, r15d
+       jne      SHORT G_M38142_IG07
+       cmp      dword ptr [rbx+0x08], -1
        jne      SHORT G_M38142_IG06
        mov      rdi, rbx
-       mov      rax, qword ptr [r14+0x48]
-       call     [rax+0x10]System.Globalization.Calendar:get_CurrentEraValue():int:this
-       mov      r15d, eax
-						;; size=18 bbWeight=0.50 PerfScore 3.38
+       mov      rax, 0xD1FFAB1E      ; code for System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       call     [rax]System.Globalization.CalendarData:GetCalendarCurrentEra(System.Globalization.Calendar):int
+       mov      dword ptr [rbx+0x08], eax
+						;; size=29 bbWeight=0.50 PerfScore 4.88
 G_M38142_IG06:
+       mov      r15d, dword ptr [rbx+0x08]
+						;; size=4 bbWeight=0.50 PerfScore 1.00
+G_M38142_IG07:
        mov      rdi, rbx
-       call     [r13+0x30]System.Globalization.EastAsianLunisolarCalendar:get_MinDate():System.DateTime:this
+       call     [r14+0x28]System.Globalization.EastAsianLunisolarCalendar:get_MinDate():System.DateTime:this
        mov      rsi, rax
        mov      rdi, rbx
-       mov      rax, qword ptr [r14+0x58]
-       call     [rax+0x10]System.Globalization.Calendar:GetEra(System.DateTime):int:this
+       mov      rax, qword ptr [rbx]
+       mov      rax, qword ptr [rax+0x58]
+       call     [rax+0x08]System.Globalization.Calendar:GetEra(System.DateTime):int:this
        cmp      eax, r15d
-       jne      SHORT G_M38142_IG08
+       jne      SHORT G_M38142_IG09
        mov      rdi, rbx
-       call     [r13+0x18]System.Globalization.EastAsianLunisolarCalendar:get_MinCalendarYear():int:this
-       mov      r12d, eax
+       call     [r14+0x10]System.Globalization.EastAsianLunisolarCalendar:get_MinCalendarYear():int:this
+       mov      r13d, eax
        mov      rdi, rbx
-       call     [r13+0x30]System.Globalization.EastAsianLunisolarCalendar:get_MinDate():System.DateTime:this
+       call     [r14+0x28]System.Globalization.EastAsianLunisolarCalendar:get_MinDate():System.DateTime:this
        mov      rdx, rax
        mov      rdi, rbx
-       mov      esi, r12d
-       mov      rax, r13
-						;; size=54 bbWeight=0.50 PerfScore 8.88
-G_M38142_IG07:
-       add      rsp, 8
+       mov      esi, r13d
+       mov      rax, r14
+						;; size=57 bbWeight=0.50 PerfScore 9.88
+G_M38142_IG08:
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
-       tail.jmp [rax+0x08]System.Globalization.EastAsianLunisolarCalendar:GetYear(int,System.DateTime):int:this
-						;; size=18 bbWeight=0.50 PerfScore 2.62
-G_M38142_IG08:
+       tail.jmp [rax]System.Globalization.EastAsianLunisolarCalendar:GetYear(int,System.DateTime):int:this
+						;; size=11 bbWeight=0.50 PerfScore 2.25
+G_M38142_IG09:
        xor      edi, edi
-       mov      ecx, dword ptr [r12+0x08]
+       mov      ecx, dword ptr [r13+0x08]
        test     ecx, ecx
-       jle      SHORT G_M38142_IG13
-       align    [0 bytes for IG09]
-						;; size=11 bbWeight=0.50 PerfScore 1.75
-G_M38142_IG09:
-       mov      rax, gword ptr [r12+8*rdi+0x10]
+       jle      SHORT G_M38142_IG14
+       align    [0 bytes for IG10]
+						;; size=10 bbWeight=0.50 PerfScore 1.75
+G_M38142_IG10:
+       mov      rax, gword ptr [r13+8*rdi+0x10]
        cmp      dword ptr [rax+0x28], r15d
-       jne      SHORT G_M38142_IG12
+       jne      SHORT G_M38142_IG13
 						;; size=11 bbWeight=4 PerfScore 24.00
-G_M38142_IG10:
+G_M38142_IG11:
        mov      eax, edi
-       mov      rax, gword ptr [r12+8*rax+0x10]
+       mov      rax, gword ptr [r13+8*rax+0x10]
        mov      eax, dword ptr [rax+0x30]
 						;; size=10 bbWeight=0.50 PerfScore 2.12
-G_M38142_IG11:
-       add      rsp, 8
+G_M38142_IG12:
        pop      rbx
-       pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
-						;; size=15 bbWeight=0.50 PerfScore 2.12
-G_M38142_IG12:
+						;; size=9 bbWeight=0.50 PerfScore 1.75
+G_M38142_IG13:
        inc      edi
        cmp      ecx, edi
-       jg       SHORT G_M38142_IG09
+       jg       SHORT G_M38142_IG10
 						;; size=6 bbWeight=4 PerfScore 6.00
-G_M38142_IG13:
+G_M38142_IG14:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      dword ptr [rbx+0x08], r15d
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      edi, 0x14AFC
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_InvalidEraValue():System.String
        mov      rcx, rax
        mov      rsi, r14
        mov      rdx, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=108 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 319, prolog size 22, PerfScore 70.50, instruction count 102, allocated bytes for code 319 (MethodHash=874e6b01) for method System.Globalization.EastAsianLunisolarCalendar:MinEraCalendarYear(int):int:this (FullOpts)
+; Total bytes of code 314, prolog size 19, PerfScore 70.88, instruction count 98, allocated bytes for code 314 (MethodHash=874e6b01) for method System.Globalization.EastAsianLunisolarCalendar:MinEraCalendarYear(int):int:this (FullOpts)
-3 (-0.51 % of base) - System.Globalization.HebrewCalendar:AddMonths(System.DateTime,int):System.DateTime:this
 ; Assembly listing for method System.Globalization.HebrewCalendar:AddMonths(System.DateTime,int):System.DateTime:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 5 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T03] ( 11, 16.50)     ref  ->  rbx         this class-hnd single-def <System.Globalization.HebrewCalendar>
 ;* V01 arg1         [V01    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op single-def <System.DateTime>
 ;  V02 arg2         [V02,T04] ( 14, 14.50)     int  ->  [rbp-0x2C]  do-not-enreg[Z] EH-live
 ;  V03 loc0         [V03,T00] ( 12, 20.50)     int  ->  r12        
 ;  V04 loc1         [V04,T16] (  4,  2.50)     int  ->  [rbp-0x30] 
 ;  V05 loc2         [V05,T11] (  5,  5   )     int  ->  r13        
 ;* V06 loc3         [V06    ] (  0,  0   )     int  ->  zero-ref   
 ;  V07 loc4         [V07,T05] (  9, 12   )     int  ->  [rbp-0x34] 
 ;  V08 loc5         [V08,T15] (  3,  3   )     int  ->  rax        
 ;* V09 loc6         [V09    ] (  0,  0   )  struct ( 8) zero-ref    multireg-ret ld-addr-op <System.DateTime>
 ;  V10 OutArgs      [V10    ] (  1,  1   )  struct (16) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V11 tmp1         [V11,T17] (  2,  2   )     int  ->  rdi         "dup spill"
 ;* V12 tmp2         [V12    ] (  0,  0   )    long  ->  zero-ref    "impAppendStmt"
 ;* V13 tmp3         [V13    ] (  0,  0   )  struct ( 8) zero-ref    ld-addr-op "NewObj constructor temp" <System.DateTime>
 ;  V14 tmp4         [V14,T01] (  3, 20   )     int  ->  rax         "dup spill"
 ;  V15 tmp5         [V15,T02] (  3, 20   )     int  ->  rax         "dup spill"
 ;* V16 tmp6         [V16    ] (  0,  0   )     ref  ->  zero-ref    class-hnd "impSpillSpecialSideEff" <System.ArgumentException>
 ;  V17 tmp7         [V17,T20] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "Single-def Box Helper" <System.Int32>
 ;  V18 tmp8         [V18,T21] (  3,  0   )     ref  ->  r15         class-hnd exact single-def "NewObj constructor temp" <System.ArgumentOutOfRangeException>
 ;  V19 tmp9         [V19,T08] (  3,  6   )    long  ->  rax         "Inlining Arg"
 ;  V20 tmp10        [V20,T14] (  2,  2   )    long  ->  rsi         single-def "field V01._dateData (fldOffset=0x0)" P-INDEP
 ;  V21 tmp11        [V21,T18] (  2,  2   )    long  ->  rcx         "field V09._dateData (fldOffset=0x0)" P-INDEP
 ;* V22 tmp12        [V22    ] (  0,  0   )    long  ->  zero-ref    "field V13._dateData (fldOffset=0x0)" P-INDEP
 ;  V23 tmp13        [V23,T07] (  4,  8   )    long  ->  r15         "fgMakeTemp is creating a new local variable"
 ;  V24 tmp14        [V24,T22] (  2,  0   )     ref  ->  r14         single-def "argument with side effect"
 ;  V25 tmp15        [V25,T23] (  2,  0   )     ref  ->  rcx         single-def "argument with side effect"
 ;  V26 PSPSym       [V26,T19] (  1,  1   )    long  ->  [rbp-0x50]  do-not-enreg[V] "PSPSym"
 ;  V27 cse0         [V27,T06] (  5,  9.50)    long  ->  [rbp-0x40]  hoist multi-def "CSE #04: aggressive"
 ;  V28 cse1         [V28,T13] (  4,  4   )    long  ->  r13         "CSE #03: moderate"
 ;  V29 cse2         [V29,T12] (  5,  5   )    long  ->  r15         "CSE #01: moderate"
 ;  V30 cse3         [V30,T10] (  6,  5   )    long  ->  r14         "CSE #02: moderate"
 ;  V31 rat0         [V31,T09] (  3,  6   )    long  ->  rdx         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 56
 
 G_M14055_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 56
        lea      rbp, [rsp+0x60]
        mov      qword ptr [rbp-0x50], rsp
        mov      dword ptr [rbp-0x2C], edx
        mov      rbx, rdi
 						;; size=29 bbWeight=1 PerfScore 9.00
 G_M14055_IG02:
        mov      r15, 0xD1FFAB1E
        and      r15, rsi
        mov      rsi, r15
        mov      rdi, rbx
        xor      edx, edx
        mov      r14, qword ptr [rbx]
        mov      r13, qword ptr [r14+0x70]
-       call     [r13+0x38]System.Globalization.HebrewCalendar:GetDatePart(long,int):int:this
+       call     [r13+0x30]System.Globalization.HebrewCalendar:GetDatePart(long,int):int:this
        mov      r12d, eax
        mov      rsi, r15
        mov      rdi, rbx
        mov      edx, 2
-       call     [r13+0x38]System.Globalization.HebrewCalendar:GetDatePart(long,int):int:this
+       call     [r13+0x30]System.Globalization.HebrewCalendar:GetDatePart(long,int):int:this
        mov      dword ptr [rbp-0x30], eax
        mov      rsi, r15
        mov      rdi, rbx
        mov      edx, 3
-       call     [r13+0x38]System.Globalization.HebrewCalendar:GetDatePart(long,int):int:this
+       call     [r13+0x30]System.Globalization.HebrewCalendar:GetDatePart(long,int):int:this
        mov      r13d, eax
        cmp      dword ptr [rbp-0x2C], 0
        jl       G_M14055_IG09
 						;; size=81 bbWeight=1 PerfScore 20.25
 G_M14055_IG03:
        mov      eax, dword ptr [rbp-0x30]
        add      eax, dword ptr [rbp-0x2C]
        mov      dword ptr [rbp-0x34], eax
        mov      rcx, qword ptr [r14+0x60]
        jmp      SHORT G_M14055_IG05
 						;; size=15 bbWeight=0.50 PerfScore 4.00
 G_M14055_IG04:
        inc      r12d
        sub      edi, eax
        mov      dword ptr [rbp-0x34], edi
        mov      rcx, qword ptr [rbp-0x40]
 						;; size=12 bbWeight=2 PerfScore 5.00
 G_M14055_IG05:
        mov      rdi, rbx
        mov      esi, r12d
        xor      edx, edx
        mov      qword ptr [rbp-0x40], rcx
-       call     [rcx+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+       call     [rcx]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
        mov      edi, dword ptr [rbp-0x34]
        cmp      edi, eax
        jg       SHORT G_M14055_IG04
-						;; size=22 bbWeight=4 PerfScore 28.00
+						;; size=21 bbWeight=4 PerfScore 28.00
 G_M14055_IG06:
        mov      dword ptr [rbp-0x34], edi
 						;; size=3 bbWeight=2 PerfScore 2.00
 G_M14055_IG07:
        mov      rdi, rbx
        mov      esi, r12d
        mov      edx, dword ptr [rbp-0x34]
        mov      rax, qword ptr [r14+0x50]
-       call     [rax+0x30]System.Globalization.Calendar:GetDaysInMonth(int,int):int:this
+       call     [rax+0x28]System.Globalization.Calendar:GetDaysInMonth(int,int):int:this
        cmp      r13d, eax
        cmovg    r13d, eax
        xor      edi, edi
        mov      dword ptr [rsp], edi
 						;; size=28 bbWeight=1 PerfScore 8.25
 G_M14055_IG08:
        mov      dword ptr [rsp+0x08], edi
        mov      rdi, rbx
        mov      esi, r12d
        mov      edx, dword ptr [rbp-0x34]
        mov      ecx, r13d
        xor      r8d, r8d
        xor      r9d, r9d
        mov      rax, qword ptr [r14+0x68]
-       call     [rax+0x30]System.Globalization.Calendar:ToDateTime(int,int,int,int,int,int,int):System.DateTime:this
+       call     [rax+0x28]System.Globalization.Calendar:ToDateTime(int,int,int,int,int,int,int):System.DateTime:this
        mov      rcx, rax
        mov      rdx, 0xD1FFAB1E
        mov      rax, rdx
        imul     rdx:rax, r15
        add      rdx, r15
        mov      rdi, rdx
        shr      rdi, 63
        sar      rdx, 39
        add      rdi, rdx
        mov      rsi, 0xD1FFAB1E
        imul     rdi, rsi
        sub      r15, rdi
        mov      rax, 0xD1FFAB1E
        and      rax, rcx
        add      rax, r15
        mov      rdi, 0xD1FFAB1E
        cmp      rax, rdi
        jbe      G_M14055_IG14
        jmp      SHORT G_M14055_IG13
 						;; size=119 bbWeight=1 PerfScore 20.50
 G_M14055_IG09:
        mov      eax, dword ptr [rbp-0x30]
        mov      edi, eax
        add      edi, dword ptr [rbp-0x2C]
        mov      ecx, edi
        mov      dword ptr [rbp-0x34], ecx
        test     ecx, ecx
        jg       G_M14055_IG07
        mov      edi, eax
        mov      esi, dword ptr [rbp-0x2C]
        neg      esi
        mov      dword ptr [rbp-0x2C], esi
        mov      esi, dword ptr [rbp-0x2C]
        sub      esi, edi
        mov      dword ptr [rbp-0x2C], esi
        dec      r12d
        mov      rcx, qword ptr [r14+0x60]
        mov      rax, rcx
        jmp      SHORT G_M14055_IG11
 						;; size=51 bbWeight=0.50 PerfScore 7.50
 G_M14055_IG10:
        dec      r12d
        mov      edi, dword ptr [rbp-0x2C]
        sub      edi, eax
        mov      dword ptr [rbp-0x2C], edi
        mov      rax, qword ptr [rbp-0x40]
 						;; size=15 bbWeight=2 PerfScore 7.00
 G_M14055_IG11:
        mov      rdi, rbx
        mov      esi, r12d
        xor      edx, edx
        mov      qword ptr [rbp-0x40], rax
-       call     [rax+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+       call     [rax]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
        cmp      dword ptr [rbp-0x2C], eax
        jg       SHORT G_M14055_IG10
-						;; size=20 bbWeight=4 PerfScore 31.00
+						;; size=19 bbWeight=4 PerfScore 31.00
 G_M14055_IG12:
        mov      rdi, rbx
        mov      esi, r12d
        xor      edx, edx
        mov      rax, qword ptr [rbp-0x40]
-       call     [rax+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+       call     [rax]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
        mov      edx, eax
        sub      edx, dword ptr [rbp-0x2C]
        mov      eax, edx
        mov      dword ptr [rbp-0x34], eax
        jmp      G_M14055_IG07
-						;; size=30 bbWeight=0.50 PerfScore 5.12
+						;; size=29 bbWeight=0.50 PerfScore 5.12
 G_M14055_IG13:
        mov      rax, 0xD1FFAB1E      ; code for System.DateTime:ThrowTicksOutOfRange()
        call     [rax]System.DateTime:ThrowTicksOutOfRange()
        int3     
 						;; size=13 bbWeight=0 PerfScore 0.00
 G_M14055_IG14:
        add      rsp, 56
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=1 PerfScore 4.25
 G_M14055_IG15:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        sub      rsp, 24
        mov      rbp, qword ptr [rdi+0x10]
        mov      qword ptr [rsp+0x10], rbp
        lea      rbp, [rbp+0x60]
 						;; size=27 bbWeight=0 PerfScore 0.00
 G_M14055_IG16:
        mov      rdi, 0xD1FFAB1E      ; System.Int32
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      edi, dword ptr [rbp-0x2C]
        mov      dword ptr [rbx+0x08], edi
        mov      rdi, 0xD1FFAB1E      ; System.ArgumentOutOfRangeException
        call     CORINFO_HELP_NEWSFAST
        mov      r15, rax
        mov      edi, 0x14B3
        mov      rsi, 0xD1FFAB1E
        call     CORINFO_HELP_STRCNS
        mov      r14, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_ArgumentOutOfRange_AddValue():System.String
        call     [rax]System.SR:get_ArgumentOutOfRange_AddValue():System.String
        mov      rcx, rax
        mov      rsi, r14
        mov      rdx, rbx
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        call     [rax]System.ArgumentOutOfRangeException:.ctor(System.String,System.Object,System.String):this
        mov      rdi, r15
        call     CORINFO_HELP_THROW
        int3     
 						;; size=110 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 590, prolog size 29, PerfScore 151.88, instruction count 171, allocated bytes for code 590 (MethodHash=b3cec918) for method System.Globalization.HebrewCalendar:AddMonths(System.DateTime,int):System.DateTime:this (FullOpts)
+; Total bytes of code 587, prolog size 29, PerfScore 151.88, instruction count 171, allocated bytes for code 587 (MethodHash=b3cec918) for method System.Globalization.HebrewCalendar:AddMonths(System.DateTime,int):System.DateTime:this (FullOpts)
-2 (-1.98 % of base) - System.Globalization.Calendar:IsValidMonth(int,int,int):ubyte:this
 ; Assembly listing for method System.Globalization.Calendar:IsValidMonth(int,int,int):ubyte:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  6,  5   )     ref  ->  rbx         this class-hnd single-def <System.Globalization.Calendar>
 ;  V01 arg1         [V01,T01] (  4,  3.50)     int  ->  r15         single-def
 ;  V02 arg2         [V02,T03] (  4,  3   )     int  ->  r13         single-def
 ;  V03 arg3         [V03,T02] (  4,  3.50)     int  ->  r14         single-def
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M11141_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15d, esi
        mov      r13d, edx
        mov      r14d, ecx
 						;; size=25 bbWeight=1 PerfScore 6.50
 G_M11141_IG02:
        mov      rdi, rbx
        mov      esi, r15d
        mov      edx, r14d
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x70]
-       call     [rax+0x08]System.Globalization.Calendar:IsValidYear(int,int):ubyte:this
+       call     [rax]System.Globalization.Calendar:IsValidYear(int,int):ubyte:this
        test     eax, eax
        je       SHORT G_M11141_IG05
-						;; size=23 bbWeight=1 PerfScore 9.00
+						;; size=22 bbWeight=1 PerfScore 9.00
 G_M11141_IG03:
        test     r13d, r13d
        jle      SHORT G_M11141_IG05
        mov      rdi, rbx
        mov      esi, r15d
        mov      edx, r14d
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x60]
-       call     [rax+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+       call     [rax]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
        cmp      eax, r13d
        setge    al
        movzx    rax, al
-						;; size=33 bbWeight=0.50 PerfScore 5.25
+						;; size=32 bbWeight=0.50 PerfScore 5.25
 G_M11141_IG04:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=0.50 PerfScore 1.75
 G_M11141_IG05:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M11141_IG06:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=0.50 PerfScore 1.75
 
-; Total bytes of code 101, prolog size 13, PerfScore 24.38, instruction count 42, allocated bytes for code 101 (MethodHash=4eead47a) for method System.Globalization.Calendar:IsValidMonth(int,int,int):ubyte:this (FullOpts)
+; Total bytes of code 99, prolog size 13, PerfScore 24.38, instruction count 42, allocated bytes for code 99 (MethodHash=4eead47a) for method System.Globalization.Calendar:IsValidMonth(int,int,int):ubyte:this (FullOpts)
-2 (-0.43 % of base) - System.Globalization.HijriCalendar:GetDatePart(long,int):int:this
 ; Assembly listing for method System.Globalization.HijriCalendar:GetDatePart(long,int):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; 0 inlinees with PGO data; 2 single block inlinees; 1 inlinees without PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T03] (  9,  8   )     ref  ->  rbx         this class-hnd single-def <System.Globalization.HijriCalendar>
 ;  V01 arg1         [V01,T05] (  5,  5   )    long  ->  r15         single-def
 ;  V02 arg2         [V02,T06] (  6,  4.50)     int  ->  r14         single-def
 ;  V03 loc0         [V03,T02] ( 12, 12   )    long  ->  r15        
 ;  V04 loc1         [V04,T04] ( 11,  7   )     int  ->  r13        
 ;  V05 loc2         [V05,T07] ( 10,  6   )    long  ->  r12        
 ;  V06 loc3         [V06,T11] (  3,  2   )    long  ->  rax        
 ;  V07 loc4         [V07,T00] (  9, 14.50)     int  ->  rax        
 ;  V08 loc5         [V08,T14] (  2,  1   )     int  ->  rax        
 ;* V09 loc6         [V09    ] (  0,  0   )  struct (16) zero-ref    ld-addr-op <System.ReadOnlySpan`1[int]>
 ;# V10 OutArgs      [V10    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V11 tmp1         [V11,T15] (  3,  0   )     ref  ->  rbx         class-hnd exact single-def "NewObj constructor temp" <System.InvalidOperationException>
 ;* V12 tmp2         [V12    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]>
 ;* V13 tmp3         [V13    ] (  0,  0   )  struct (16) zero-ref    "ReadOnlySpan<T> for CreateSpan<T>" <System.ReadOnlySpan`1[int]>
 ;* V14 tmp4         [V14    ] (  0,  0   )   byref  ->  zero-ref    "field V09._reference (fldOffset=0x0)" P-INDEP
 ;* V15 tmp5         [V15    ] (  0,  0   )     int  ->  zero-ref    "field V09._length (fldOffset=0x8)" P-INDEP
 ;* V16 tmp6         [V16    ] (  0,  0   )   byref  ->  zero-ref    "field V12._reference (fldOffset=0x0)" P-INDEP
 ;* V17 tmp7         [V17    ] (  0,  0   )     int  ->  zero-ref    "field V12._length (fldOffset=0x8)" P-INDEP
 ;* V18 tmp8         [V18    ] (  0,  0   )   byref  ->  zero-ref    single-def "field V13._reference (fldOffset=0x0)" P-INDEP
 ;* V19 tmp9         [V19    ] (  0,  0   )     int  ->  zero-ref    "field V13._length (fldOffset=0x8)" P-INDEP
 ;  V20 tmp10        [V20,T16] (  2,  0   )     ref  ->  rsi         single-def "argument with side effect"
 ;  V21 cse0         [V21,T10] (  3,  2.50)    long  ->  [rbp-0x30]  spill-single-def "CSE #03: moderate"
 ;  V22 cse1         [V22,T12] (  3,  1.50)    long  ->  rax         "CSE #04: moderate"
 ;  V23 cse2         [V23,T01] (  5, 13   )     int  ->  rdi         multi-def "CSE #05: aggressive"
 ;  V24 cse3         [V24,T13] (  3,  1.50)     int  ->  rax         "CSE #06: moderate"
 ;  V25 rat0         [V25,T08] (  3,  6   )    long  ->  rdx         "ReplaceWithLclVar is creating a new local variable"
 ;  V26 rat1         [V26,T09] (  3,  6   )    long  ->  rdx         "ReplaceWithLclVar is creating a new local variable"
 ;
 ; Lcl frame size = 8
 
 G_M55766_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        lea      rbp, [rsp+0x30]
        mov      rbx, rdi
        mov      r15, rsi
        mov      r14d, edx
 						;; size=25 bbWeight=1 PerfScore 8.25
 G_M55766_IG02:
        mov      rdi, r15
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.HijriCalendar:CheckTicksRange(long)
        call     [rax]System.Globalization.HijriCalendar:CheckTicksRange(long)
        mov      rdx, 0xD1FFAB1E
        mov      rax, rdx
        imul     rdx:rax, r15
        add      rdx, r15
        mov      rax, rdx
        shr      rax, 63
        sar      rdx, 39
        lea      r15, [rdx+rax+0x01]
        cmp      dword ptr [rbx+0x14], 0xD1FFAB1E
        jne      SHORT G_M55766_IG04
 						;; size=59 bbWeight=1 PerfScore 13.50
 G_M55766_IG03:
        xor      eax, eax
        mov      dword ptr [rbx+0x14], eax
 						;; size=5 bbWeight=0.50 PerfScore 0.62
 G_M55766_IG04:
        movsxd   rax, dword ptr [rbx+0x14]
        add      r15, rax
        lea      rax, [r15-0x000376C5]
        imul     rdx, rax, 30
        mov      rdi, 0xD1FFAB1E
        mov      rax, rdi
        imul     rdx:rax, rdx
        mov      r13, rdx
        shr      r13, 63
        sar      rdx, 11
        add      r13, rdx
        inc      r13d
        mov      rdi, rbx
        mov      esi, r13d
        mov      rax, 0xD1FFAB1E      ; code for System.Globalization.HijriCalendar:DaysUpToHijriYear(int):long:this
        call     [rax]System.Globalization.HijriCalendar:DaysUpToHijriYear(int):long:this
        mov      r12, rax
        mov      rdi, rbx
        mov      esi, r13d
        xor      edx, edx
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x58]
        mov      qword ptr [rbp-0x30], rax
-       call     [rax+0x08]System.Globalization.Calendar:GetDaysInYear(int,int):int:this
+       call     [rax]System.Globalization.Calendar:GetDaysInYear(int,int):int:this
        cdqe     
        cmp      r15, r12
        jge      SHORT G_M55766_IG06
-						;; size=101 bbWeight=1 PerfScore 26.25
+						;; size=100 bbWeight=1 PerfScore 26.25
 G_M55766_IG05:
        sub      r12, rax
        dec      r13d
        jmp      SHORT G_M55766_IG08
 						;; size=8 bbWeight=0.50 PerfScore 1.25
 G_M55766_IG06:
        cmp      r15, r12
        jne      SHORT G_M55766_IG07
        dec      r13d
        mov      rdi, rbx
        mov      esi, r13d
        xor      edx, edx
        mov      rbx, qword ptr [rbp-0x30]
-       call     [rbx+0x08]System.Globalization.Calendar:GetDaysInYear(int,int):int:this
+       call     [rbx]System.Globalization.Calendar:GetDaysInYear(int,int):int:this
        cdqe     
        sub      r12, rax
        jmp      SHORT G_M55766_IG08
-						;; size=30 bbWeight=0.50 PerfScore 4.38
+						;; size=29 bbWeight=0.50 PerfScore 4.38
 G_M55766_IG07:
        add      rax, r12
        cmp      rax, r15
        jge      SHORT G_M55766_IG08
        mov      r12, rax
        inc      r13d
 						;; size=14 bbWeight=0.50 PerfScore 1.00
 G_M55766_IG08:
        test     r14d, r14d
        jne      SHORT G_M55766_IG11
 						;; size=5 bbWeight=1 PerfScore 1.25
 G_M55766_IG09:
        mov      eax, r13d
 						;; size=3 bbWeight=0.50 PerfScore 0.12
 G_M55766_IG10:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M55766_IG11:
        mov      eax, 1
        sub      r15, r12
        cmp      r14d, 1
        jne      SHORT G_M55766_IG14
        mov      eax, r15d
 						;; size=17 bbWeight=0.50 PerfScore 1.00
 G_M55766_IG12:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M55766_IG13:
        inc      eax
 						;; size=2 bbWeight=2 PerfScore 0.50
 G_M55766_IG14:
        cmp      eax, 12
        jg       SHORT G_M55766_IG15
        lea      edi, [rax-0x01]
        cmp      edi, 13
        jae      G_M55766_IG20
        mov      rcx, 0xD1FFAB1E      ; static handle
        movsxd   rdi, dword ptr [rcx+4*rdi]
        cmp      r15, rdi
        jg       SHORT G_M55766_IG13
 						;; size=36 bbWeight=4 PerfScore 34.00
 G_M55766_IG15:
        lea      edi, [rax-0x01]
        mov      eax, edi
        cmp      r14d, 2
        jne      SHORT G_M55766_IG17
 						;; size=11 bbWeight=0.50 PerfScore 1.00
 G_M55766_IG16:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M55766_IG17:
        dec      eax
        cmp      eax, 13
        jae      SHORT G_M55766_IG20
        mov      rdi, 0xD1FFAB1E      ; static handle
        mov      ecx, r15d
        sub      ecx, dword ptr [rdi+4*rax]
        mov      eax, ecx
        cmp      r14d, 3
        jne      SHORT G_M55766_IG19
 						;; size=31 bbWeight=0.50 PerfScore 3.25
 G_M55766_IG18:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M55766_IG19:
        mov      rdi, 0xD1FFAB1E      ; System.InvalidOperationException
        call     CORINFO_HELP_NEWSFAST
        mov      rbx, rax
        mov      rax, 0xD1FFAB1E      ; code for System.SR:get_InvalidOperation_DateTimeParsing():System.String
        call     [rax]System.SR:get_InvalidOperation_DateTimeParsing():System.String
        mov      rsi, rax
        mov      rdi, rbx
        mov      rax, 0xD1FFAB1E      ; code for System.InvalidOperationException:.ctor(System.String):this
        call     [rax]System.InvalidOperationException:.ctor(System.String):this
        mov      rdi, rbx
        call     CORINFO_HELP_THROW
        int3     
 						;; size=57 bbWeight=0 PerfScore 0.00
 G_M55766_IG20:
        call     CORINFO_HELP_RNGCHKFAIL
        int3     
 						;; size=6 bbWeight=0 PerfScore 0.00
 
-; Total bytes of code 470, prolog size 25, PerfScore 104.88, instruction count 149, allocated bytes for code 470 (MethodHash=0f172629) for method System.Globalization.HijriCalendar:GetDatePart(long,int):int:this (FullOpts)
+; Total bytes of code 468, prolog size 25, PerfScore 104.88, instruction count 149, allocated bytes for code 468 (MethodHash=0f172629) for method System.Globalization.HijriCalendar:GetDatePart(long,int):int:this (FullOpts)
-1 (-1.00 % of base) - Internal.Cryptography.Helpers:IsValidMonth(System.Globalization.Calendar,int,int,int):ubyte
 ; Assembly listing for method Internal.Cryptography.Helpers:IsValidMonth(System.Globalization.Calendar,int,int,int):ubyte (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 arg0         [V00,T00] (  5,  4   )     ref  ->  rbx         class-hnd single-def <System.Globalization.Calendar>
 ;  V01 arg1         [V01,T01] (  4,  3.50)     int  ->  r15         single-def
 ;  V02 arg2         [V02,T02] (  4,  3   )     int  ->  r14         single-def
 ;  V03 arg3         [V03,T03] (  3,  2.50)     int  ->  r13         single-def
 ;# V04 OutArgs      [V04    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M37873_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     rbx
        lea      rbp, [rsp+0x20]
        mov      rbx, rdi
        mov      r15d, esi
        mov      r14d, edx
        mov      r13d, ecx
 						;; size=25 bbWeight=1 PerfScore 6.50
 G_M37873_IG02:
        mov      rdi, rbx
        mov      esi, r15d
        mov      rax, 0xD1FFAB1E      ; code for Internal.Cryptography.Helpers:IsValidYear(System.Globalization.Calendar,int):ubyte
        call     [rax]Internal.Cryptography.Helpers:IsValidYear(System.Globalization.Calendar,int):ubyte
        test     eax, eax
        je       SHORT G_M37873_IG05
 						;; size=22 bbWeight=1 PerfScore 5.00
 G_M37873_IG03:
        test     r14d, r14d
        jle      SHORT G_M37873_IG05
        mov      rdi, rbx
        mov      esi, r15d
        mov      edx, r13d
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x60]
-       call     [rax+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+       call     [rax]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
        cmp      eax, r14d
        setge    al
        movzx    rax, al
-						;; size=33 bbWeight=0.50 PerfScore 5.25
+						;; size=32 bbWeight=0.50 PerfScore 5.25
 G_M37873_IG04:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=0.50 PerfScore 1.75
 G_M37873_IG05:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M37873_IG06:
        pop      rbx
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=9 bbWeight=0.50 PerfScore 1.75
 
-; Total bytes of code 100, prolog size 13, PerfScore 20.38, instruction count 40, allocated bytes for code 100 (MethodHash=b0906c0e) for method Internal.Cryptography.Helpers:IsValidMonth(System.Globalization.Calendar,int,int,int):ubyte (FullOpts)
+; Total bytes of code 99, prolog size 13, PerfScore 20.38, instruction count 40, allocated bytes for code 99 (MethodHash=b0906c0e) for method Internal.Cryptography.Helpers:IsValidMonth(System.Globalization.Calendar,int,int,int):ubyte (FullOpts)
-1 (-5.56 % of base) - System.Globalization.Calendar:GetDaysInYear(int):int:this
 ; Assembly listing for method System.Globalization.Calendar:GetDaysInYear(int):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  4,  4   )     ref  ->  rdi         this class-hnd single-def <System.Globalization.Calendar>
 ;  V01 arg1         [V01,T01] (  3,  3   )     int  ->  rsi         single-def
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M2372_IG01:
        push     rbp
        mov      rbp, rsp
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M2372_IG02:
        xor      edx, edx
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x58]
 						;; size=9 bbWeight=1 PerfScore 4.25
 G_M2372_IG03:
        pop      rbp
-       tail.jmp [rax+0x08]System.Globalization.Calendar:GetDaysInYear(int,int):int:this
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Globalization.Calendar:GetDaysInYear(int,int):int:this
+						;; size=4 bbWeight=1 PerfScore 2.50
 
-; Total bytes of code 18, prolog size 4, PerfScore 8.00, instruction count 7, allocated bytes for code 18 (MethodHash=8e31f6bb) for method System.Globalization.Calendar:GetDaysInYear(int):int:this (FullOpts)
+; Total bytes of code 17, prolog size 4, PerfScore 8.00, instruction count 7, allocated bytes for code 17 (MethodHash=8e31f6bb) for method System.Globalization.Calendar:GetDaysInYear(int):int:this (FullOpts)
-1 (-0.67 % of base) - System.Globalization.Calendar:GetLeapMonth(int,int):int:this
 ; Assembly listing for method System.Globalization.Calendar:GetLeapMonth(int,int):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; partially interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T01] (  7,  9   )     ref  ->  rbx         this class-hnd single-def <System.Globalization.Calendar>
 ;  V01 arg1         [V01,T02] (  5,  7.50)     int  ->  r15         single-def
 ;  V02 arg2         [V02,T03] (  5,  7.50)     int  ->  r14         single-def
 ;  V03 loc0         [V03,T05] (  3,  5   )     int  ->  r12        
 ;  V04 loc1         [V04,T00] (  6, 17   )     int  ->  [rbp-0x2C] 
 ;# V05 OutArgs      [V05    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;  V06 cse0         [V06,T04] (  3,  6   )    long  ->  r13         "CSE #02: aggressive"
 ;
 ; Lcl frame size = 8
 
 G_M36788_IG01:
        push     rbp
        push     r15
        push     r14
        push     r13
        push     r12
        push     rbx
        push     rax
        lea      rbp, [rsp+0x30]
        mov      rbx, rdi
        mov      r15d, esi
        mov      r14d, edx
 						;; size=25 bbWeight=1 PerfScore 8.25
 G_M36788_IG02:
        mov      rdi, rbx
        mov      esi, r15d
        mov      edx, r14d
        mov      rax, qword ptr [rbx]
        mov      r13, qword ptr [rax+0x68]
-       call     [r13+0x28]System.Globalization.Calendar:IsLeapYear(int,int):ubyte:this
+       call     [r13+0x20]System.Globalization.Calendar:IsLeapYear(int,int):ubyte:this
        test     eax, eax
        jne      SHORT G_M36788_IG05
 						;; size=24 bbWeight=1 PerfScore 9.00
 G_M36788_IG03:
        xor      eax, eax
 						;; size=2 bbWeight=0.50 PerfScore 0.12
 G_M36788_IG04:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M36788_IG05:
        mov      rdi, rbx
        mov      esi, r15d
        mov      edx, r14d
        mov      rax, qword ptr [rbx]
        mov      rax, qword ptr [rax+0x60]
-       call     [rax+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+       call     [rax]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
        mov      r12d, eax
        mov      eax, 1
        test     r12d, r12d
        jle      SHORT G_M36788_IG03
-						;; size=32 bbWeight=0.50 PerfScore 4.75
+						;; size=31 bbWeight=0.50 PerfScore 4.75
 G_M36788_IG06:
        mov      rdi, rbx
        mov      esi, r15d
        mov      dword ptr [rbp-0x2C], eax
        mov      edx, eax
        mov      ecx, r14d
-       call     [r13+0x08]System.Globalization.Calendar:IsLeapMonth(int,int,int):ubyte:this
+       call     [r13]System.Globalization.Calendar:IsLeapMonth(int,int,int):ubyte:this
        test     eax, eax
        je       SHORT G_M36788_IG09
 						;; size=22 bbWeight=4 PerfScore 25.00
 G_M36788_IG07:
        mov      eax, dword ptr [rbp-0x2C]
 						;; size=3 bbWeight=0.50 PerfScore 0.50
 G_M36788_IG08:
        add      rsp, 8
        pop      rbx
        pop      r12
        pop      r13
        pop      r14
        pop      r15
        pop      rbp
        ret      
 						;; size=15 bbWeight=0.50 PerfScore 2.12
 G_M36788_IG09:
        mov      eax, dword ptr [rbp-0x2C]
        inc      eax
        cmp      eax, r12d
        jle      SHORT G_M36788_IG06
        jmp      SHORT G_M36788_IG03
 						;; size=12 bbWeight=4 PerfScore 18.00
 
-; Total bytes of code 150, prolog size 16, PerfScore 69.88, instruction count 60, allocated bytes for code 150 (MethodHash=2fd0704b) for method System.Globalization.Calendar:GetLeapMonth(int,int):int:this (FullOpts)
+; Total bytes of code 149, prolog size 16, PerfScore 69.88, instruction count 60, allocated bytes for code 149 (MethodHash=2fd0704b) for method System.Globalization.Calendar:GetLeapMonth(int,int):int:this (FullOpts)
-1 (-5.56 % of base) - System.Globalization.Calendar:GetMonthsInYear(int):int:this
 ; Assembly listing for method System.Globalization.Calendar:GetMonthsInYear(int):int:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  4,  4   )     ref  ->  rdi         this class-hnd single-def <System.Globalization.Calendar>
 ;  V01 arg1         [V01,T01] (  3,  3   )     int  ->  rsi         single-def
 ;# V02 OutArgs      [V02    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M22472_IG01:
        push     rbp
        mov      rbp, rsp
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M22472_IG02:
        xor      edx, edx
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x60]
 						;; size=9 bbWeight=1 PerfScore 4.25
 G_M22472_IG03:
        pop      rbp
-       tail.jmp [rax+0x08]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Globalization.Calendar:GetMonthsInYear(int,int):int:this
+						;; size=4 bbWeight=1 PerfScore 2.50
 
-; Total bytes of code 18, prolog size 4, PerfScore 8.00, instruction count 7, allocated bytes for code 18 (MethodHash=624da837) for method System.Globalization.Calendar:GetMonthsInYear(int):int:this (FullOpts)
+; Total bytes of code 17, prolog size 4, PerfScore 8.00, instruction count 7, allocated bytes for code 17 (MethodHash=624da837) for method System.Globalization.Calendar:GetMonthsInYear(int):int:this (FullOpts)
-1 (-5.56 % of base) - System.Globalization.Calendar:IsLeapMonth(int,int):ubyte:this
 ; Assembly listing for method System.Globalization.Calendar:IsLeapMonth(int,int):ubyte:this (FullOpts)
 ; Emitting BLENDED_CODE for X64 with AVX512 - Unix
 ; FullOpts code
 ; optimized code
 ; rbp based frame
 ; fully interruptible
 ; No PGO data
 ; Final local variable assignments
 ;
 ;  V00 this         [V00,T00] (  4,  4   )     ref  ->  rdi         this class-hnd single-def <System.Globalization.Calendar>
 ;  V01 arg1         [V01,T01] (  3,  3   )     int  ->  rsi         single-def
 ;  V02 arg2         [V02,T02] (  3,  3   )     int  ->  rdx         single-def
 ;# V03 OutArgs      [V03    ] (  1,  1   )  struct ( 0) [rsp+0x00]  do-not-enreg[XS] addr-exposed "OutgoingArgSpace"
 ;
 ; Lcl frame size = 0
 
 G_M36788_IG01:
        push     rbp
        mov      rbp, rsp
 						;; size=4 bbWeight=1 PerfScore 1.25
 G_M36788_IG02:
        xor      ecx, ecx
        mov      rax, qword ptr [rdi]
        mov      rax, qword ptr [rax+0x68]
 						;; size=9 bbWeight=1 PerfScore 4.25
 G_M36788_IG03:
        pop      rbp
-       tail.jmp [rax+0x08]System.Globalization.Calendar:IsLeapMonth(int,int,int):ubyte:this
-						;; size=5 bbWeight=1 PerfScore 2.50
+       tail.jmp [rax]System.Globalization.Calendar:IsLeapMonth(int,int,int):ubyte:this
+						;; size=4 bbWeight=1 PerfScore 2.50
 
-; Total bytes of code 18, prolog size 4, PerfScore 8.00, instruction count 7, allocated bytes for code 18 (MethodHash=8bcd704b) for method System.Globalization.Calendar:IsLeapMonth(int,int):ubyte:this (FullOpts)
+; Total bytes of code 17, prolog size 4, PerfScore 8.00, instruction count 7, allocated bytes for code 17 (MethodHash=8bcd704b) for method System.Globalization.Calendar:IsLeapMonth(int,int):ubyte:this (FullOpts)

Larger list of diffs: https://gist.github.com/MihuBot/5224cefdce546b3814278dfdc52bd5c4

@MihuBot
Copy link
Owner Author

MihuBot commented Jul 4, 2024

@xtqqczze

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant