We were marking more than necessary in aarch64_set_frame_expr.
Fold the reduced function into aarch64_expand_prologue as necessary.

        * config/aarch64/aarch64.c (aarch64_set_frame_expr): Remove.
        (aarch64_expand_prologue): Use REG_CFA_ADJUST_CFA directly,
        or no special markup at all.
---
 gcc/config/aarch64/aarch64.c | 56 ++++++++++++--------------------------------
 1 file changed, 15 insertions(+), 41 deletions(-)

diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 9a11e05..dcca446 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -1918,22 +1918,6 @@ aarch64_layout_frame (void)
   cfun->machine->frame.laid_out = true;
 }
 
-/* Make the last instruction frame-related and note that it performs
-   the operation described by FRAME_PATTERN.  */
-
-static void
-aarch64_set_frame_expr (rtx frame_pattern)
-{
-  rtx insn;
-
-  insn = get_last_insn ();
-  RTX_FRAME_RELATED_P (insn) = 1;
-  RTX_FRAME_RELATED_P (frame_pattern) = 1;
-  REG_NOTES (insn) = alloc_EXPR_LIST (REG_FRAME_RELATED_EXPR,
-                                     frame_pattern,
-                                     REG_NOTES (insn));
-}
-
 static bool
 aarch64_register_saved_on_entry (int regno)
 {
@@ -2243,29 +2227,29 @@ aarch64_expand_prologue (void)
        {
          rtx op0 = gen_rtx_REG (Pmode, IP0_REGNUM);
          emit_move_insn (op0, GEN_INT (-frame_size));
-         emit_insn (gen_add2_insn (stack_pointer_rtx, op0));
-         aarch64_set_frame_expr (gen_rtx_SET
-                                 (Pmode, stack_pointer_rtx,
-                                  plus_constant (Pmode,
-                                                 stack_pointer_rtx,
-                                                 -frame_size)));
+         insn = emit_insn (gen_add2_insn (stack_pointer_rtx, op0));
+
+         add_reg_note (insn, REG_CFA_ADJUST_CFA,
+                       gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+                                    plus_constant (Pmode, stack_pointer_rtx,
+                                                   -frame_size)));
+         RTX_FRAME_RELATED_P (insn) = 1;
        }
       else if (frame_size > 0)
        {
-         if ((frame_size & 0xfff) != frame_size)
+         int hi_ofs = frame_size & 0xfff000;
+         int lo_ofs = frame_size & 0x000fff;
+
+         if (hi_ofs)
            {
              insn = emit_insn (gen_add2_insn
-                               (stack_pointer_rtx,
-                                GEN_INT (-(frame_size
-                                           & ~(HOST_WIDE_INT)0xfff))));
+                               (stack_pointer_rtx, GEN_INT (-hi_ofs)));
              RTX_FRAME_RELATED_P (insn) = 1;
            }
-         if ((frame_size & 0xfff) != 0)
+         if (lo_ofs)
            {
              insn = emit_insn (gen_add2_insn
-                               (stack_pointer_rtx,
-                                GEN_INT (-(frame_size
-                                           & (HOST_WIDE_INT)0xfff))));
+                               (stack_pointer_rtx, GEN_INT (-lo_ofs)));
              RTX_FRAME_RELATED_P (insn) = 1;
            }
        }
@@ -2286,10 +2270,6 @@ aarch64_expand_prologue (void)
              insn = emit_insn (gen_add2_insn (stack_pointer_rtx,
                                               GEN_INT (-offset)));
              RTX_FRAME_RELATED_P (insn) = 1;
-             aarch64_set_frame_expr (gen_rtx_SET
-                                     (Pmode, stack_pointer_rtx,
-                                      gen_rtx_MINUS (Pmode, stack_pointer_rtx,
-                                                     GEN_INT (offset))));
 
              aarch64_save_callee_saves (DImode, fp_offset, R29_REGNUM,
                                         R30_REGNUM, false);
@@ -2302,14 +2282,8 @@ aarch64_expand_prologue (void)
          insn = emit_insn (gen_add3_insn (hard_frame_pointer_rtx,
                                           stack_pointer_rtx,
                                           GEN_INT (fp_offset)));
-         aarch64_set_frame_expr (gen_rtx_SET
-                                 (Pmode, hard_frame_pointer_rtx,
-                                  plus_constant (Pmode,
-                                                 stack_pointer_rtx,
-                                                 fp_offset)));
          RTX_FRAME_RELATED_P (insn) = 1;
-         insn = emit_insn (gen_stack_tie (stack_pointer_rtx,
-                                          hard_frame_pointer_rtx));
+         emit_insn (gen_stack_tie (stack_pointer_rtx, hard_frame_pointer_rtx));
        }
       else
        {
-- 
1.8.3.1

Reply via email to