In spirv-reduce's loop-to-conditional reduction pass, if we find that an access chain use is no longer dominated, we replace the use with an access to a (possibly new) variable of the right type. This is fine if the storage class is Private or Function; we can just add a new variable. But for other storage classes I'm unsure whether it's legal to arbitrarily add more global-scoped variables with the given storage class; there might be limits on the number of such variables that are allowed, and quite possibly constraints on adding such variables without modifying the associated host code.