[GCLowering] handle vectorized loads
Vectorized loads can come in 3 variants:
- scalar
- masked
- gather
All work about the same--if we run into a Loaded pointer, we need to
follow back the base pointer and track it. And otherwise they're just
normal def/use statements. But we also need to fix up after an LLVM
mistake and put a valid value in the pass-through slot.
Co-authored-by: Jameson Nash <vtjnash@gmail.com>