Adjust the unrolling check for the new semantics:
- There is no restriction on loops with convergent operations that are controlled inside the loop -- their behavior with respect to cross-thread communication is (partially) implementation-defined, and the loop unrolling is part of the implementation, so...
- Fix unrolling with loop heart intrinsics: in a typical loop with a loop heart in the header that uses a token from outside the loop, duplicating the intrinsic would introduce multiple static uses of a convergence control token in a cycle that does not contain its definition.
Spell out the setup of UnrollLoopOptions to reduce the potential for
confusion caused by very long struct initializers.
Original implementation [D85605] by Nicolai Haehnle <nicolai.haehnle@amd.com>.
It might be worth introducing a ConvergenceControlInst subclass of IntrinsicInst