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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2023-04-24
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
             Status|UNCONFIRMED                 |ASSIGNED
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
#0  ipa_param_body_adjustments::modify_expression (this=0x4b1f040, 
    expr_p=0x7ffff37222b8, convert=true)
    at /space/rguenther/src/gcc/gcc/ipa-param-manipulation.cc:1867
#1  0x00000000016f7dc5 in ipa_param_body_adjustments::modify_assignment (
    this=0x4b1f040, stmt=<gimple_assign 0x7ffff33ecdc0>, 
    extra_stmts=0x7fffffffd0a8)
    at /space/rguenther/src/gcc/gcc/ipa-param-manipulation.cc:1890
#2  0x00000000016f927a in ipa_param_body_adjustments::modify_gimple_stmt (
    this=0x4b1f040, stmt=0x7fffffffd168, extra_stmts=0x7fffffffd0a8, 
    orig_stmt=<gimple_assign 0x7ffff37fa320>)
    at /space/rguenther/src/gcc/gcc/ipa-param-manipulation.cc:2273
#3  0x0000000001abb925 in remap_gimple_stmt (
    stmt=<gimple_assign 0x7ffff37fa320>, id=0x7fffffffd730)
    at /space/rguenther/src/gcc/gcc/tree-inline.cc:1961

Supposedly the easiest would be to make any is_gimple_reg_type IPA SRA
replacement (I suppose all are ...) either address-taken or
DECL_NOT_GIMPLE_REG_P.

diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc
index 42488ee09c3..473d759f983 100644
--- a/gcc/ipa-param-manipulation.cc
+++ b/gcc/ipa-param-manipulation.cc
@@ -1384,6 +1384,8 @@ ipa_param_body_adjustments::common_initialization (tree
old_fndecl,
          DECL_CONTEXT (new_parm) = m_fndecl;
          TREE_USED (new_parm) = 1;
          DECL_IGNORED_P (new_parm) = 1;
+         if (is_gimple_reg_type (new_type))
+           DECL_NOT_GIMPLE_REG_P (new_parm) = 1;
          layout_decl (new_parm, 0);
          m_new_decls.quick_push (new_parm);


seems to work on the testcase I have.

Reply via email to