On 12/23/2017 04:36 PM, James Clarke wrote:
        PR rtl-optimization/83565
        * gcc/config/ia64/ia64.md ("*rotrsi3_internal"): Mask out higher 32
        bits from the shift result.
        ("*rotlsi3_internal"): Likewise

This doesn't look right to me. On ia64, the upper 32-bits of a 32-bit value in a 64-bit register are garbage bits. So there should be no need to clear them here after the operation.

Note for instance that lshrsi3 clears the upper 32-bits before shifting right, because they are garbage bits. And note for instance that ashlsi3 just shifts left, and doesn't care that it is putting garbage in the upper 32-bits.

I think either nonzero bits is broken in the SUBREG case, or ia64 perhaps should not be setting WORD_REGISTER_OPERATIONS.

Jim

Reply via email to