https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119493

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jamborm at gcc dot gnu.org

--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For musttail, perhaps SRA could avoid changing the path from musttail call
return to the return stmt.
I've tried
--- gcc/tree-sra.cc.jj  2025-01-02 11:23:27.527363147 +0100
+++ gcc/tree-sra.cc     2025-03-31 09:28:36.535135797 +0200
@@ -1668,9 +1668,11 @@ scan_function (void)
              t = gimple_call_lhs (stmt);
              if (t && !disqualify_if_bad_bb_terminating_stmt (stmt, t, NULL))
                {
+                 if (gimple_call_must_tail_p (as_a <gcall *> (stmt)))
+                   disqualify_base_of_expr (t, "result of musttail call.");
                  /* If the STMT is a call to DEFERRED_INIT, avoid setting
                     cannot_scalarize_away_bitmap.  */
-                 if (gimple_call_internal_p (stmt, IFN_DEFERRED_INIT))
+                 else if (gimple_call_internal_p (stmt, IFN_DEFERRED_INIT))
                    ret |= !!build_access_from_expr_1 (t, stmt, true);
                  else
                    ret |= build_access_from_expr (t, stmt, true);
but that is insufficient for #c0 with -O2,
instead of
  D.2926 = foo (D.2927); [must tail call]
  SR.5_16 = D.2926.n_recurses;

  <bb 6> [local count: 116930483]:
  # SR.5_22 = PHI <0(4), SR.5_16(5)>

  <bb 7> [local count: 354334800]:
  # SR.4_24 = PHI <0(3), SR.5_22(6)>

  <bb 8> [local count: 1073741824]:
  # _9 = PHI <0(2), SR.4_24(7)>
  D.2905.n_recurses = _9;
  return D.2905;
we get
  D.2926 = foo (D.2927); [must tail call]
  pretmp_9 = D.2926.n_recurses;

  <bb 6> [local count: 116930483]:
  # prephitmp_1 = PHI <0(4), pretmp_9(5)>

  <bb 7> [local count: 354334800]:
  # SR.4_24 = PHI <0(3), prephitmp_1(6)>

  <bb 8> [local count: 1073741824]:
  # _4 = PHI <0(2), SR.4_24(7)>
  D.2905.n_recurses = _4;
  return D.2905;
which is pretty much the same thing.

Reply via email to