I do not know what the USEs are really for, so I do not know if using
just the pattern here is correct.  Using the full insn is probably not
correct either though.


2017-02-21  Segher Boessenkool  <seg...@kernel.crashing.org>

        * config/pa/pa.c (pa_combine_instructions): Do not share RTL.  Make
        the special USEs with the pattern of the insn, not the insn itself.

---
 gcc/config/pa/pa.c | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index b0b3311..3f7b2c7 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -9178,17 +9178,17 @@ pa_combine_instructions (void)
                  || anchor_attr == PA_COMBINE_TYPE_FMPY))
            {
              /* Emit the new instruction and delete the old anchor.  */
-             emit_insn_before (gen_rtx_PARALLEL
-                               (VOIDmode,
-                                gen_rtvec (2, PATTERN (anchor),
-                                           PATTERN (floater))),
-                               anchor);
+             rtvec vtemp = gen_rtvec (2, copy_rtx (PATTERN (anchor)),
+                                      copy_rtx (PATTERN (floater)));
+             rtx temp = gen_rtx_PARALLEL (VOIDmode, vtemp);
+             emit_insn_before (temp, anchor);
 
              SET_INSN_DELETED (anchor);
 
              /* Emit a special USE insn for FLOATER, then delete
                 the floating insn.  */
-             emit_insn_before (gen_rtx_USE (VOIDmode, floater), floater);
+             temp = copy_rtx (PATTERN (floater));
+             emit_insn_before (gen_rtx_USE (VOIDmode, temp), floater);
              delete_insn (floater);
 
              continue;
@@ -9196,21 +9196,19 @@ pa_combine_instructions (void)
          else if (floater
                   && anchor_attr == PA_COMBINE_TYPE_UNCOND_BRANCH)
            {
-             rtx temp;
              /* Emit the new_jump instruction and delete the old anchor.  */
-             temp
-               = emit_jump_insn_before (gen_rtx_PARALLEL
-                                        (VOIDmode,
-                                         gen_rtvec (2, PATTERN (anchor),
-                                                    PATTERN (floater))),
-                                        anchor);
+             rtvec vtemp = gen_rtvec (2, copy_rtx (PATTERN (anchor)),
+                                      copy_rtx (PATTERN (floater)));
+             rtx temp = gen_rtx_PARALLEL (VOIDmode, vtemp);
+             temp = emit_jump_insn_before (temp, anchor);
 
              JUMP_LABEL (temp) = JUMP_LABEL (anchor);
              SET_INSN_DELETED (anchor);
 
              /* Emit a special USE insn for FLOATER, then delete
                 the floating insn.  */
-             emit_insn_before (gen_rtx_USE (VOIDmode, floater), floater);
+             temp = copy_rtx (PATTERN (floater));
+             emit_insn_before (gen_rtx_USE (VOIDmode, temp), floater);
              delete_insn (floater);
              continue;
            }
-- 
1.9.3

Reply via email to