-
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
Tighten SideEffectSet::InterferesWith
#100300
Tighten SideEffectSet::InterferesWith
#100300
Conversation
In `strict` mode, consider `GTF_ORDER_SIDEEFF` to interfere with another `GTF_ORDER_SIDEEFF` and not just with `GTF_GLOB_REF`.
There are a few diffs: In one case:
containment is prevented because there is an intervening CSE definition with the ORDER bit:
Several other cases look the same. |
Noticed here: #100160 (comment) |
@jakobbotsch PTAL |
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.
There are a few diffs:
In one case:
Microsoft.FSharp.Core.FSharpRef`1[System.__Canon]:Equals(System.Object,System.Collections.IEqualityComparer):ubyte:this (MethodHash=c0d8df1f)
containment is prevented because there is an intervening CSE definition with the ORDER bit:
N001 ( 1, 1) [000014] ------?---- t14 = LCL_VAR ref V01 arg1 u:1 $81 /--* t14 ref N002 ( 3, 2) [000015] #----O?---- t15 = * IND long $1c0 <----------- Previously, this node was contained. N003 ( 1, 1) [000011] !-----?---- t11 = LCL_VAR ref V00 this u:1 $80 /--* t11 ref N004 ( 3, 2) [000012] #----O?---- t12 = * IND long $c2 /--* t12 long N005 ( 7, 5) [000085] DA---O----- * STORE_LCL_VAR long V10 cse0 d:1 $VN.Void N006 ( 3, 2) [000086] ----------- t86 = LCL_VAR long V10 cse0 u:1 $c2 /--* t15 long +--* t86 long N008 ( 14, 10) [000016] JA---O?N--- t16 = * EQ int $144 /--* t16 int N009 ( 16, 12) [000069] -A---O----- * JTRUE void $181
Several other cases look the same.
Any idea why these indirs aren't marked with GTF_GLOB_REF
?
These look to be invariant indirections. |
Diffs A very small number of regressions. |
In
strict
mode, considerGTF_ORDER_SIDEEFF
to interfere with anotherGTF_ORDER_SIDEEFF
and not just withGTF_GLOB_REF
.This matches the semantics implemented in a few other places in the JIT, where
GTF_ORDER_SIDEEFF
is considered a more general barrier to code motion.