Hi, There are a set of SIMD shift intrinsics that have very tight predicates on the range of immediates they can accept, but have been written with very loose predicates, bailing out with an error in final if there has been an issue. This is a problem if some pass figures out that a value passed to the related, non-immediate form, intrinsics is constant and tries to use the immediate form. This can result in a bogus error. This patch tightens all such predicates, preventing the compiler from trying to emit the immediate-form instructions where they are inappropriate. Cross-tested for aarch64-none-elf with no issues. OK? Thanks, James --- gcc/ 2014-09-11 James Greenhalgh * config/aarch64/aarch64-protos.h (aarch64_simd_const_bounds): Change return type to bool. * config/aarch64/aarch64-simd.md (aarch64_qshl): Use new predicates. (aarch64_shll2_n): Likewise. (aarch64_shr_n): Likewise. (aarch64_sra_n: Likewise. (aarch64_si_n): Likewise. (aarch64_qshl_n): Likewise. * config/aarch64/aarch64.c (aarch64_simd_const_bounds): Change return type to bool; don't print errors. * config/aarch64/iterators.md (ve_mode): New. (offsetlr): Remap to infix text for use in new predicates. * config/aarch64/predicates.md (aarch64_simd_shift_imm_qi): New. (aarch64_simd_shift_imm_hi): Likewise. (aarch64_simd_shift_imm_si): Likewise. (aarch64_simd_shift_imm_di): Likewise. (aarch64_simd_shift_imm_offset_qi): Likewise. (aarch64_simd_shift_imm_offset_hi): Likewise. (aarch64_simd_shift_imm_offset_si): Likewise. (aarch64_simd_shift_imm_offset_di): Likewise. (aarch64_simd_shift_imm_bitsize_qi): Likewise. (aarch64_simd_shift_imm_bitsize_hi): Likewise. (aarch64_simd_shift_imm_bitsize_si): Likewise. (aarch64_simd_shift_imm_bitsize_di): Likewise. gcc/testsuite/ 2014-09-08 James Greenhalgh * gcc.target/aarch64/simd/vqshlb_1.c: New.