On 30 June 2014 14:26, Richard Earnshaw <rearn...@arm.com> wrote: > On 30/06/14 13:53, Charles Baylis wrote: >> I see two options to fix it - one is to teach the back-end to >> successfully generate code for this insn, and the other is to teach >> the back-end that such an insn is not valid. My proposed patch does >> the former. The latter can presumably be achieved by providing a >> different kind of memory constraint which disallows constant pool >> references for these insns although I haven't tried this yet. > > I think we should be doing the latter (not permitting these operations). > If we wanted to do the former, we could just add an offset range for > the insn. > > The reason we don't want the former is that the offset ranges are too > small and overly constrain literal pool placement.
The attached patch adds a 'Uh' constraint, which means the same as 'm', except that literal pool references are not allowed. Patterns which generate ldr[s]b or ldr[s]h have been updated to use it, and the pool_range attributes have been removed from those patterns. Bootstrapped and make-checked with no regressions on qemu for arm-unknown-linux-gnueabihf. <date> Charles Baylis <charles.bay...@linaro.org> PR target/49423 * config/arm/arm-protos.h (arm_legitimate_address_p, arm_is_constant_pool_ref): Add prototypes. * config/arm/arm.c (arm_legitimate_address_p): Remove static. (arm_is_constant_pool_ref) New function. * config/arm/arm.md (unaligned_loadhis, arm_zero_extendhisi2_v6, arm_zero_extendqisi2_v6): Use Uh constraint for memory operand. (arm_extendhisi2, arm_extendhisi2_v6): Use Uh constraint for memory operand and remove pool_range and neg_pool_range attributes. (arm_extendqihi_insn, arm_extendqisi, arm_extendqisi_v6): Remove pool_range and neg_pool_range attributes. * config/arm/constraints.md (Uh): New constraint. (Uq): Don't allow constant pool references. OK for trunk?
0001-Fix-push_minipool_fix-ICE.patch
Description: application/download