amd/llvm: Fix divergent descriptor indexing. (v3) (backport)
There are multiple LLVM passes that very much move the intrinsic using the descriptor outside of the loop, defeating the entire point of creating the loop.
Defeat the optimizer by splitting the break into a separate if-statement and putting an optimization barrier on the bool in between.
v2: Move from a callback based system to begin/end loop. This does not make it significantly less intrusive but is a bit nicer with all the extra struct and callback stubs. v3: Deal with non-divergent values in divergent path.
Closes: #2160 (closed) Fixes: 028ce527 "radv: Add non-uniform indexing lowering." Reviewed-by: Samuel Pitoiset firstname.lastname@example.org Tested-by: Marge Bot !4109 (merged) Part-of: !4109 (merged) (cherry picked from commit b83c9aca)