On Mon, Jan 12, 2015 at 2:29 PM, Kyrill Tkachov <kyrylo.tkac...@arm.com> wrote: > Now with patch attached > > Kyrill > > > On 12/01/15 14:27, Kyrill Tkachov wrote: >> >> Hi all, >> >> In this PR we ICE when compiling with -mtune=xscale. The ICE is a >> segfault in xscale_sched_adjust_cost. >> The root cause is that xscale_sched_adjust_cost uses the value of the >> 'shift' insn attribute to index >> the recog operands. In GCC 5 the form and number of operands in those >> patterns were updated but the >> shift value was not: >> >> Author: rearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4> >> Date: Thu May 29 09:39:07 2014 +0000 >> >> * arm/iterators.md (shiftable_ops): New code iterator. >> (t2_binop0, arith_shift_insn): New code attributes. >> * arm/predicates.md (shift_nomul_operator): New predicate. >> * arm/arm.md (insn_enabled): Delete. >> (enabled): Remove insn_enabled test. >> (*arith_shiftsi): Delete. Replace with ... >> (*<arith_shift_insn>_multsi): ... new pattern. >> (*<arith_shift_insn>_shiftsi): ... new pattern. >> * config/arm/arm.c (arm_print_operand): Handle operand format >> 'b'. >> >> This led to an out-of-bounds array access. Only xscale_sched_adjust_cost >> uses the shift >> attribute, so the segfault only happens for xscale tuning. In the future >> we might want >> to use a more general pattern-matching approach to find the shifted >> operand in an rtx... >> >> In any case, this patch fixes the value of 'shift' for the offending >> pattern and also >> updates 'shift' for the *<arith_shift_insn>_shiftsi pattern to point to >> the correct >> operand that is being shifted. >> >> Tested arm-none-eabi and bootstrapped with -mtune=xscale in BOOT_CFLAGS. >> >> Ok for trunk? >> >> Thanks, >> Kyrill >> >> 2014-01-12 Kyrylo Tkachov <kyrylo.tkac...@arm.com> >> >> PR target/64460 >> * config/arm/arm.md (*<arith_shift_insn>_multsi): Set 'shift' attr >> to 2. >> (*<arith_shift_insn>_shiftsi): Set 'shift' attr to 3. >> >> 2014-01-12 Kyrylo Tkachov <kyrylo.tkac...@arm.com> >> >> PR target/64460 >> * gcc.target/arm/pr64460_1.c: New test. >> >> >
OK. Thanks, Ramana