This is a work in progress patch to remove the promotion and make isel deal with the increased matching permutations.
There are still more patterns needed. I think we may also need to consider removing load promotion as well so that bitcasted loads won't exist. We may need to do some custom matching in X86ISelDAGToDAG.cpp to more easily peek through bitcasts without having to spell out every type combination.
This and many other cases of duplication in the .td files seem amenable to using foreach. Something like: