On 2016-03-17, at 7:38 PM, John David Anglin wrote: > The attach patch fixes a problem causing block/blk-merge.c in the linux > kernel to be miscompiled. As a result, > block segments were not properly split and boot failed since linux 4.3. > > The problem was found by a regression search. The patch reverts a change in > the handling of the Q and T > constraints. > > Tested on hppa-unknown-linux-gnu, hppa2.0w-hp-hpux11.11and > hppa64-hp-hpux11.11. Committed to > trunk, 4.9 and 5 branches.
Unfortunately, this change caused a regression in the handling of the Q constraint used in the dbra and movb patterns in pa.md. Spills with large offsets are now rejected causing the following error: (jump_insn 61 59 62 4 (parallel [ (set (pc) (if_then_else (eq (reg:SI 28 %r28) (const_int 0 [0])) (label_ref:SI 60) (pc))) (set (reg/v/f:SI 100 [ fp ]) (reg:SI 28 %r28)) ]) Renviron.c:180 225 {*pa.md:9010} (expr_list:REG_DEAD (reg:SI 28 %r28) (int_list:REG_BR_PROB 2164 (nil))) -> 60) Renviron.c:207:1: internal compiler error: in find_reloads, at reload.c:3862 0x555be3 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*) ../../src/gcc/rtl-error.c:110 0x5347ef find_reloads(rtx_insn*, int, int, int, short*) ../../src/gcc/reload.c:3862 0x54ad43 calculate_needs_all_insns ../../src/gcc/reload1.c:1540 0x54ad43 reload(rtx_insn*, int) ../../src/gcc/reload1.c:1028 0x425c0f do_reload ../../src/gcc/ira.c:5454 0x425c0f execute ../../src/gcc/ira.c:5613 The attached change fixes this ICE. Tested on hppa-unknown-linux-gnu, hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11. Committed to trunk, 4.9 and 5 branches. Dave -- John David Anglin dave.ang...@bell.net
2016-04-05 John David Anglin <dang...@gcc.gnu.org> * config/pa/predicates.md (integer_store_memory_operand): Accept REG+D operands with a large offset when reload_in_progress is true. (floating_point_store_memory_operand): Likewise. Index: config/pa/predicates.md =================================================================== --- config/pa/predicates.md (revision 234702) +++ config/pa/predicates.md (working copy) @@ -301,6 +301,9 @@ if (reg_plus_base_memory_operand (op, mode)) { + if (reload_in_progress) + return true; + /* Extract CONST_INT operand. */ if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); @@ -335,6 +338,9 @@ if (reg_plus_base_memory_operand (op, mode)) { + if (reload_in_progress) + return true; + /* Extract CONST_INT operand. */ if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op);