Make the following changes in order to support opaque pointers in SROA:
- Generate i8 GEPs for opaque pointers.
- Explicitly enforce that promotable allocas only have stores of the alloca type -- previously this was implicitly enforced.
- Replace a check for pointer element type with load/store type.
in the original test this is a i64 addrspace(1)* but here we've dropped the addrspace(1)
are we missing an addrspacecast? the original code path had a cast if the final pointer type didn't match the desired pointer type