Currently we infer the scale at isel time by analyzing whether the base is a constant 0 or not. If it is we assume scale is 1, else we take it from the element size of the pass thru or stored value. This seems a little weird and I think it makes more sense to make it explicit in the DAG rather than doing tricky things in the backend.
Most of this patch is just making sure we copy the scale around everywhere.
The test changes are interesting because I believe the current codegen is actually a bug. We seem to be promote v2i32 gathers to v2i64 and double the scale. But really the address calculation shouldn't have been affected. This is a consquence of getting the scale from the data size. With it stored explicitly it comes from the original GEP. I don't think we should be promoting v2i32 gathers to v2i64, the IR we started with only said it was legal to read 32 bits at each index. If one of the elements is at the end of an array near a page boundary the extra data read might cause a fault. I'll look into a fixing this as a separate patch.