Hi. Regarding the token approach, I’ve read some documentation (review D11861, EH in llvm, and Reid and David’s presentation) but couldn’t answer the following question.
Does the intrinsic or the instruction returning a token type object act as a code motion barrier? In other words, does it prevent other operations from being reordered with it?
If the answer is no, then does it mean the intrinsic has to be marked with the convergent property to achieve the code motion barrier effect?
If yes, can someone explain how is that achieved in llvm?
Greatly appreciated. Thanks.
To clarify, convergent does not form a code-motion barrier. It prevents transformations from adding additional control dependencies. I suspect that the token type does the same (because tokens can’t appear in PHIs). Actual code motion barriers are generally achieved by adding unknown memory dependencies. -Hal