SplitVecOp_TRUNCATE has logic for recursively splitting oversize vectors that need more than one round of splitting to become legal. There are many other ISD nodes that could benefit from this logic, so factor it out and use it for FP_TO_UINT,FP_TO_SINT,SINT_TO_FP,UINT_TO_FP and FTRUNC.
Chandler, we discussed this problem on IRC previously and you suggested that we change FP_TO_SINT and friends to never modify the width of a type, and rely on SelectionDAGBuilder to insert extra TRUNCATE nodes. While that sounded fine, it was going to be a very invasive change so I propose this instead; it's not much code and has almost no duplication.