I'd remove "specifies that given a pointer," and switch "the first" with "its argument" and "produces" with "returns":
The '``llvm.invariant.group.barrier``' intrinsic returns another pointer that aliases its argument but which is considered different for the purposes of load/store !invariant.group metadata.
existance -> existence
have the same -> has the same
This suggests that any such call could affect the loads. I think the right model is that the @llvm.invariant.group.barrier returns a different pointer value. That makes this parenthetical redundant, since "same pointer value" is already a side-condition.
invariant.group.barrier -> invariant.group
Same comments as above.
existance -> existence
that have -> that has
might changed -> might have changed
... but I don't think that's quite what we want to say. Something like:
I don't think it's accurate to say this affects the "next" load/store. The text in the "Overview" section seems like a good fit for a semantic description of the intrinsic. Maybe in the overview you could put something more general like "The <...> intrinsic can be used when an invariant established by !invariant.group metadata no longer holds, to obtain a new pointer value that does not carry the invariant information."
Delete this, we already have this heading on line 10151.
The fact that it's the llvm::Value of a pointer that matters and not it's runtime value (aka the actual address) is non-obvious from this description.
The comma in "value, that" seems misplaced. I think you intend something like the following:
Stray change, please submit separately.
Given the repetition here, I'd suggest adding a new subsection defining the notion of an invariant group and then reference that from the per instruction description.
"atached" --> "attached"
"can be assume" --> "can be assumed"
What does it mean to be assumed to store the same bit value? In the case of loads I think it means that the load must return the same value. Is the store stating that the store must be storing the same value, that is the value operand of the two stores is bit equivalent?
This should either be removed or committed independently.
"it's" --> "its"
Either revert this newline or commit it independently if correct.
Remove the word "bit" here, just "load or store the same value".
You should insert a call between these two, since otherwise we can assume they load the same value because the value cannot have changed between the two loads.
Again, insert a call before this load, since otherwise we can prove that this loads 42 because we just saw a store of 42 to the same region of memory.