https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67756
Bernd Edlinger <bernd.edlinger at hotmail dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |vmakarov at redhat dot com --- Comment #5 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- kernel-ice.c.231r.ira: (insn 47 45 48 6 (parallel [ (set (reg:SI 138) (and:SI (ne:SI (reg/v:SI 112 [ max_linksD.4175 ]) (const_int 0 [0])) (leu:SI (reg/v:SI 112 [ max_linksD.4175 ]) (reg:SI 114 [ _15 ])))) (clobber (reg:CC 100 cc)) ]) kernel-ice.c:49 262 {*and_scc_scc_nodom} (expr_list:REG_DEAD (reg:SI 114 [ _15 ]) which looks like alternative#0 kernel-ice.c.232r.reload: (insn 47 118 48 6 (parallel [ (set (reg/v:SI 1 r1 [orig:112 max_linksD.4175 ] [112]) (and:SI (ne:SI (reg/v:SI 1 r1 [orig:112 max_linksD.4175 ] [112]) (const_int 0 [0])) (leu:SI (reg/v:SI 1 r1 [orig:112 max_linksD.4175 ] [112]) (reg:SI 2 r2 [orig:114 _15 ] [114])))) (clobber (reg:CC 100 cc)) ]) kernel-ice.c:49 262 {*and_scc_scc_nodom} (nil)) which looks wrong, because (define_insn_and_split "*and_scc_scc_nodom" [(set (match_operand:SI 0 "s_register_operand" "=&Ts,&Ts,&Ts") (and:SI (match_operator:SI 3 "arm_comparison_operator" [(match_operand:SI 1 "s_register_operand" "r,r,0") (match_operand:SI 2 "arm_add_operand" "rIL,0,rIL")]) (match_operator:SI 6 "arm_comparison_operator" [(match_operand:SI 4 "s_register_operand" "r,r,r") (match_operand:SI 5 "arm_add_operand" "rIL,rIL,rIL")]))) reload uses alternative#2 which defines op[0] as early clobber "&Ts", and op[1] identical to op[0], but now we have op[4] clobbered. This seems to be another LRA bug. Right? My patch from yesterday makes no difference here, but what's funny is, that the set register was originally r138 but now the dump says "set (reg/v:SI 1 r1 [orig:112 ...".