Fast Isel fails when trying to load an unsigned immediate greater than 0x7FFF. The li instruction takes a signed immediate so it isn't appropriate for such values.
I think all we actually need to check is whether or not the sign extended value is in UInt16 rather than the zero extended value.
I've gone ahead and done this and I'll commit it in a few.
Thanks Eric. I'll abandon the revision.
I only implemented it this way because for some reason, I didn't want to fall through and get the load immediate shifted. But that really doesn't matter in this context.