-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Arm64: Combine if conditions into compare chains #79283
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsAdd a new stage optOptimizeCompareChainCondBlock in pass optOptimizeBools. This finds multiple All If conversion to use these
|
(Putting up a WIP patch as I've got a couple of issues to still work through.) I'm getting an error compiling System.Number:NumberToStringFormat(). This is a big function! With this optimise bools creates an At the code generation stage, we'll generate something like:
The However, NumberToStringFormat() is a big function. During linear scan, a
Note that the Now during the code generation, the entire Alternatively, I was thinking not to contain the Full dump file: @kunalspathak, @jakobbotsch what are your thoughts? |
Yes, LSRA will spill and insert resolution nodes before the terminating nodes like JTRUE. It means we cannot in general contain things inside the JTRUE as the contained trees may be using locals that are no longer present in registers. @TIHan ran into the same problem in #76731 (before that, I did not realize this would be a problem). It would probably be possible to teach LSRA about this so that it could insert resolution after the JTRUE instead when necessary (by splitting the edge -- already done in some cases). I think your suggestion is fine to make forward progress, assuming you validate that the AND comes right before the JTRUE, in the same way that other relops are handled. |
A few months back, I spent about a half day trying to do this, then realised it was trickier than expected and gave up.
ok, will go this way then. Thanks. |
ca3e7b2
to
61df691
Compare
61df691
to
0a34fac
Compare
e86d22e
to
3823f74
Compare
3823f74
to
65e3b1e
Compare
LSRA actually already handles the situation for other cases so it does not look that complicated to extend it: runtime/src/coreclr/jit/lsra.cpp Lines 7655 to 7726 in 9b76c28
|
In the end not containing anything inside the JTRUE made it work fine. The Been distracted elsewhere, but this is looking good now, so I'll be taking it out of draft shorty.... |
That's fine, this was also more of a general note regarding #76731 -- I just stumbled upon that LSRA code today. |
65e3b1e
to
3aa62af
Compare
Taking this patch out of draft. It needs some more test cases in compareAnd3Chains, but otherwise I'm happy with it now. optOptimizeCompareChainCondBlock() merges two compares into an AND chain. Adding cases that are ANDed together would require a little more thought as it doesn't quite fit. You'd either need an OR or ANDNOT chains or epiologues mid block - I've not fully considered how it'd work.
The rest of the changes are to support JTRUE having an AND child. In particular, AND chains can only be reversed by adding a NOT on the front of the chain. The changes in fgopt and ifconversion make sure that AND chains are never reversed. Getting the chain code working in lowering/codegen was a little fiddly. I've taken care to avoid code size regressions. In particular, avoiding optimising where the code would normally generate a CBZ or TST instruction. The handful of regressions remaining are due to the immediate size in a CCMP instruction being smaller than a CMP instruction. |
Yes, that's completely fine -- thanks for checking the regressions in this level of detail. |
Ok, in that case I think this patch is ready then. Looks like the failing test is a known error. And I think I've addressed all the review comments. |
/azp run runtime-coreclr jitstress, runtime-coreclr libraries-jitstress, Fuzzlyn |
Azure Pipelines successfully started running 3 pipeline(s). |
src/coreclr/jit/optimizer.cpp
Outdated
int op1Cost = cond1->GetCostEx(); | ||
int op2Cost = cond2->GetCostEx(); | ||
int maxOp1Cost = op1IsCondChain ? 35 : 7; | ||
int maxOp2Cost = op2IsCondChain ? 35 : 7; | ||
|
||
// Cost to allow for chain size of three. | ||
if (op1Cost > maxOp1Cost || op2Cost > maxOp2Cost) | ||
{ | ||
JITDUMP("Skipping CompareChainCond that will evaluate conditions unconditionally at costs %d,%d\n", op1Cost, | ||
op2Cost); | ||
return false; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did you end up adding some handling for potentially expensive trees somewhere else?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're iterating forwards through the blocks now, so that I think gets rid of that issue:
if (expensive1 || cheap1 )
- both of expensive1 and cheap1 would be checked against cost 7.
if (expensive1 || cheap1 || cheap2 )
- First iteration both of expensive1 and cheap1 would be checked against cost 7.
- If first iteration passed, then second pass the combined (expensive1+cheap1) would be checked against 35 and cheap2 against 7.
- If first iteration failed, then both cheap1 and cheap2 would be checked against 7.
if (cheap1 || cheap2 || expensive1)
- both cheap1 and cheap2 would be checked against cost 7. Which would pass.
- Then (cheap1+cheap2) against 35 and expensive1 against 7.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's odd to me that it's possible to "defeat" the check:
[MethodImpl(MethodImplOptions.NoInlining)]
public static int Foo(int a, int b)
{
if (a > 10 && (((a * a * a * a * a > 3) & (a == 20)) != false))
{
return 42;
}
return 100;
}
this produces:
G_M63574_IG01: ;; offset=0000H
A9BF7BFD stp fp, lr, [sp, #-0x10]!
910003FD mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
G_M63574_IG02: ;; offset=0008H
1B007C01 mul w1, w0, w0
1B007C21 mul w1, w1, w0
1B007C21 mul w1, w1, w0
1B007C21 mul w1, w1, w0
52800C82 mov w2, #100
52800543 mov w3, #42
71000C3F cmp w1, #3
7A54C800 ccmp w0, #20, 0, gt
7A4A080E ccmp w0, #10, nzc, eq
1A83D040 csel w0, w2, w3, le
;; size=40 bbWeight=1 PerfScore 11.00
G_M63574_IG03: ;; offset=0030H
A8C17BFD ldp fp, lr, [sp], #0x10
D65F03C0 ret lr
;; size=8 bbWeight=1 PerfScore 2.00
Of course it's a very constructed example but I would be afraid that there are more natural looking examples.
I suppose to fix this you would need the recursive walk you wanted to avoid. I don't think that's expensive -- the code below calls gtSetEvalOrder
and fgSetStmtSeq
and they both end up doing these kinds of full tree walks anyway -- but it's not as elegant. It would make me feel a bit more at ease, however, to find and limit the cost of each "leaf" in the compare chain.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can leave it as is, it's probably fine in practice. Will leave it up to you.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The cost of (((a * a * a * a * a > 3) & (a == 20))
is 35, which is on the limit for combing with the a > 10
Whereas the cost after combining, for example, op1 > 3 && op2 == 10 && op3 >= 12
is 32. (It's fairly high because of the two lots of EQ(AND,0)).
Looking at this again, a limit of 35 is probably too high as it's allowing 4 items to chain together. I should probably drop it to 31 to prevent op1 > 3 && op2 == 10 && op3 >= 12
combing with anything else.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With the new costing it'll still allow like (((a * a * a * a > 3) & (a == 20))
(ie one less than you had before).
To improve it, further I think we'd have to somehow remove all the EQ(AND,0) blocks from the costings (as we know they'll vanish during lowering). Not sure it's worth it, so happy to leave as is now.
Those are all looking good - just X86 failures, which this patch doesn't touch |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with a few suggestions. Very nice work, great to see this.
With the max cost reduced the diffs haven't changed much: Diffs are based on 1,496,829 contexts (401,888 MinOpts, 1,094,941 FullOpts). MISSED contexts: base: 86 (0.01%), diff: 88 (0.01%) Overall (-147,888 bytes)
MinOpts (+0 bytes)
FullOpts (-147,888 bytes)
Example diffslibraries_tests.pmi.linux.arm64.checked.mch-20 (-35.71%) : 199251.dasm - System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool@@ -7,59 +7,43 @@
; 0 inlinees with PGO data; 1 single block inlinees; 0 inlinees without PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 4 ) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 5, 5 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M12476_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M12476_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M12476_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M12476_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov w1, #1
cmp w0, #1
- beq G_M12476_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M12476_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #2
- beq G_M12476_IG04
- cmp w0, #4
- bne G_M12476_IG06
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M12476_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M12476_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #2, z, ne
+ ccmp w0, #4, z, ne
+ csel w0, w1, wzr, ne
+ ;; size=20 bbWeight=1 PerfScore 2.50
+G_M12476_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M12476_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M12476_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 56, prolog size 8, PerfScore 12.60, instruction count 14, allocated bytes for code 56 (MethodHash=d337cf43) for method System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool
+; Total bytes of code 36, prolog size 8, PerfScore 9.60, instruction count 9, allocated bytes for code 36 (MethodHash=d337cf43) for method System.Runtime.InteropServices.Tests.LibObjC:SupportedOnPlatform(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 14 (0x0000e) Actual length = 56 (0x000038)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-20 (-35.71%) : 73785.dasm - ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this@@ -8,58 +8,44 @@
;
;* V00 this [V00 ] ( 0, 0 ) ref -> zero-ref this class-hnd single-def
; V01 arg1 [V01,T00] ( 3, 3 ) int -> x1 single-def
-; V02 arg2 [V02,T01] ( 3, 2.50) int -> x2 single-def
-; V03 arg3 [V03,T02] ( 3, 2.50) int -> x3 single-def
+; V02 arg2 [V02,T01] ( 3, 3 ) int -> x2 single-def
+; V03 arg3 [V03,T02] ( 3, 3 ) int -> x3 single-def
;# V04 OutArgs [V04 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M39116_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M39116_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M39116_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w1, #2
- bne G_M39116_IG05
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M39116_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w2, #1
- bne G_M39116_IG05
- cmp w3, #3
- bne G_M39116_IG05
- mov w0, wzr
- ;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M39116_IG04: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M39116_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M39116_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M39116_IG06: ; bbWeight=0.50, epilog, nogc, extend
+ cmp w1, #2
+ ccmp w2, #1, 0, eq
+ ccmp w3, #3, 0, eq
+ csel w0, w0, wzr, ne
+ ;; size=20 bbWeight=1 PerfScore 2.50
+G_M39116_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 56, prolog size 8, PerfScore 12.60, instruction count 14, allocated bytes for code 56 (MethodHash=7fce6733) for method ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this
+; Total bytes of code 36, prolog size 8, PerfScore 9.60, instruction count 9, allocated bytes for code 36 (MethodHash=7fce6733) for method ManagedTests.DynamicCSharp.Conformance.dynamic.namedandoptional.usage.basic.usage13d.usage13d.Parent:Foo(int,int,int):int:this
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 14 (0x0000e) Actual length = 56 (0x000038)
+ Function Length : 9 (0x00009) Actual length = 36 (0x000024)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-33.33%) : 107909.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool@@ -6,57 +6,42 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 4, 3.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 4, 4 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M56201_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M56201_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M56201_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov w1, #1
cmp w0, #4
- bls G_M56201_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #9
- bne G_M56201_IG06
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M56201_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #9, z, hi
+ csel w0, wzr, w1, ne
+ ;; size=16 bbWeight=1 PerfScore 2.00
+G_M56201_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M56201_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
+4 (+1.14%) : 315758.dasm - Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:b__92_1(long,long):System.Object[]:this@@ -100,53 +100,50 @@ G_M18778_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
bl CORINFO_HELP_ASSIGN_REF
; gcrRegs -[x0 x15]
; byrRegs -[x14]
- cbz x19, G_M18778_IG08
+ cbz x19, G_M18778_IG06
;; size=152 bbWeight=1 PerfScore 27.50
G_M18778_IG03: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
+ mov x0, #0xD1FFAB1E
cmn x20, #1
- bne G_M18778_IG04
- mov x0, #0xD1FFAB1E
- cmp x19, x0
- beq G_M18778_IG07
- ;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M18778_IG04: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
- mov x0, #0xD1FFAB1E
- cmp x20, x0
- bne G_M18778_IG05
- cmn x19, #1
- beq G_M18778_IG07
- ;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M18778_IG05: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref, isz
+ ccmp x19, x0, 0, eq
+ cset x0, eq
+ mov x2, #0xD1FFAB1E
+ movn x3, #0
+ cmp x20, x2
+ ccmp x19, x3, 0, eq
+ cset x2, eq
+ orr w0, w0, w2
+ cbnz w0, G_M18778_IG05
mov x22, x21
; gcrRegs +[x22]
cmp x19, #0
- beq G_M18778_IG12
+ beq G_M18778_IG10
cmn x19, #1
- bne G_M18778_IG06
+ bne G_M18778_IG04
adds xzr, x1, x1
- bne G_M18778_IG06
- bvs G_M18778_IG11
- ;; size=32 bbWeight=0.50 PerfScore 3.00
-G_M18778_IG06: ; bbWeight=0.50, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
+ bne G_M18778_IG04
+ bvs G_M18778_IG09
+ ;; size=76 bbWeight=0.50 PerfScore 6.00
+G_M18778_IG04: ; bbWeight=0.50, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
sdiv x0, x1, x19
cmp x0, x20
cset x19, eq
- b G_M18778_IG09
+ b G_M18778_IG07
;; size=16 bbWeight=0.50 PerfScore 10.50
-G_M18778_IG07: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
+G_M18778_IG05: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
; gcrRegs -[x22]
mov x22, x21
; gcrRegs +[x22]
mov w19, wzr
- b G_M18778_IG09
+ b G_M18778_IG07
;; size=12 bbWeight=0.50 PerfScore 1.00
-G_M18778_IG08: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
+G_M18778_IG06: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
; gcrRegs -[x22]
mov x22, x21
; gcrRegs +[x22]
mov w19, #1
;; size=8 bbWeight=0.50 PerfScore 0.50
-G_M18778_IG09: ; bbWeight=1, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
+G_M18778_IG07: ; bbWeight=1, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E
movk x0, #0xD1FFAB1E LSL #16
movk x0, #0xD1FFAB1E LSL #32
@@ -162,22 +159,22 @@ G_M18778_IG09: ; bbWeight=1, gcrefRegs=600000 {x21 x22}, byrefRegs=0000 {
mov x0, x21
; gcrRegs +[x0]
;; size=40 bbWeight=1 PerfScore 6.50
-G_M18778_IG10: ; bbWeight=1, epilog, nogc, extend
+G_M18778_IG08: ; bbWeight=1, epilog, nogc, extend
ldp x21, x22, [sp, #0x20]
ldp x19, x20, [sp, #0x10]
ldp fp, lr, [sp], #0x30
ret lr
;; size=16 bbWeight=1 PerfScore 4.00
-G_M18778_IG11: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M18778_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; gcrRegs -[x0 x21]
bl CORINFO_HELP_OVERFLOW
;; size=4 bbWeight=0 PerfScore 0.00
-G_M18778_IG12: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M18778_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
bl CORINFO_HELP_THROWDIVZERO
brk_unix #0
;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 352, prolog size 16, PerfScore 96.20, instruction count 88, allocated bytes for code 352 (MethodHash=910fb6a5) for method Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int64TestMultiplications>b__92_1(long,long):System.Object[]:this
+; Total bytes of code 356, prolog size 16, PerfScore 96.10, instruction count 89, allocated bytes for code 356 (MethodHash=910fb6a5) for method Microsoft.CSharp.RuntimeBinder.Tests.IntegerBinaryOperationTests+<>c:<get_Int64TestMultiplications>b__92_1(long,long):System.Object[]:this
; ============================================================
Unwind Info:
@@ -188,7 +185,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 88 (0x00058) Actual length = 352 (0x000160)
+ Function Length : 89 (0x00059) Actual length = 356 (0x000164)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+2.44%) : 110651.dasm - Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool@@ -39,57 +39,55 @@ G_M46472_IG02: ; bbWeight=1, gcrefRegs=0001 {x0}, byrefRegs=0008 {x3}, by
ldr w4, [x0, #0x08]
add w5, w1, #1
cmp w4, w5
- ble G_M46472_IG07
+ ble G_M46472_IG05
;; size=16 bbWeight=1 PerfScore 5.00
G_M46472_IG03: ; bbWeight=0.50, gcrefRegs=0001 {x0}, byrefRegs=0008 {x3}, byref, isz
cmp w1, w4
- bhs G_M46472_IG11
+ bhs G_M46472_IG09
add x0, x0, #12
; gcrRegs -[x0]
; byrRegs +[x0]
ldrh w6, [x0, w1, UXTW #2]
cmp w5, w4
- bhs G_M46472_IG11
+ bhs G_M46472_IG09
ldrh w0, [x0, w5, UXTW #2]
; byrRegs -[x0]
+ mov w4, #123
cmp w6, #123
- bne G_M46472_IG04
- cmp w0, #123
- beq G_M46472_IG05
- ;; size=44 bbWeight=0.50 PerfScore 6.25
-G_M46472_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, byref, isz
+ ccmp w0, w4, 0, eq
+ cset x4, ne
+ mov w5, #125
cmp w6, #125
- bne G_M46472_IG07
- cmp w0, #125
- bne G_M46472_IG07
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M46472_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, byref, isz
+ ccmp w0, w5, 0, eq
+ cset x0, ne
+ tst w4, w0
+ bne G_M46472_IG05
add w0, w2, w1
cmp w0, #0
- blt G_M46472_IG09
+ blt G_M46472_IG07
add w1, w0, #2
cmp w1, w0
- blt G_M46472_IG10
+ blt G_M46472_IG08
str w0, [x3]
mov w0, #2
str w0, [x3, #0x04]
mov w0, #1
- ;; size=40 bbWeight=0.50 PerfScore 3.50
+ ;; size=108 bbWeight=0.50 PerfScore 11.00
+G_M46472_IG04: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x19, [sp, #0x18]
+ ldp fp, lr, [sp], #0x20
+ ret lr
+ ;; size=12 bbWeight=0.50 PerfScore 2.00
+G_M46472_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, gcvars, byref
+ str xzr, [x3]
+ mov w0, wzr
+ ;; size=8 bbWeight=0.50 PerfScore 0.75
G_M46472_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldr x19, [sp, #0x18]
ldp fp, lr, [sp], #0x20
ret lr
;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46472_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0008 {x3}, gcvars, byref
- str xzr, [x3]
- mov w0, wzr
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M46472_IG08: ; bbWeight=0.50, epilog, nogc, extend
- ldr x19, [sp, #0x18]
- ldp fp, lr, [sp], #0x20
- ret lr
- ;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M46472_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M46472_IG07: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
; byrRegs -[x3]
movz x0, #0xD1FFAB1E
movk x0, #0xD1FFAB1E LSL #16
@@ -120,7 +118,7 @@ G_M46472_IG09: ; bbWeight=0, gcVars=0000000000000000 {}, gcrefRegs=0000 {
bl CORINFO_HELP_THROW
; gcrRegs -[x0 x19]
;; size=80 bbWeight=0 PerfScore 0.00
-G_M46472_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46472_IG08: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movz x0, #0xD1FFAB1E
movk x0, #0xD1FFAB1E LSL #16
movk x0, #0xD1FFAB1E LSL #32
@@ -150,12 +148,12 @@ G_M46472_IG10: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
bl CORINFO_HELP_THROW
; gcrRegs -[x0 x19]
;; size=80 bbWeight=0 PerfScore 0.00
-G_M46472_IG11: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46472_IG09: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
bl CORINFO_HELP_RNGCHKFAIL
brk_unix #0
;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 328, prolog size 12, PerfScore 56.30, instruction count 82, allocated bytes for code 328 (MethodHash=3eb14a77) for method Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
+; Total bytes of code 336, prolog size 12, PerfScore 56.85, instruction count 84, allocated bytes for code 336 (MethodHash=3eb14a77) for method Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars.AbstractVirtualCharService:IsLegalBraceEscape(System.String,int,int,byref):bool
; ============================================================
Unwind Info:
@@ -166,7 +164,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 82 (0x00052) Actual length = 328 (0x000148)
+ Function Length : 84 (0x00054) Actual length = 336 (0x000150)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+4.76%) : 231893.dasm - NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool@@ -24,33 +24,33 @@ G_M22473_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=12 bbWeight=1 PerfScore 2.00
G_M22473_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp w1, #90
- ble G_M22473_IG06
+ ble G_M22473_IG05
;; size=8 bbWeight=0.50 PerfScore 0.75
G_M22473_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w0, #122
cmp w1, #97
- blt G_M22473_IG05
- cmp w1, #122
- ble G_M22473_IG06
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M22473_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w1, w0, 0, ge
+ cset x0, gt
+ mov w2, #57
cmp w1, #48
- blt G_M22473_IG08
- cmp w1, #57
- bgt G_M22473_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M22473_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ccmp w1, w2, 0, ge
+ cset x2, gt
+ tst w0, w2
+ bne G_M22473_IG07
+ ;; size=40 bbWeight=0.50 PerfScore 2.75
+G_M22473_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22473_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M22473_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M22473_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
+G_M22473_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
cmp w1, #58
- bhi G_M22473_IG10
+ bhi G_M22473_IG09
sub w0, w1, #32
cmp w0, #15
- bhi G_M22473_IG09
+ bhi G_M22473_IG08
mov w0, w0
adr x1, [@RWD00]
ldr w1, [x1, x0, LSL #2]
@@ -58,50 +58,50 @@ G_M22473_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
add x1, x1, x2
br x1
;; size=44 bbWeight=0.50 PerfScore 4.75
-G_M22473_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M22473_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp w1, #58
- beq G_M22473_IG11
- b G_M22473_IG13
+ beq G_M22473_IG10
+ b G_M22473_IG12
;; size=12 bbWeight=0.50 PerfScore 1.25
-G_M22473_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M22473_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w0, #63
cmp w1, #61
- beq G_M22473_IG11
- cmp w1, #63
- bne G_M22473_IG13
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M22473_IG11: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ccmp w1, w0, z, ne
+ bne G_M22473_IG12
+ ;; size=16 bbWeight=0.50 PerfScore 1.25
+G_M22473_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22473_IG12: ; bbWeight=0.50, epilog, nogc, extend
+G_M22473_IG11: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M22473_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M22473_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22473_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M22473_IG13: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-RWD00 dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG13 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
- dd G_M22473_IG11 - G_M22473_IG02
+RWD00 dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG12 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
+ dd G_M22473_IG10 - G_M22473_IG02
-; Total bytes of code 168, prolog size 8, PerfScore 35.30, instruction count 42, allocated bytes for code 168 (MethodHash=95b1a836) for method NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
+; Total bytes of code 176, prolog size 8, PerfScore 35.60, instruction count 44, allocated bytes for code 176 (MethodHash=95b1a836) for method NuGet.Packaging.Signing.DerEncoding.DerEncoder:IsPrintableStringCharacter(ushort):bool
; ============================================================
Unwind Info:
@@ -112,7 +112,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 42 (0x0002a) Actual length = 168 (0x0000a8)
+ Function Length : 44 (0x0002c) Actual length = 176 (0x0000b0)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
libraries.pmi.linux.arm64.checked.mch-20 (-38.46%) : 86103.dasm - ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int@@ -6,56 +6,42 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 6, 4.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 6, 6 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M18504_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M18504_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M18504_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M18504_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
cmp w0, #3
- beq G_M18504_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M18504_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #7
- beq G_M18504_IG04
- cmp w0, #10
- bne G_M18504_IG05
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M18504_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, epilog, nogc
+ ccmp w0, #7, z, ne
+ ccmp w0, #10, z, ne
+ csel w0, wzr, w0, ne
+ ;; size=16 bbWeight=1 PerfScore 2.00
+G_M18504_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M18504_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M18504_IG06: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 52, prolog size 8, PerfScore 11.95, instruction count 13, allocated bytes for code 52 (MethodHash=2aa8b7b7) for method ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=2aa8b7b7) for method ILCompiler.DependencyAnalysis.Relocation:GetFileRelocationType(int):int
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 13 (0x0000d) Actual length = 52 (0x000034)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-33.33%) : 179075.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool@@ -6,57 +6,42 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 4, 3.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 4, 4 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M35125_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M35125_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M35125_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M35125_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov w1, #1
cmp w0, #3
- beq G_M35125_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M35125_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #4
- bne G_M35125_IG06
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M35125_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M35125_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #4, z, ne
+ csel w0, wzr, w1, ne
+ ;; size=16 bbWeight=1 PerfScore 2.00
+G_M35125_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M35125_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M35125_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=210876ca) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=210876ca) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:IsFloatingPoint(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-20 (-33.33%) : 153610.dasm - ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool@@ -6,60 +6,44 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 4 ) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 5, 5 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M45715_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M45715_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M45715_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M45715_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
sub w1, w0, #12
+ mov w2, #1
cmp w1, #2
- bls G_M45715_IG04
- ;; size=12 bbWeight=1 PerfScore 2.00
-G_M45715_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #16
- beq G_M45715_IG04
- cmp w0, #29
- bne G_M45715_IG06
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M45715_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45715_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #16, z, hi
+ ccmp w0, #29, z, ne
+ csel w0, wzr, w2, ne
+ ;; size=24 bbWeight=1 PerfScore 3.00
+G_M45715_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M45715_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45715_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 60, prolog size 8, PerfScore 13.50, instruction count 15, allocated bytes for code 60 (MethodHash=6fda4d6c) for method ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
+; Total bytes of code 40, prolog size 8, PerfScore 10.50, instruction count 10, allocated bytes for code 40 (MethodHash=6fda4d6c) for method ILCompiler.Reflection.ReadyToRun.StringBuilderExtensions:NeedsEscaping(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 15 (0x0000f) Actual length = 60 (0x00003c)
+ Function Length : 10 (0x0000a) Actual length = 40 (0x000028)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
+8 (+5.71%) : 218007.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool@@ -9,8 +9,8 @@
;
; V00 arg0 [V00,T02] ( 5, 3.96) ref -> x0 class-hnd single-def
; V01 loc0 [V01,T05] ( 2, 1 ) ref -> x0 class-hnd single-def
-; V02 loc1 [V02,T01] ( 5, 16.50) int -> x2
-; V03 loc2 [V03,T00] ( 7, 18 ) ushort -> x3
+; V02 loc1 [V02,T00] ( 5, 16.50) int -> x2
+; V03 loc2 [V03,T01] ( 7, 16 ) ushort -> x3
;# V04 OutArgs [V04 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;* V05 tmp1 [V05,T06] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
; V06 cse0 [V06,T03] ( 5, 5.92) int -> x1 "CSE - aggressive"
@@ -45,54 +45,50 @@ G_M10687_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
; gcrRegs +[x0]
mov w2, wzr
cmp w1, #0
- ble G_M10687_IG13
+ ble G_M10687_IG10
add x0, x0, #12
; gcrRegs -[x0]
; byrRegs +[x0]
;; size=16 bbWeight=0.50 PerfScore 1.25
G_M10687_IG08: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
ldrh w3, [x0, w2, UXTW #2]
+ mov w4, #57
cmp w3, #48
- blt G_M10687_IG10
- ;; size=12 bbWeight=4 PerfScore 18.00
-G_M10687_IG09: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
- cmp w3, #57
- ble G_M10687_IG12
- ;; size=8 bbWeight=2 PerfScore 3.00
-G_M10687_IG10: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w4, 0, ge
+ cset x4, le
+ mov w5, #102
cmp w3, #97
- blt G_M10687_IG11
- cmp w3, #102
- ble G_M10687_IG12
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG11: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w5, 0, ge
+ cset x5, le
+ orr w4, w4, w5
+ cbnz w4, G_M10687_IG09
+ mov w4, #70
cmp w3, #65
- blt G_M10687_IG15
- cmp w3, #70
- bgt G_M10687_IG15
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG12: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w4, 0, ge
+ bgt G_M10687_IG12
+ ;; size=60 bbWeight=4 PerfScore 44.00
+G_M10687_IG09: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
add w2, w2, #1
cmp w1, w2
bgt G_M10687_IG08
;; size=12 bbWeight=4 PerfScore 8.00
-G_M10687_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M10687_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[x0]
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG11: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M10687_IG15: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M10687_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG16: ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG13: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 140, prolog size 8, PerfScore 64.84, instruction count 35, allocated bytes for code 140 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
+; Total bytes of code 148, prolog size 8, PerfScore 76.64, instruction count 37, allocated bytes for code 148 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
; ============================================================
Unwind Info:
@@ -103,7 +99,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ Function Length : 37 (0x00025) Actual length = 148 (0x000094)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+5.71%) : 179103.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool@@ -9,8 +9,8 @@
;
; V00 arg0 [V00,T02] ( 5, 3.96) ref -> x0 class-hnd single-def
; V01 loc0 [V01,T05] ( 2, 1 ) ref -> x0 class-hnd single-def
-; V02 loc1 [V02,T01] ( 5, 16.50) int -> x2
-; V03 loc2 [V03,T00] ( 7, 18 ) ushort -> x3
+; V02 loc1 [V02,T00] ( 5, 16.50) int -> x2
+; V03 loc2 [V03,T01] ( 7, 16 ) ushort -> x3
;# V04 OutArgs [V04 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;* V05 tmp1 [V05,T06] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
; V06 cse0 [V06,T03] ( 5, 5.92) int -> x1 "CSE - aggressive"
@@ -45,54 +45,50 @@ G_M10687_IG07: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
; gcrRegs +[x0]
mov w2, wzr
cmp w1, #0
- ble G_M10687_IG13
+ ble G_M10687_IG10
add x0, x0, #12
; gcrRegs -[x0]
; byrRegs +[x0]
;; size=16 bbWeight=0.50 PerfScore 1.25
G_M10687_IG08: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
ldrh w3, [x0, w2, UXTW #2]
+ mov w4, #57
cmp w3, #48
- blt G_M10687_IG10
- ;; size=12 bbWeight=4 PerfScore 18.00
-G_M10687_IG09: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
- cmp w3, #57
- ble G_M10687_IG12
- ;; size=8 bbWeight=2 PerfScore 3.00
-G_M10687_IG10: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w4, 0, ge
+ cset x4, le
+ mov w5, #102
cmp w3, #97
- blt G_M10687_IG11
- cmp w3, #102
- ble G_M10687_IG12
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG11: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w5, 0, ge
+ cset x5, le
+ orr w4, w4, w5
+ cbnz w4, G_M10687_IG09
+ mov w4, #70
cmp w3, #65
- blt G_M10687_IG15
- cmp w3, #70
- bgt G_M10687_IG15
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG12: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w4, 0, ge
+ bgt G_M10687_IG12
+ ;; size=60 bbWeight=4 PerfScore 44.00
+G_M10687_IG09: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
add w2, w2, #1
cmp w1, w2
bgt G_M10687_IG08
;; size=12 bbWeight=4 PerfScore 8.00
-G_M10687_IG13: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M10687_IG10: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[x0]
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG14: ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG11: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M10687_IG15: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M10687_IG12: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG16: ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG13: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 140, prolog size 8, PerfScore 64.84, instruction count 35, allocated bytes for code 140 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
+; Total bytes of code 148, prolog size 8, PerfScore 76.64, instruction count 37, allocated bytes for code 148 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
; ============================================================
Unwind Info:
@@ -103,7 +99,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ Function Length : 37 (0x00025) Actual length = 148 (0x000094)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 191794.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool@@ -23,39 +23,37 @@ G_M29165_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=12 bbWeight=1 PerfScore 2.00
G_M29165_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp w0, #90
- ble G_M29165_IG08
+ ble G_M29165_IG06
;; size=8 bbWeight=0.50 PerfScore 0.75
G_M29165_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w1, #122
cmp w0, #97
- blt G_M29165_IG05
- cmp w0, #122
- ble G_M29165_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, w1, 0, ge
+ cset x1, le
+ mov w2, #57
+ mov w3, #95
cmp w0, #48
- blt G_M29165_IG06
- cmp w0, #57
- ble G_M29165_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #95
- beq G_M29165_IG08
+ ccmp w0, w2, 0, ge
+ ccmp w0, w3, z, gt
+ cset x2, eq
+ orr w1, w1, w2
+ cbnz w1, G_M29165_IG06
cmp w0, #45
cset x0, eq
- ;; size=16 bbWeight=0.50 PerfScore 1.25
+ ;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M29165_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ldp fp, lr, [sp], #0x10
+ ret lr
+ ;; size=8 bbWeight=0.50 PerfScore 1.00
+G_M29165_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ mov w0, #1
+ ;; size=4 bbWeight=0.50 PerfScore 0.25
G_M29165_IG07: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M29165_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M29165_IG09: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 96, prolog size 8, PerfScore 20.35, instruction count 24, allocated bytes for code 96 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
+; Total bytes of code 104, prolog size 8, PerfScore 20.65, instruction count 26, allocated bytes for code 104 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
; ============================================================
Unwind Info:
@@ -66,7 +64,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 24 (0x00018) Actual length = 96 (0x000060)
+ Function Length : 26 (0x0001a) Actual length = 104 (0x000068)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
benchmarks.run.linux.arm64.checked.mch-24 (-27.27%) : 1131.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool@@ -28,43 +28,31 @@ G_M46525_IG04: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M46525_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, isz
- cmp w1, #22
- beq G_M46525_IG06
- cmp w1, #24
- beq G_M46525_IG06
- cmp w1, #25
- beq G_M46525_IG06
- cmp w1, #28
- bne G_M46525_IG08
- ;; size=32 bbWeight=0.50 PerfScore 3.00
-G_M46525_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46525_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M46525_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M46525_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M46525_IG09: ; bbWeight=0.50, epilog, nogc, extend
+ cmp w1, #22
+ ccmp w1, #24, z, ne
+ ccmp w1, #25, z, ne
+ ccmp w1, #28, z, ne
+ csel w0, wzr, w0, ne
+ ;; size=24 bbWeight=0.50 PerfScore 1.50
+G_M46525_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 88, prolog size 8, PerfScore 19.05, instruction count 22, allocated bytes for code 88 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
+; Total bytes of code 64, prolog size 8, PerfScore 13.65, instruction count 16, allocated bytes for code 64 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 3
+ Epilog Count : 2
E bit : 0
X bit : 0
Vers : 0
- Function Length : 22 (0x00016) Actual length = 88 (0x000058)
+ Function Length : 16 (0x00010) Actual length = 64 (0x000040)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -72,9 +60,6 @@ Unwind Info:
---- Scope 1
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 2
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-25.00%) : 20961.dasm - Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool@@ -6,61 +6,46 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 5, 4 ) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 5, 5 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M45553_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M45553_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M45553_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M45553_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
sub w1, w0, #1
+ sub w2, w0, #0xD1FFAB1E
+ mov w3, #0xD1FFAB1E
+ mov w4, #1
cmp w1, #6
- bls G_M45553_IG04
- ;; size=12 bbWeight=1 PerfScore 2.00
-G_M45553_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- sub w1, w0, #0xD1FFAB1E
- cmp w1, #2
- bls G_M45553_IG04
- cmp w0, #0xD1FFAB1E
- bne G_M45553_IG06
- ;; size=20 bbWeight=0.50 PerfScore 1.75
-G_M45553_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45553_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w2, #2, z, hi
+ ccmp w0, w3, z, hi
+ csel w0, wzr, w4, ne
+ ;; size=32 bbWeight=1 PerfScore 4.00
+G_M45553_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M45553_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M45553_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 64, prolog size 8, PerfScore 14.15, instruction count 16, allocated bytes for code 64 (MethodHash=a2564e0e) for method Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool
+; Total bytes of code 48, prolog size 8, PerfScore 12.30, instruction count 12, allocated bytes for code 48 (MethodHash=a2564e0e) for method Microsoft.CodeAnalysis.CSharp.LanguageVersionExtensionsInternal:IsValid(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 16 (0x00010) Actual length = 64 (0x000040)
+ Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-25.00%) : 21112.dasm - Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool@@ -6,61 +6,46 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 4, 3.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 4, 4 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M60755_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M60755_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M60755_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M60755_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
movn w1, #0xD1FFAB1E
add w1, w0, w1
+ movn w2, #0xD1FFAB1E
+ add w0, w0, w2
+ mov w2, #1
cmp w1, #1
- bls G_M60755_IG04
- ;; size=16 bbWeight=1 PerfScore 2.50
-G_M60755_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- movn w1, #0xD1FFAB1E
- add w0, w0, w1
- cmp w0, #2
- bhi G_M60755_IG06
- ;; size=16 bbWeight=0.50 PerfScore 1.25
-G_M60755_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M60755_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #2, z, hi
+ csel w0, wzr, w2, hi
+ ;; size=32 bbWeight=1 PerfScore 4.00
+G_M60755_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M60755_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M60755_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 64, prolog size 8, PerfScore 14.15, instruction count 16, allocated bytes for code 64 (MethodHash=781f12ac) for method Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
+; Total bytes of code 48, prolog size 8, PerfScore 12.30, instruction count 12, allocated bytes for code 48 (MethodHash=781f12ac) for method Microsoft.CodeAnalysis.CSharp.ErrorFacts:IsHidden(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 16 (0x00010) Actual length = 64 (0x000040)
+ Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
+20 (+0.33%) : 7651.dasm - Jil.Deserialize.Methods:SkipWithLeadChar(System.IO.TextReader,int)@@ -26,7 +26,7 @@
; V16 tmp11 [V16,T52] ( 3, 0 ) ref -> x25 class-hnd exact single-def "NewObj constructor temp"
; V17 tmp12 [V17,T25] ( 4, 16 ) int -> x0 "Inline stloc first use temp"
; V18 tmp13 [V18,T12] ( 14, 56 ) int -> x0 "Inline stloc first use temp"
-; V19 tmp14 [V19,T09] ( 32, 82 ) int -> x24 "Inline stloc first use temp"
+; V19 tmp14 [V19,T04] ( 32,100 ) int -> x24 "Inline stloc first use temp"
; V20 tmp15 [V20,T53] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
; V21 tmp16 [V21,T54] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
; V22 tmp17 [V22,T55] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
@@ -44,7 +44,7 @@
;* V34 tmp29 [V34,T31] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
; V35 tmp30 [V35,T26] ( 4, 16 ) int -> x0 "Inline stloc first use temp"
; V36 tmp31 [V36,T13] ( 14, 56 ) int -> x0 "Inline stloc first use temp"
-; V37 tmp32 [V37,T10] ( 32, 82 ) int -> x26 "Inline stloc first use temp"
+; V37 tmp32 [V37,T05] ( 32,100 ) int -> x26 "Inline stloc first use temp"
; V38 tmp33 [V38,T63] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
; V39 tmp34 [V39,T64] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
; V40 tmp35 [V40,T65] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
@@ -57,11 +57,11 @@
;* V47 tmp42 [V47,T32] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
; V48 tmp43 [V48,T22] ( 6, 20.50) int -> x25 "Inline stloc first use temp"
;* V49 tmp44 [V49,T33] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V50 tmp45 [V50,T02] ( 6,116 ) int -> x25 "Inline stloc first use temp"
+; V50 tmp45 [V50,T06] ( 6,100 ) int -> x25 "Inline stloc first use temp"
;* V51 tmp46 [V51,T37] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V52 tmp47 [V52,T03] ( 6,116 ) int -> x25 "Inline stloc first use temp"
+; V52 tmp47 [V52,T07] ( 6,100 ) int -> x25 "Inline stloc first use temp"
;* V53 tmp48 [V53,T38] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V54 tmp49 [V54,T08] ( 4,112 ) int -> x0 "Inline stloc first use temp"
+; V54 tmp49 [V54,T03] ( 4,112 ) int -> x0 "Inline stloc first use temp"
; V55 tmp50 [V55,T18] ( 14, 28 ) int -> x0 "Inline stloc first use temp"
; V56 tmp51 [V56,T11] ( 32, 56 ) int -> x27 "Inline stloc first use temp"
; V57 tmp52 [V57,T71] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
@@ -72,22 +72,22 @@
; V62 tmp57 [V62,T76] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
; V63 tmp58 [V63,T77] ( 3, 0 ) ref -> x25 class-hnd exact "NewObj constructor temp"
; V64 tmp59 [V64,T78] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
-; V65 tmp60 [V65,T04] ( 6,120 ) int -> x25 "Inline stloc first use temp"
+; V65 tmp60 [V65,T02] ( 6,152 ) int -> x25 "Inline stloc first use temp"
;* V66 tmp61 [V66,T27] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V67 tmp62 [V67,T05] ( 6,116 ) int -> x25 "Inline stloc first use temp"
+; V67 tmp62 [V67,T08] ( 6,100 ) int -> x25 "Inline stloc first use temp"
;* V68 tmp63 [V68,T39] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
; V69 tmp64 [V69,T19] ( 8, 21 ) int -> x28 "Inline stloc first use temp"
; V70 tmp65 [V70,T79] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
;* V71 tmp66 [V71 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def "NewObj constructor temp"
; V72 tmp67 [V72,T23] ( 6, 20.50) int -> x28 "Inline stloc first use temp"
;* V73 tmp68 [V73,T34] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V74 tmp69 [V74,T06] ( 6,116 ) int -> x28 "Inline stloc first use temp"
+; V74 tmp69 [V74,T09] ( 6,100 ) int -> x28 "Inline stloc first use temp"
;* V75 tmp70 [V75,T40] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
-; V76 tmp71 [V76,T07] ( 6,116 ) int -> x28 "Inline stloc first use temp"
+; V76 tmp71 [V76,T10] ( 6,100 ) int -> x28 "Inline stloc first use temp"
;* V77 tmp72 [V77,T41] ( 0, 0 ) bool -> zero-ref "Inline return value spill temp"
; V78 tmp73 [V78,T16] ( 4, 36.50) bool -> x23 "Inline stloc first use temp"
; V79 tmp74 [V79,T29] ( 3, 8.50) bool -> x24 "Inline stloc first use temp"
-; V80 tmp75 [V80,T14] ( 7, 52 ) int -> x0 "Inline stloc first use temp"
+; V80 tmp75 [V80,T14] ( 7, 56 ) int -> x0 "Inline stloc first use temp"
; V81 tmp76 [V81,T24] ( 5, 20 ) int -> x0 "Inline stloc first use temp"
; V82 tmp77 [V82,T80] ( 3, 0 ) ref -> x20 class-hnd exact single-def "NewObj constructor temp"
; V83 tmp78 [V83,T81] ( 3, 0 ) ref -> x20 class-hnd exact "NewObj constructor temp"
@@ -165,7 +165,7 @@ G_M57414_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {},
; gcrRegs -[x0]
mov w23, w0
cmp w23, #117
- bne G_M57414_IG109
+ bne G_M57414_IG77
mov x0, x19
; gcrRegs +[x0]
ldr x1, [x22, #0x08]
@@ -173,7 +173,7 @@ G_M57414_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {},
; gcrRegs -[x0]
mov w23, w0
cmp w23, #108
- bne G_M57414_IG110
+ bne G_M57414_IG78
mov x0, x19
; gcrRegs +[x0]
ldr x1, [x22, #0x08]
@@ -181,17 +181,17 @@ G_M57414_IG03: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {},
; gcrRegs -[x0]
mov w23, w0
cmp w23, #108
- bne G_M57414_IG111
- b G_M57414_IG108
+ bne G_M57414_IG79
+ b G_M57414_IG76
;; size=84 bbWeight=0.50 PerfScore 13.25
G_M57414_IG04: ; bbWeight=0.50, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cmp w20, #34
beq G_M57414_IG05
cmp w20, #123
- beq G_M57414_IG27
+ beq G_M57414_IG19
cmp w20, #91
- beq G_M57414_IG86
- b G_M57414_IG85
+ beq G_M57414_IG59
+ b G_M57414_IG58
;; size=28 bbWeight=0.50 PerfScore 2.75
G_M57414_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
mov x0, x19
@@ -202,9 +202,9 @@ G_M57414_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
blr x1
; gcrRegs -[x0]
cmn w0, #1
- beq G_M57414_IG112
+ beq G_M57414_IG80
cmp w0, #34
- beq G_M57414_IG108
+ beq G_M57414_IG76
cmp w0, #92
bne G_M57414_IG05
mov x0, x19
@@ -213,73 +213,95 @@ G_M57414_IG05: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
blr x1
; gcrRegs -[x0]
cmn w0, #1
- beq G_M57414_IG113
+ beq G_M57414_IG81
cmp w0, #98
bgt G_M57414_IG09
cmp w0, #47
bgt G_M57414_IG07
+ mov w1, #47
cmp w0, #34
+ ccmp w0, w1, z, ne
beq G_M57414_IG05
- cmp w0, #47
- beq G_M57414_IG05
- ;; size=96 bbWeight=4 PerfScore 108.00
+ ;; size=96 bbWeight=4 PerfScore 106.00
G_M57414_IG06: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M57414_IG12
;; size=4 bbWeight=2 PerfScore 2.00
G_M57414_IG07: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ mov w1, #98
cmp w0, #92
+ ccmp w0, w1, z, ne
beq G_M57414_IG05
- cmp w0, #98
- beq G_M57414_IG05
- ;; size=16 bbWeight=4 PerfScore 12.00
+ ;; size=16 bbWeight=4 PerfScore 10.00
G_M57414_IG08: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M57414_IG12
;; size=4 bbWeight=2 PerfScore 2.00
G_M57414_IG09: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cmp w0, #110
bgt G_M57414_IG11
+ mov w1, #110
cmp w0, #102
+ ccmp w0, w1, z, ne
beq G_M57414_IG05
- cmp w0, #110
- beq G_M57414_IG05
- ;; size=24 bbWeight=4 PerfScore 18.00
+ ;; size=24 bbWeight=4 PerfScore 16.00
G_M57414_IG10: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref
b G_M57414_IG12
;; size=4 bbWeight=2 PerfScore 2.00
G_M57414_IG11: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ mov w1, #116
cmp w0, #114
+ ccmp w0, w1, z, ne
beq G_M57414_IG05
- cmp w0, #116
- beq G_M57414_IG05
- ;; size=16 bbWeight=4 PerfScore 12.00
+ ;; size=16 bbWeight=4 PerfScore 10.00
G_M57414_IG12: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
cmp w0, #117
- bne G_M57414_IG114
+ bne G_M57414_IG82
mov x0, x19
; gcrRegs +[x0]
ldr x1, [x22, #0x08]
blr x1
; gcrRegs -[x0]
mov w24, w0
+ mov w0, #57
cmp w24, #48
- blt G_M57414_IG14
- ;; size=32 bbWeight=4 PerfScore 32.00
-G_M57414_IG13: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
- cmp w24, #57
- ble G_M57414_IG16
- ;; size=8 bbWeight=2 PerfScore 3.00
-G_M57414_IG14: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ ccmp w24, w0, 0, ge
+ cset x0, le
+ mov w1, #70
cmp w24, #65
- blt G_M57414_IG15
- cmp w24, #70
- ble G_M57414_IG16
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M57414_IG15: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ ccmp w24, w1, 0, ge
+ cset x1, le
+ orr w0, w0, w1
+ cbnz w0, G_M57414_IG14
+ ;; size=64 bbWeight=4 PerfScore 48.00
+G_M57414_IG13: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ mov w0, #102
cmp w24, #97
- blt G_M57414_IG115
- cmp w24, #102
- bgt G_M57414_IG115
- ;; size=16 bbWeight=2 PerfScore 6.00
+ ccmp w24, w0, 0, ge
+ bgt G_M57414_IG83
+ ;; size=16 bbWeight=2 PerfScore 5.00
+G_M57414_IG14: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ mov x0, x19
+ ; gcrRegs +[x0]
+ ldr x1, [x22, #0x08]
+ blr x1
+ ; gcrRegs -[x0]
+ mov w24, w0
+ mov w0, #57
+ cmp w24, #48
+ ccmp w24, w0, 0, ge
+ cset x0, le
+ mov w1, #70
+ cmp w24, #65
+ ccmp w24, w1, 0, ge
+ cset x1, le
+ orr w0, w0, w1
+ cbnz w0, G_M57414_IG16
+ ;; size=56 bbWeight=4 PerfScore 42.00
+G_M57414_IG15: ; bbWeight=2, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
+ mov w0, #102
+ cmp w24, #97
+ ccmp w24, w0, 0, ge
+ bgt G_M57414_IG84
+ ;; size=16 bbWeight=2 PerfScore 5.00
G_M57414_IG16: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, byref, isz
mov x0, x19
; gcrRegs +[x0]
@@ -287,77 +309,47 @@ G_M57414_IG16: ; bbWeight=4, gcrefRegs=80000 {x19}, byrefRegs=0000 {}, by
blr x1
; gcrRegs -[x0]
mov w24, w0
+ mov w0, #57
cmp w24, #48
- blt G_M57414_IG18
- ;; size=24 bbWeight=4 PerfScore 26.00
+ ccmp w24, w0, 0, ge
+ cset x0, le
...
+16 (+2.76%) : 12117.dasm - ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this@@ -21,19 +21,20 @@
; V11 tmp5 [V11,T15] ( 3, 1.50) ref -> x0 single-def
; V12 tmp6 [V12,T03] ( 3, 6 ) int -> x0 "Inlining Arg"
;* V13 tmp7 [V13 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
-; V14 tmp8 [V14,T09] ( 3, 3 ) int -> x24 "Inlining Arg"
+; V14 tmp8 [V14,T09] ( 3, 3 ) int -> x25 "Inlining Arg"
;* V15 tmp9 [V15 ] ( 0, 0 ) int -> zero-ref "Inlining Arg"
; V16 tmp10 [V16,T10] ( 3, 3 ) int -> x19 "Inlining Arg"
; V17 tmp11 [V17,T12] ( 2, 2 ) ref -> x0 single-def "argument with side effect"
; V18 cse0 [V18,T07] ( 4, 3 ) long -> x24 "CSE - aggressive"
;
-; Lcl frame size = 0
+; Lcl frame size = 8
G_M33833_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
- stp fp, lr, [sp, #-0x40]!
- stp x19, x20, [sp, #0x10]
- stp x21, x22, [sp, #0x20]
- stp x23, x24, [sp, #0x30]
+ stp fp, lr, [sp, #-0x50]!
+ stp x19, x20, [sp, #0x18]
+ stp x21, x22, [sp, #0x28]
+ stp x23, x24, [sp, #0x38]
+ str x25, [sp, #0x48]
mov fp, sp
mov x21, x0
; byrRegs +[x21]
@@ -42,7 +43,7 @@ G_M33833_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
mov w23, w3
mov x20, x4
; gcrRegs +[x20]
- ;; size=40 bbWeight=1 PerfScore 7.00
+ ;; size=44 bbWeight=1 PerfScore 8.00
G_M33833_IG02: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
cbnz x20, G_M33833_IG06
;; size=4 bbWeight=1 PerfScore 1.00
@@ -91,61 +92,26 @@ G_M33833_IG06: ; bbWeight=1, gcrefRegs=100000 {x20}, byrefRegs=200000 {x2
bgt G_M33833_IG08
;; size=72 bbWeight=1 PerfScore 12.50
G_M33833_IG07: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
- cbz w1, G_M33833_IG09
+ cbz w1, G_M33833_IG11
cmp w1, #32
- bne G_M33833_IG17
- b G_M33833_IG14
+ bne G_M33833_IG16
+ b G_M33833_IG13
;; size=16 bbWeight=0.50 PerfScore 1.75
G_M33833_IG08: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref, isz
+ mov w0, #96
cmp w1, #64
- beq G_M33833_IG11
- cmp w1, #96
- beq G_M33833_IG11
- b G_M33833_IG17
- ;; size=20 bbWeight=0.50 PerfScore 2.00
-G_M33833_IG09: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
- mov x1, x20
- ; gcrRegs +[x1]
- movz x0, #0xD1FFAB1E
- movk x0, #0xD1FFAB1E LSL #16
- movk x0, #0xD1FFAB1E LSL #32
- movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTINTERFACE
- movk x2, #0xD1FFAB1E LSL #16
- movk x2, #0xD1FFAB1E LSL #32
- ldr x2, [x2]
- blr x2
- ; gcrRegs -[x1 x20] +[x0]
- mov w4, w23
- mov x1, x21
- ; byrRegs +[x1]
- mov w2, w22
- mov w3, w19
- add x11, x24, #8
- ldr x5, [x11]
- blr x5
- ; gcrRegs -[x0]
- ; byrRegs -[x1 x21]
- ;; size=64 bbWeight=0.50 PerfScore 7.00
-G_M33833_IG10: ; bbWeight=0.50, epilog, nogc, extend
- ldp x23, x24, [sp, #0x30]
- ldp x21, x22, [sp, #0x20]
- ldp x19, x20, [sp, #0x10]
- ldp fp, lr, [sp], #0x40
- ret lr
- ;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M33833_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
- ; gcrRegs +[x20]
- ; byrRegs +[x21]
- mov w24, w19
- tbnz w24, #4, G_M33833_IG12
+ ccmp w1, w0, z, ne
+ bne G_M33833_IG16
+ mov w25, w19
+ tbnz w25, #4, G_M33833_IG09
movz x0, #0xD1FFAB1E // code for <unknown method>
movk x0, #0xD1FFAB1E LSL #16
movk x0, #0xD1FFAB1E LSL #32
ldr x0, [x0]
blr x0
- ;; size=28 bbWeight=0.50 PerfScore 3.50
-G_M33833_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
- and w2, w24, #15
+ ;; size=44 bbWeight=0.50 PerfScore 4.75
+G_M33833_IG09: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+ and w2, w25, #15
mov x0, x21
; byrRegs +[x0]
mov w1, w22
@@ -182,24 +148,58 @@ G_M33833_IG12: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000
; gcrRegs -[x0 x3 x20 x22]
; byrRegs -[x1 x21]
;; size=104 bbWeight=0.50 PerfScore 9.75
-G_M33833_IG13: ; bbWeight=0.50, epilog, nogc, extend
- ldp x23, x24, [sp, #0x30]
- ldp x21, x22, [sp, #0x20]
- ldp x19, x20, [sp, #0x10]
- ldp fp, lr, [sp], #0x40
+G_M33833_IG10: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x25, [sp, #0x48]
+ ldp x23, x24, [sp, #0x38]
+ ldp x21, x22, [sp, #0x28]
+ ldp x19, x20, [sp, #0x18]
+ ldp fp, lr, [sp], #0x50
ret lr
- ;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M33833_IG14: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
+ ;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M33833_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref
; gcrRegs +[x20]
; byrRegs +[x21]
- tbnz w19, #4, G_M33833_IG15
+ mov x1, x20
+ ; gcrRegs +[x1]
+ movz x0, #0xD1FFAB1E
+ movk x0, #0xD1FFAB1E LSL #16
+ movk x0, #0xD1FFAB1E LSL #32
+ movz x2, #0xD1FFAB1E // code for CORINFO_HELP_CHKCASTINTERFACE
+ movk x2, #0xD1FFAB1E LSL #16
+ movk x2, #0xD1FFAB1E LSL #32
+ ldr x2, [x2]
+ blr x2
+ ; gcrRegs -[x1 x20] +[x0]
+ mov w4, w23
+ mov x1, x21
+ ; byrRegs +[x1]
+ mov w2, w22
+ mov w3, w19
+ add x11, x24, #8
+ ldr x5, [x11]
+ blr x5
+ ; gcrRegs -[x0]
+ ; byrRegs -[x1 x21]
+ ;; size=64 bbWeight=0.50 PerfScore 7.00
+G_M33833_IG12: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x25, [sp, #0x48]
+ ldp x23, x24, [sp, #0x38]
+ ldp x21, x22, [sp, #0x28]
+ ldp x19, x20, [sp, #0x18]
+ ldp fp, lr, [sp], #0x50
+ ret lr
+ ;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M33833_IG13: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, gcvars, byref, isz
+ ; gcrRegs +[x20]
+ ; byrRegs +[x21]
+ tbnz w19, #4, G_M33833_IG14
movz x0, #0xD1FFAB1E // code for <unknown method>
movk x0, #0xD1FFAB1E LSL #16
movk x0, #0xD1FFAB1E LSL #32
ldr x0, [x0]
blr x0
;; size=24 bbWeight=0.50 PerfScore 3.25
-G_M33833_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
+G_M33833_IG14: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000 {x21}, byref
and w2, w19, #15
mov x0, x21
; byrRegs +[x0]
@@ -221,14 +221,15 @@ G_M33833_IG15: ; bbWeight=0.50, gcrefRegs=100000 {x20}, byrefRegs=200000
; gcrRegs -[x0 x20]
; byrRegs -[x1 x21]
;; size=56 bbWeight=0.50 PerfScore 6.50
-G_M33833_IG16: ; bbWeight=0.50, epilog, nogc, extend
- ldp x23, x24, [sp, #0x30]
- ldp x21, x22, [sp, #0x20]
- ldp x19, x20, [sp, #0x10]
- ldp fp, lr, [sp], #0x40
+G_M33833_IG15: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x25, [sp, #0x48]
+ ldp x23, x24, [sp, #0x38]
+ ldp x21, x22, [sp, #0x28]
+ ldp x19, x20, [sp, #0x18]
+ ldp fp, lr, [sp], #0x50
ret lr
- ;; size=20 bbWeight=0.50 PerfScore 2.50
-G_M33833_IG17: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=24 bbWeight=0.50 PerfScore 3.50
+G_M33833_IG16: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, w19
movz x1, #0xD1FFAB1E // code for <unknown method>
movk x1, #0xD1FFAB1E LSL #16
@@ -236,26 +237,27 @@ G_M33833_IG17: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=000
ldr x1, [x1]
blr x1
;; size=24 bbWeight=0.50 PerfScore 3.00
-G_M33833_IG18: ; bbWeight=0.50, epilog, nogc, extend
- ldp x23, x24, [sp, #0x30]
- ldp x21, x22, [sp, #0x20]
- ldp x19, x20, [sp, #0x10]
- ldp fp, lr, [sp], #0x40
+G_M33833_IG17: ; bbWeight=0.50, epilog, nogc, extend
+ ldr x25, [sp, #0x48]
+ ldp x23, x24, [sp, #0x38]
+ ldp x21, x22, [sp, #0x28]
+ ldp x19, x20, [sp, #0x18]
+ ldp fp, lr, [sp], #0x50
ret lr
- ;; size=20 bbWeight=0.50 PerfScore 2.50
+ ;; size=24 bbWeight=0.50 PerfScore 3.50
-; Total bytes of code 580, prolog size 20, PerfScore 132.75, instruction count 145, allocated bytes for code 580 (MethodHash=1e667bd6) for method ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
+; Total bytes of code 596, prolog size 24, PerfScore 138.60, instruction count 149, allocated bytes for code 596 (MethodHash=1e667bd6) for method ProtoBuf.ProtoWriter+State:WriteAny[int](int,int,int,ProtoBuf.Serializers.ISerializer`1[int]):this
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
- Code Words : 2
+ Code Words : 3
Epilog Count : 4
E bit : 0
X bit : 0
Vers : 0
- Function Length : 145 (0x00091) Actual length = 580 (0x000244)
+ Function Length : 149 (0x00095) Actual length = 596 (0x000254)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -272,10 +274,13 @@ Unwind Info:
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
+ D1 89 save_reg X#6 Z#9 (0x09); str x25, [sp, #72]
E6 save_next
E6 save_next
- C8 02 save_regp X#0 Z#2 (0x02); stp x19, x20, [sp, #16]
- 87 save_fplr_x #7 (0x07); stp fp, lr, [sp, #-64]!
+ C8 03 save_regp X#0 Z#3 (0x03); stp x19, x20, [sp, #24]
+ 89 save_fplr_x #9 (0x09); stp fp, lr, [sp, #-80]!
+ E4 end
+ E4 end
...
+8 (+9.09%) : 4051.dasm - System.Globalization.Tests.StringSearch+<>c:b__14_0(ushort):bool:this@@ -20,37 +20,37 @@ G_M31341_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
G_M31341_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
uxth w0, w1
cmp w0, #32
- beq G_M31341_IG06
+ beq G_M31341_IG05
;; size=12 bbWeight=1 PerfScore 2.00
G_M31341_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w1, #44
cmp w0, #46
- beq G_M31341_IG06
- cmp w0, #44
- beq G_M31341_IG06
+ ccmp w0, w1, z, ne
+ cset x1, eq
+ mov w2, #122
cmp w0, #97
- blt G_M31341_IG04
- cmp w0, #122
- ble G_M31341_IG06
- ;; size=32 bbWeight=0.50 PerfScore 3.00
-G_M31341_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ ccmp w0, w2, 0, ge
+ cset x2, le
+ orr w1, w1, w2
+ cbnz w1, G_M31341_IG05
cmp w0, #90
cset x1, le
cmp w0, #65
csel w0, wzr, w1, lt
- ;; size=16 bbWeight=0.50 PerfScore 1.00
-G_M31341_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M31341_IG04: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M31341_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M31341_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M31341_IG07: ; bbWeight=0.50, epilog, nogc, extend
+G_M31341_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 88, prolog size 8, PerfScore 18.55, instruction count 22, allocated bytes for code 88 (MethodHash=4a768592) for method System.Globalization.Tests.StringSearch+<>c:<ContainsSimpleCharactersOnly>b__14_0(ushort):bool:this
+; Total bytes of code 96, prolog size 8, PerfScore 19.10, instruction count 24, allocated bytes for code 96 (MethodHash=4a768592) for method System.Globalization.Tests.StringSearch+<>c:<ContainsSimpleCharactersOnly>b__14_0(ushort):bool:this
; ============================================================
Unwind Info:
@@ -61,7 +61,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 22 (0x00016) Actual length = 88 (0x000058)
+ Function Length : 24 (0x00018) Actual length = 96 (0x000060)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
coreclr_tests.run.linux.arm64.checked.mch-16 (-28.57%) : 356691.dasm - System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this@@ -8,61 +8,46 @@
; Final local variable assignments
;
; V00 this [V00,T00] ( 3, 3 ) byref -> x0 this single-def
-; V01 loc0 [V01,T01] ( 4, 3 ) int -> x1
+; V01 loc0 [V01,T01] ( 4, 4 ) int -> x0
;# V02 OutArgs [V02 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M20099_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M20099_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M20099_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+G_M20099_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
; byrRegs +[x0]
ldrb w0, [x0]
; byrRegs -[x0]
- and w1, w0, #15
- cmp w1, #5
- ble G_M20099_IG04
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M20099_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w1, #9
- bne G_M20099_IG06
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M20099_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M20099_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ and w0, w0, #15
+ uxtb w1, w0
+ cmp w0, #5
+ ccmp w0, #9, z, gt
+ csel w0, w1, wzr, ne
+ ;; size=24 bbWeight=1 PerfScore 5.50
+G_M20099_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M20099_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- uxtb w0, w1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M20099_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 56, prolog size 8, PerfScore 15.35, instruction count 14, allocated bytes for code 56 (MethodHash=c9cfb17c) for method System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this
+; Total bytes of code 40, prolog size 8, PerfScore 13.00, instruction count 10, allocated bytes for code 40 (MethodHash=c9cfb17c) for method System.Reflection.Metadata.SignatureHeader:get_Kind():ubyte:this
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 14 (0x0000e) Actual length = 56 (0x000038)
+ Function Length : 10 (0x0000a) Actual length = 40 (0x000028)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-28.57%) : 364903.dasm - System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this@@ -8,59 +8,46 @@
; Final local variable assignments
;
; V00 this [V00,T00] ( 3, 3 ) byref -> x0 this single-def
-; V01 loc0 [V01,T01] ( 4, 3 ) int -> x1
+; V01 loc0 [V01,T01] ( 4, 4 ) int -> x0
;# V02 OutArgs [V02 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M22474_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M22474_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M22474_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+G_M22474_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref
; byrRegs +[x0]
ldrb w0, [x0]
; byrRegs -[x0]
- and w1, w0, #15
- cmp w1, #5
- ble G_M22474_IG05
- ;; size=16 bbWeight=1 PerfScore 5.00
-G_M22474_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w1, #9
- beq G_M22474_IG05
- mov w0, wzr
- ;; size=12 bbWeight=0.50 PerfScore 1.00
-G_M22474_IG04: ; bbWeight=0.50, epilog, nogc, extend
+ and w0, w0, #15
+ uxtb w1, w0
+ cmp w0, #5
+ ccmp w0, #9, z, gt
+ csel w0, w1, wzr, eq
+ ;; size=24 bbWeight=1 PerfScore 5.50
+G_M22474_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M22474_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- uxtb w0, w1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M22474_IG06: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 56, prolog size 8, PerfScore 15.35, instruction count 14, allocated bytes for code 56 (MethodHash=337ba835) for method System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this
+; Total bytes of code 40, prolog size 8, PerfScore 13.00, instruction count 10, allocated bytes for code 40 (MethodHash=337ba835) for method System.Reflection.Metadata.SignatureHeader:get_CallingConvention():ubyte:this
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 14 (0x0000e) Actual length = 56 (0x000038)
+ Function Length : 10 (0x0000a) Actual length = 40 (0x000028)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-24 (-27.27%) : 1236.dasm - System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool@@ -10,7 +10,7 @@
;
; V00 arg0 [V00,T01] ( 3, 3 ) ubyte -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
-; V02 cse0 [V02,T00] ( 6, 5.35) int -> x1 "CSE - aggressive"
+; V02 cse0 [V02,T00] ( 6, 5.48) int -> x1 "CSE - aggressive"
;
; Lcl frame size = 0
@@ -21,54 +21,40 @@ G_M46525_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
G_M46525_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
uxtb w1, w0
cmp w1, #14
- ble G_M46525_IG09
+ ble G_M46525_IG05
;; size=12 bbWeight=1 PerfScore 2.00
-G_M46525_IG03: ; bbWeight=0.87, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w1, #22
- beq G_M46525_IG05
- cmp w1, #24
- beq G_M46525_IG05
- ;; size=16 bbWeight=0.87 PerfScore 2.61
-G_M46525_IG04: ; bbWeight=0.80, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w1, #25
- beq G_M46525_IG05
- cmp w1, #28
- bne G_M46525_IG07
- ;; size=16 bbWeight=0.80 PerfScore 2.41
-G_M46525_IG05: ; bbWeight=0.55, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M46525_IG03: ; bbWeight=0.87, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
mov w0, #1
- ;; size=4 bbWeight=0.55 PerfScore 0.28
-G_M46525_IG06: ; bbWeight=0.55, epilog, nogc, extend
+ cmp w1, #22
+ ccmp w1, #24, z, ne
+ ccmp w1, #25, z, ne
+ ccmp w1, #28, z, ne
+ csel w0, wzr, w0, ne
+ ;; size=24 bbWeight=0.87 PerfScore 2.61
+G_M46525_IG04: ; bbWeight=0.87, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.55 PerfScore 1.11
-G_M46525_IG07: ; bbWeight=0.32, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.32 PerfScore 0.16
-G_M46525_IG08: ; bbWeight=0.32, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.32 PerfScore 0.63
-G_M46525_IG09: ; bbWeight=0.13, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ ;; size=8 bbWeight=0.87 PerfScore 1.74
+G_M46525_IG05: ; bbWeight=0.13, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #1
;; size=4 bbWeight=0.13 PerfScore 0.06
-G_M46525_IG10: ; bbWeight=0.13, epilog, nogc, extend
+G_M46525_IG06: ; bbWeight=0.13, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.13 PerfScore 0.26
-; Total bytes of code 88, prolog size 8, PerfScore 19.82, instruction count 22, allocated bytes for code 88 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
+; Total bytes of code 64, prolog size 8, PerfScore 14.58, instruction count 16, allocated bytes for code 64 (MethodHash=0e634a42) for method System.Reflection.Emit.SignatureHelper:IsSimpleType(ubyte):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 3
+ Epilog Count : 2
E bit : 0
X bit : 0
Vers : 0
- Function Length : 22 (0x00016) Actual length = 88 (0x000058)
+ Function Length : 16 (0x00010) Actual length = 64 (0x000040)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
@@ -76,9 +62,6 @@ Unwind Info:
---- Scope 1
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 2
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
+4 (+0.13%) : 517264.dasm - Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)@@ -948,11 +948,12 @@ G_M36121_IG33: ; bbWeight=0.50, gcrefRegs=780000 {x19 x20 x21 x22}, byref
;; size=340 bbWeight=0.50 PerfScore 58.50
G_M36121_IG34: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs=0000 {}, byref, isz
; gcrRegs +[x19-x21]
- cmn w23, #1
- beq G_M36121_IG41
+ movn w0, #0
cmp w25, w23
- ble G_M36121_IG41
- cbnz w26, G_M36121_IG41
+ ccmp w23, w0, z, gt
+ cset x0, eq
+ orr w0, w0, w26
+ cbnz w0, G_M36121_IG41
mov x0, x19
; gcrRegs +[x0]
ldr x1, [x27, #0x08]
@@ -974,7 +975,7 @@ G_M36121_IG34: ; bbWeight=0.50, gcrefRegs=380000 {x19 x20 x21}, byrefRegs
stp xzr, xzr, [fp, #0x38]
str xzr, [fp, #0x48]
b G_M36121_IG36
- ;; size=84 bbWeight=0.50 PerfScore 11.00
+ ;; size=88 bbWeight=0.50 PerfScore 10.75
G_M36121_IG35: ; bbWeight=0.50, gcrefRegs=200000 {x21}, byrefRegs=0000 {}, byref
; gcrRegs -[x0]
ldr x0, [fp, #0xD1FFAB1E] // [V122 tmp110]
@@ -1319,7 +1320,7 @@ G_M36121_IG47: ; bbWeight=0, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
brk_unix #0
;; size=8 bbWeight=0 PerfScore 0.00
-; Total bytes of code 3116, prolog size 76, PerfScore 813.85, instruction count 779, allocated bytes for code 3116 (MethodHash=615872e6) for method Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
+; Total bytes of code 3120, prolog size 76, PerfScore 814.00, instruction count 780, allocated bytes for code 3120 (MethodHash=615872e6) for method Microsoft.CodeAnalysis.CSharp.Symbols.ParameterHelpers:ReportParameterErrors(Microsoft.CodeAnalysis.CSharp.Symbol,Microsoft.CodeAnalysis.CSharp.Syntax.ParameterSyntax,Microsoft.CodeAnalysis.CSharp.Symbols.SourceParameterSymbol,int,Microsoft.CodeAnalysis.DiagnosticBag)
; ============================================================
Unwind Info:
@@ -1330,7 +1331,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 779 (0x0030b) Actual length = 3116 (0x000c2c)
+ Function Length : 780 (0x0030c) Actual length = 3120 (0x000c30)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 360681.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool@@ -24,39 +24,37 @@ G_M29165_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=12 bbWeight=1 PerfScore 2.00
G_M29165_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp w0, #90
- ble G_M29165_IG08
+ ble G_M29165_IG06
;; size=8 bbWeight=0.50 PerfScore 0.75
G_M29165_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w1, #122
cmp w0, #97
- blt G_M29165_IG05
- cmp w0, #122
- ble G_M29165_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, w1, 0, ge
+ cset x1, le
+ mov w2, #57
+ mov w3, #95
cmp w0, #48
- blt G_M29165_IG06
- cmp w0, #57
- ble G_M29165_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #95
- beq G_M29165_IG08
+ ccmp w0, w2, 0, ge
+ ccmp w0, w3, z, gt
+ cset x2, eq
+ orr w1, w1, w2
+ cbnz w1, G_M29165_IG06
cmp w0, #45
cset x0, eq
- ;; size=16 bbWeight=0.50 PerfScore 1.25
+ ;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M29165_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ldp fp, lr, [sp], #0x10
+ ret lr
+ ;; size=8 bbWeight=0.50 PerfScore 1.00
+G_M29165_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ mov w0, #1
+ ;; size=4 bbWeight=0.50 PerfScore 0.25
G_M29165_IG07: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M29165_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M29165_IG09: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 96, prolog size 8, PerfScore 20.35, instruction count 24, allocated bytes for code 96 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
+; Total bytes of code 104, prolog size 8, PerfScore 20.65, instruction count 26, allocated bytes for code 104 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
; ============================================================
Unwind Info:
@@ -67,7 +65,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 24 (0x00018) Actual length = 96 (0x000060)
+ Function Length : 26 (0x0001a) Actual length = 104 (0x000068)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+8.33%) : 586743.dasm - Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool@@ -23,39 +23,37 @@ G_M29165_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref,
;; size=12 bbWeight=1 PerfScore 2.00
G_M29165_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp w0, #90
- ble G_M29165_IG08
+ ble G_M29165_IG06
;; size=8 bbWeight=0.50 PerfScore 0.75
G_M29165_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w1, #122
cmp w0, #97
- blt G_M29165_IG05
- cmp w0, #122
- ble G_M29165_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, w1, 0, ge
+ cset x1, le
+ mov w2, #57
+ mov w3, #95
cmp w0, #48
- blt G_M29165_IG06
- cmp w0, #57
- ble G_M29165_IG08
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M29165_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #95
- beq G_M29165_IG08
+ ccmp w0, w2, 0, ge
+ ccmp w0, w3, z, gt
+ cset x2, eq
+ orr w1, w1, w2
+ cbnz w1, G_M29165_IG06
cmp w0, #45
cset x0, eq
- ;; size=16 bbWeight=0.50 PerfScore 1.25
+ ;; size=56 bbWeight=0.50 PerfScore 3.75
+G_M29165_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ldp fp, lr, [sp], #0x10
+ ret lr
+ ;; size=8 bbWeight=0.50 PerfScore 1.00
+G_M29165_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+ mov w0, #1
+ ;; size=4 bbWeight=0.50 PerfScore 0.25
G_M29165_IG07: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M29165_IG08: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M29165_IG09: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 96, prolog size 8, PerfScore 20.35, instruction count 24, allocated bytes for code 96 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
+; Total bytes of code 104, prolog size 8, PerfScore 20.65, instruction count 26, allocated bytes for code 104 (MethodHash=222d8e12) for method Microsoft.Build.Shared.XmlUtilities:IsValidSubsequentElementNameCharacter(ushort):bool
; ============================================================
Unwind Info:
@@ -66,7 +64,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 24 (0x00018) Actual length = 96 (0x000060)
+ Function Length : 26 (0x0001a) Actual length = 104 (0x000068)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
libraries.crossgen2.linux.arm64.checked.mch-16 (-33.33%) : 122051.dasm - Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool@@ -7,57 +7,42 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 4, 3.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 4, 4 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M56201_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M56201_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M56201_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov w1, #1
cmp w0, #4
- bls G_M56201_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M56201_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #9
- bne G_M56201_IG06
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M56201_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #9, z, hi
+ csel w0, wzr, w1, ne
+ ;; size=16 bbWeight=1 PerfScore 2.00
+G_M56201_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M56201_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M56201_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=18a32476) for method Roslyn.Utilities.UnicodeCharacterUtilities:IsLetterChar(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-33.33%) : 123848.dasm - Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int@@ -7,55 +7,42 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 4, 3.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 4, 4 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M44118_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M44118_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M44118_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M44118_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov w1, #1
cmp w0, #2
- beq G_M44118_IG05
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M44118_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #3
- bne G_M44118_IG05
- mov w0, wzr
- ;; size=12 bbWeight=0.50 PerfScore 1.00
-G_M44118_IG04: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #3, 0, ne
+ csel w0, w1, wzr, ne
+ ;; size=16 bbWeight=1 PerfScore 2.00
+G_M44118_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M44118_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M44118_IG06: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=669853a9) for method Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=669853a9) for method Microsoft.CodeAnalysis.Diagnostic:GetDefaultWarningLevel(int):int
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
-16 (-33.33%) : 124616.dasm - Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool@@ -7,57 +7,42 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 4, 3.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 4, 4 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
;
; Lcl frame size = 0
-G_M18810_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref, nogc <-- Prolog IG
+G_M18810_IG01: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG
stp fp, lr, [sp, #-0x10]!
mov fp, sp
;; size=8 bbWeight=1 PerfScore 1.50
-G_M18810_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+G_M18810_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+ mov w1, #1
cmp w0, #7
- beq G_M18810_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M18810_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #15
- bne G_M18810_IG06
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M18810_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
- mov w0, #1
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M18810_IG05: ; bbWeight=0.50, epilog, nogc, extend
+ ccmp w0, #15, z, ne
+ csel w0, wzr, w1, ne
+ ;; size=16 bbWeight=1 PerfScore 2.00
+G_M18810_IG03: ; bbWeight=1, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M18810_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
- mov w0, wzr
- ;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M18810_IG07: ; bbWeight=0.50, epilog, nogc, extend
- ldp fp, lr, [sp], #0x10
- ret lr
- ;; size=8 bbWeight=0.50 PerfScore 1.00
+ ;; size=8 bbWeight=1 PerfScore 2.00
-; Total bytes of code 48, prolog size 8, PerfScore 11.05, instruction count 12, allocated bytes for code 48 (MethodHash=1f3db685) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
+; Total bytes of code 32, prolog size 8, PerfScore 8.70, instruction count 8, allocated bytes for code 32 (MethodHash=1f3db685) for method Microsoft.CodeAnalysis.PrimitiveTypeCodeExtensions:Is64BitIntegral(int):bool
; ============================================================
Unwind Info:
>> Start offset : 0x000000 (not in unwind data)
>> End offset : 0xd1ffab1e (not in unwind data)
Code Words : 1
- Epilog Count : 2
+ Epilog Count : 1
E bit : 0
X bit : 0
Vers : 0
- Function Length : 12 (0x0000c) Actual length = 48 (0x000030)
+ Function Length : 8 (0x00008) Actual length = 32 (0x000020)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
Epilog Start Index : 1 (0x01)
- ---- Scope 1
- Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
- Epilog Start Index : 1 (0x01)
---- Unwind codes ----
E1 set_fp; mov fp, sp
---- Epilog start at index 1 ----
+8 (+4.55%) : 143288.dasm - Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool@@ -9,8 +9,8 @@
;
; V00 arg0 [V00,T02] ( 5, 4 ) ref -> x19 class-hnd single-def
; V01 loc0 [V01,T05] ( 2, 1 ) ref -> x19 class-hnd single-def
-; V02 loc1 [V02,T01] ( 5, 16.50) int -> x2
-; V03 loc2 [V03,T00] ( 7, 18 ) ushort -> x3
+; V02 loc1 [V02,T00] ( 5, 16.50) int -> x2
+; V03 loc2 [V03,T01] ( 7, 16 ) ushort -> x3
;# V04 OutArgs [V04 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
; V05 cse0 [V05,T03] ( 4, 5.50) int -> x1 "CSE - aggressive"
; V06 cse1 [V06,T04] ( 2, 4.50) byref -> x0 "CSE - aggressive"
@@ -52,56 +52,52 @@ G_M10687_IG06: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=800
; gcrRegs +[x19]
mov w2, wzr
cmp w1, #0
- ble G_M10687_IG12
+ ble G_M10687_IG09
add x0, x19, #12
; byrRegs +[x0]
;; size=16 bbWeight=0.50 PerfScore 1.25
G_M10687_IG07: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
; gcrRegs -[x19]
ldrh w3, [x0, w2, UXTW #2]
+ mov w4, #57
cmp w3, #48
- blt G_M10687_IG09
- ;; size=12 bbWeight=4 PerfScore 18.00
-G_M10687_IG08: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
- cmp w3, #57
- ble G_M10687_IG11
- ;; size=8 bbWeight=2 PerfScore 3.00
-G_M10687_IG09: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w4, 0, ge
+ cset x4, le
+ mov w5, #102
cmp w3, #97
- blt G_M10687_IG10
- cmp w3, #102
- ble G_M10687_IG11
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG10: ; bbWeight=2, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w5, 0, ge
+ cset x5, le
+ orr w4, w4, w5
+ cbnz w4, G_M10687_IG08
+ mov w4, #70
cmp w3, #65
- blt G_M10687_IG14
- cmp w3, #70
- bgt G_M10687_IG14
- ;; size=16 bbWeight=2 PerfScore 6.00
-G_M10687_IG11: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
+ ccmp w3, w4, 0, ge
+ bgt G_M10687_IG11
+ ;; size=60 bbWeight=4 PerfScore 44.00
+G_M10687_IG08: ; bbWeight=4, gcrefRegs=0000 {}, byrefRegs=0001 {x0}, byref, isz
add w2, w2, #1
cmp w1, w2
bgt G_M10687_IG07
;; size=12 bbWeight=4 PerfScore 8.00
-G_M10687_IG12: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
+G_M10687_IG09: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref
; byrRegs -[x0]
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG13: ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG10: ; bbWeight=0.50, epilog, nogc, extend
ldr x19, [sp, #0x18]
ldp fp, lr, [sp], #0x20
ret lr
;; size=12 bbWeight=0.50 PerfScore 2.00
-G_M10687_IG14: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M10687_IG11: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, wzr
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M10687_IG15: ; bbWeight=0.50, epilog, nogc, extend
+G_M10687_IG12: ; bbWeight=0.50, epilog, nogc, extend
ldr x19, [sp, #0x18]
ldp fp, lr, [sp], #0x20
ret lr
;; size=12 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 176, prolog size 16, PerfScore 78.10, instruction count 44, allocated bytes for code 176 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
+; Total bytes of code 184, prolog size 16, PerfScore 89.90, instruction count 46, allocated bytes for code 184 (MethodHash=fe08d640) for method Microsoft.CodeAnalysis.StrongNameKeys:IsValidPublicKeyString(System.String):bool
; ============================================================
Unwind Info:
@@ -112,7 +108,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 44 (0x0002c) Actual length = 176 (0x0000b0)
+ Function Length : 46 (0x0002e) Actual length = 184 (0x0000b8)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+5.00%) : 162723.dasm - System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool@@ -7,7 +7,7 @@
; No matching PGO data
; Final local variable assignments
;
-; V00 arg0 [V00,T00] ( 18, 10.50) int -> x0 single-def
+; V00 arg0 [V00,T00] ( 18, 12 ) int -> x0 single-def
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+00H] "OutgoingArgSpace"
; V02 tmp1 [V02,T01] ( 2, 2 ) int -> x1 "Single return block return value"
;
@@ -19,64 +19,56 @@ G_M23697_IG01: ; bbWeight=1, gcVars=0000000000000000 {}, gcrefRegs=0000 {
;; size=8 bbWeight=1 PerfScore 1.50
G_M23697_IG02: ; bbWeight=1, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
cmp w0, #0
- blt G_M23697_IG04
- ;; size=8 bbWeight=1 PerfScore 1.50
-G_M23697_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #14
- ble G_M23697_IG10
- ;; size=8 bbWeight=0.50 PerfScore 0.75
-G_M23697_IG04: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, #14, 0, ge
+ cset x1, le
cmp w0, #16
- blt G_M23697_IG05
- cmp w0, #21
- ble G_M23697_IG10
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG05: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, #21, 0, ge
+ cset x2, le
+ orr w1, w1, w2
+ cbnz w1, G_M23697_IG05
+ ;; size=32 bbWeight=1 PerfScore 4.50
+G_M23697_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ mov w1, #34
cmp w0, #32
- blt G_M23697_IG06
- cmp w0, #34
- ble G_M23697_IG10
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG06: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, w1, 0, ge
+ cset x1, le
+ mov w2, #54
cmp w0, #50
- blt G_M23697_IG07
- cmp w0, #54
- ble G_M23697_IG10
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG07: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
+ ccmp w0, w2, 0, ge
+ cset x2, le
+ orr w1, w1, w2
+ cbnz w1, G_M23697_IG05
+ mov w1, #71
+ mov w2, #36
+ mov w3, #48
cmp w0, #64
- blt G_M23697_IG08
- cmp w0, #71
- ble G_M23697_IG10
- ;; size=16 bbWeight=0.50 PerfScore 1.50
-G_M23697_IG08: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, isz
- cmp w0, #36
- beq G_M23697_IG10
- cmp w0, #48
- beq G_M23697_IG10
+ ccmp w0, w1, 0, ge
+ ccmp w0, w2, z, gt
+ ccmp w0, w3, z, ne
+ beq G_M23697_IG05
+ mov w1, #61
+ mov w2, #76
cmp w0, #60
- beq G_M23697_IG10
- cmp w0, #61
- beq G_M23697_IG10
- cmp w0, #76
- beq G_M23697_IG10
+ ccmp w0, w1, z, ne
+ ccmp w0, w2, z, ne
+ beq G_M23697_IG05
cmp w0, #80
cset x1, eq
uxtb w0, w1
- ;; size=52 bbWeight=0.50 PerfScore 4.50
-G_M23697_IG09: ; bbWeight=0.50, epilog, nogc, extend
+ ;; size=108 bbWeight=0.50 PerfScore 7.50
+G_M23697_IG04: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-G_M23697_IG10: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
+G_M23697_IG05: ; bbWeight=0.50, gcVars=0000000000000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {}, gcvars, byref
mov w0, #1
;; size=4 bbWeight=0.50 PerfScore 0.25
-G_M23697_IG11: ; bbWeight=0.50, epilog, nogc, extend
+G_M23697_IG06: ; bbWeight=0.50, epilog, nogc, extend
ldp fp, lr, [sp], #0x10
ret lr
;; size=8 bbWeight=0.50 PerfScore 1.00
-; Total bytes of code 160, prolog size 8, PerfScore 32.50, instruction count 40, allocated bytes for code 160 (MethodHash=6425a36e) for method System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
+; Total bytes of code 168, prolog size 8, PerfScore 32.55, instruction count 42, allocated bytes for code 168 (MethodHash=6425a36e) for method System.DirectoryServices.Protocols.Utility:IsResultCode(int):bool
; ============================================================
Unwind Info:
@@ -87,7 +79,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 40 (0x00028) Actual length = 160 (0x0000a0)
+ Function Length : 42 (0x0002a) Actual length = 168 (0x0000a8)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
+8 (+5.71%) : 18473.dasm - Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool@@ -31,11 +31,13 @@ G_M41419_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
mov w0, #102
cmp w19, #97
ccmp w19, w0, 0, ge
- ble G_M41419_IG05
- mov w0, #70
+ cset x0, le
+ mov w1, #70
cmp w19, #65
- ccmp w19, w0, 0, ge
- ble G_M41419_IG05
+ ccmp w19, w1, 0, ge
+ cset x1, le
+ orr w0, w0, w1
+ cbnz w0, G_M41419_IG05
mov w0, #0xD1FFAB1E
mov w1, #0xD1FFAB1E
cmp w19, w0
@@ -46,7 +48,7 @@ G_M41419_IG03: ; bbWeight=0.50, gcrefRegs=0000 {}, byrefRegs=0000 {}, byr
cmp w19, w0
ccmp w19, w1, 0, ge
cset x0, le
- ;; size=72 bbWeight=0.50 PerfScore 5.25
+ ;; size=80 bbWeight=0.50 PerfScore 5.50
G_M41419_IG04: ; bbWeight=0.50, epilog, nogc, extend
ldr x19, [sp, #0x18]
ldp fp, lr, [sp], #0x20
@@ -61,7 +63,7 @@ G_M41419_IG06: ; bbWeight=0.50, epilog, nogc, extend
ret lr
;; size=12 bbWeight=0.50 PerfScore 2.00
-; Total bytes of code 140, prolog size 12, PerfScore 33.00, instruction count 35, allocated bytes for code 140 (MethodHash=707e5e34) for method Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
+; Total bytes of code 148, prolog size 12, PerfScore 34.05, instruction count 37, allocated bytes for code 148 (MethodHash=707e5e34) for method Microsoft.CodeAnalysis.VisualBasic.SyntaxFacts:IsHexDigit(ushort):bool
; ============================================================
Unwind Info:
@@ -72,7 +74,7 @@ Unwind Info:
E bit : 0
X bit : 0
Vers : 0
- Function Length : 35 (0x00023) Actual length = 140 (0x00008c)
+ Function Length : 37 (0x00025) Actual length = 148 (0x000094)
---- Epilog scopes ----
---- Scope 0
Epilog Start Offset : 3523193630 (0xd1ffab1e) Actual offset = 3523193630 (0xd1ffab1e) Offset from main function begin = 3523193630 (0xd1ffab1e)
DetailsImprovements/regressions per collection
Context information
jit-analyze outputlibraries_tests.pmi.linux.arm64.checked.mchTo reproduce these diffs on Windows arm64:
Detail diffs
libraries.pmi.linux.arm64.checked.mchTo reproduce these diffs on Windows arm64:
Detail diffs
benchmarks.run.linux.arm64.checked.mchTo reproduce these diffs on Windows arm64:
Detail diffs
coreclr_tests.run.linux.arm64.checked.mchTo reproduce these diffs on Windows arm64:
Detail diffs
libraries.crossgen2.linux.arm64.checked.mchTo reproduce these diffs on Windows arm64:
Detail diffs
|
There are now a bunch of X86 failures, but the logs indicate a failure in azure to download? Either way, this patch doesn't touch anything X86 |
/azp run runtime-coreclr superpmi-diffs, runtime-coreclr superpmi-replay |
Azure Pipelines successfully started running 2 pipeline(s). |
Sorry @a74nh, I think you got caught up in a JIT-EE GUID update. I will rerun the CI legs to get the final diffs, but I don't expect to see any problems. Diffs look great now. |
Thanks again @a74nh! |
Add a new stage optOptimizeCompareChainCondBlock in pass optOptimizeBools.
This aims to reduced the number of conditional jumps by joining cases when multiple conditions gate the execution of a block.
Example 1:
If ( a > b || c == d) { x = y; }
Will be represented in IR as:
These operands will be combined into a single AND in the first block (with the first
condition inverted), wrapped by the test condition (NE(...,0)). Giving:
Example 2:
If ( a > b && c == d) { x = y; } else { x = z; }
Here the && conditions are connected via an OR. After the pass:
Example 3:
If ( a > b || c == d || e < f ) { x = y; }
The first pass of the optimization will combine two of the conditions. The
second pass will then combine remaining condition the earlier chain.
This optimization means that every condition within the IF statement is always evaluated,
as opposed to stopping at the first positive match.
Theoretically there is no maximum limit on the size of the generated chain. Therefore cost
checking is used to limit the maximum number of conditions that can be chained together.
Currently the cost checking limits to a maximum of three simple conditions. This is the same behaviour as GCC. Note that LLVM allows chains of much longer length.
Related: #55364