https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57032
--- Comment #10 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Richard Henderson from comment #9) > I think all of the bits touching reload internals stems > from the non-existence of define_memory_constraint when > the port was first written. > > I suspect that this is fixable with nothing more than > > (define_memory_constraint "Q" > "@internal normal memory operand" > (and (match_code "mem") > (match_test "GET_CODE (XEXP (op, 0)) != AND") > (match_test "memory_address_addr_space_p > (GET_MODE (op), XEXP (op, 0), > MEM_ADDR_SPACE (op))"))) Great, this fix brings bootstrap way further to libgomp, but now crashes with: /space/homedirs/uros/gcc-svn/trunk/libgomp/team.c: In function ‘gomp_team_start’: /space/homedirs/uros/gcc-svn/trunk/libgomp/team.c:836:1: internal compiler error: Max. number of generated reload insns per insn is achieved (90) However, this is different problem, and this one indeed looks like RA problem. There, RA wants to reload: (insn 280 2259 279 17 (set (reg:DI 364) (ashift:DI (zero_extend:DI (subreg/s/u:QI (reg/v:DI 98 [ bind ]) 0)) (ashift:DI (reg/f:DI 362) (const_int 3 [0x3])))) /space/homedirs/uros/gcc-svn/trunk/libgomp/team.c:334 83 {insbl} (nil)) and creates reload loop trying to move QImode subreg of DImode value to QI reg: Choosing alt 0 in insn 280: (0) =r (1) r (2) rI {insbl} Creating newreg=1020, assigning class GENERAL_REGS to r1020 280: r364:DI=zero_extend(r1020:QI)<<r362:DI<<0x3 Inserting insn reload before: 2443: r1020:QI=r98:DI#0 0 Non pseudo reload: reject++ alt=0,overall=607,losers=1,rld_nregs=1 0 Non pseudo reload: reject++ alt=1: Bad operand -- refuse Choosing alt 0 in insn 2443: (0) =r (1) rJ {*movqi} Creating newreg=1021, assigning class GENERAL_REGS to r1021 2443: r1020:QI=r1021:QI Inserting insn reload before: 2444: r1021:QI=r98:DI#0 0 Non pseudo reload: reject++ alt=0,overall=607,losers=1,rld_nregs=1 0 Non pseudo reload: reject++ alt=1: Bad operand -- refuse Choosing alt 0 in insn 2444: (0) =r (1) rJ {*movqi} Creating newreg=1022, assigning class GENERAL_REGS to r1022 2444: r1021:QI=r1022:QI Inserting insn reload before: ... I'll post the WIP patch and preprocessed source in a moment.