https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117645
--- Comment #3 from John David Anglin <danglin at gcc dot gnu.org> --- I tried the following to disable late_combine2: diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc index 941ef3a7128..4dfc7da0f2f 100644 --- a/gcc/config/pa/pa.cc +++ b/gcc/config/pa/pa.cc @@ -586,6 +586,10 @@ pa_option_override (void) /* Disable -fstack-protector to suppress warning. */ flag_stack_protect = 0; + /* Disable late_combine (PR117645). */ + if (!OPTION_SET_P (flag_late_combine_instructions)) + flag_late_combine_instructions = 0; + /* We can't guarantee that .dword is available for 32-bit targets. */ if (UNITS_PER_WORD == 4) targetm.asm_out.aligned_op.di = NULL; This didn't fix problem. The initialization of [r3, r4] now gets deleted in peephole2. pr29581-2.c.327r.compgotos: ;; live kill 3 [%r3] 4 [%r4] (code_label 163 15 160 9 19 (nil) [2 uses]) (note 160 163 53 9 [bb 9] NOTE_INSN_BASIC_BLOCK) (insn 53 160 54 9 (set (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129]) (reg:DI 19 %r19 [ graphite_IV.10 ])) 130 {*pa.md:4286} (nil)) (insn 54 53 58 9 (set (reg:DI 31 %r31 [orig:130 graphite_IV.10+8 ] [130]) (reg:DI 20 %r20 [orig:91 graphite_IV.10+8 ] [91])) 130 {*pa.md:4286} (nil)) (insn 58 54 56 9 (clobber (reg:TI 3 %r3 [111])) -1 (expr_list:REG_UNUSED (reg:TI 3 %r3 [111]) (nil))) (insn 56 58 57 9 (set (reg:DI 3 %r3) (const_int 0 [0])) 130 {*pa.md:4286} (expr_list:REG_UNUSED (reg:DI 3 %r3) (nil))) (insn 57 56 179 9 (set (reg:DI 23 %r23 [136]) (const_int 1 [0x1])) 130 {*pa.md:4286} (nil)) (insn 179 57 182 9 (set (reg:DI 4 %r4 [orig:111+8 ] [111]) (reg:DI 23 %r23 [136])) 130 {*pa.md:4286} (expr_list:REG_DEAD (reg:DI 23 %r23 [136]) (expr_list:REG_UNUSED (reg:DI 4 %r4 [orig:111+8 ] [111]) (nil)))) (insn 182 179 59 9 (clobber (reg:TI 3 %r3 [111])) -1 (nil)) (insn 59 182 61 9 (set (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91]) (plus:TI (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91]) (reg:TI 3 %r3 [111]))) 181 {addti3} (expr_list:REG_DEAD (reg:TI 3 %r3 [111]) (nil))) (jump_insn 61 59 139 9 (set (pc) (if_then_else (gt (reg:DI 1 %r1 [ _20 ]) (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129])) (label_ref:DI 163) (pc))) 54 {*pa.md:1479} (nil) -> 163) pr29581-2.c.329r.peephole: (code_label 163 15 160 9 19 (nil) [2 uses]) (note 160 163 53 9 [bb 9] NOTE_INSN_BASIC_BLOCK) (insn 53 160 54 9 (set (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129]) (reg:DI 19 %r19 [ graphite_IV.10 ])) 130 {*pa.md:4286} (nil)) (insn 54 53 182 9 (set (reg:DI 31 %r31 [orig:130 graphite_IV.10+8 ] [130]) (reg:DI 20 %r20 [orig:91 graphite_IV.10+8 ] [91])) 130 {*pa.md:4286} (nil)) (insn 182 54 59 9 (clobber (reg:TI 3 %r3 [111])) -1 (nil)) (insn 59 182 61 9 (set (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91]) (plus:TI (reg:TI 19 %r19 [orig:91 graphite_IV.10 ] [91]) (reg:TI 3 %r3 [111]))) 181 {addti3} (expr_list:REG_DEAD (reg:TI 3 %r3 [111]) (nil))) (jump_insn 61 59 139 9 (set (pc) (if_then_else (gt (reg:DI 1 %r1 [ _20 ]) (reg:DI 22 %r22 [orig:129 graphite_IV.10 ] [129])) (label_ref:DI 163) (pc))) 54 {*pa.md:1479} (nil) -> 163) Probably, the TI mode add needs to be split after reload.