Quoting Ian Lance Taylor <i...@google.com>:
Hmmm, you could be right. I wrote and tested some examples when working on lower-subreg, but I never committed them. The current define_splits in i386.md which can do parallel sets only run if reload_completed is true, when simplify_gen_subreg will return different hard registers. While I don't know of any reason that it wouldn't work, I guess I don't know for sure that it is safe.
On targets with different register sizes, subregs are not useful before reload to describe what happens with the smaller registers; because of the uncertainty of the register allocation, the semantics are still undefined. It would really be useful if we replaced STRICT_LOW_PART with something like STRICT_SUBREG to refer to parts of a REG like SUBREG, but always leave the rest of the register alone.