The requirement for deopt parameter to be in gc parameter if it can
be modified by GC is very strong and difficult to follow.
The key example of why this can't work:
%p1 = bitcast i8* %p to i8*
statepoint [gc = (%p1)], [deopt = (%p1)]
The optimizer is allowed to replace either use (or both) of %p1 with %p. If it updates only one of the two (entirely legal), the two sets do not overlap.
So this change removes the strong wording and just mention that some implementation specific GC value can be modified.
Just drop this sentence:
"The runtime may read any of these values, but is assumed not to modify them until the garbage collector might need to modify one of these values. "
It's tempting to try to describe the interaction around stack slots shared between deopt and GC values here, but I couldn't find wording which wasn't simply confusing in a different way. For the moment, let's just leave that aspect undocumented.