When we check if a load is loop invariant by finding a dominating
invariant.start call, we strip bitcasts until we get to an i8* Value,
and look for an invariant.start use of the i8* Value.
We may accidentally end up at an i8 global and look at a global's uses,
which we shouldn't do in a loop pass. Although we could make this
logic work with globals, that's not currently intended.
This makes it sound like there's a correctness (or at least profitability) reason not to hoist these, while ultimately this is only a technical limitation (right?) I'd make this "Hoisting invariant loads of globals is currently not supported" or invert the fixme to "FIXME: Support hoisting invariant loads of globals".