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.

Reply via email to