[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc
Subject:    Re: gsi_remove on a call
From:       Gary Oblock via Gcc <gcc () gcc ! gnu ! org>
Date:       2020-10-28 17:31:17
Message-ID: BYAPR01MB546489B591554ADDE475AE7FC6170 () BYAPR01MB5464 ! prod ! exchangelabs ! com
[Download RAW message or body]

Martin,

After some digging and a little luck, I found that this does what I wanted:

cgraph_update_edges_for_call_stmt ( stmt, gimple_call_fndecl ( stmt), NULL);

Thanks,

Gary
________________________________
From: Martin Jambor <mjambor@suse.cz>
Sent: Tuesday, October 27, 2020 5:44 AM
To: Gary Oblock <gary@amperecomputing.com>; gcc@gcc.gnu.org <gcc@gcc.gnu.org>
Subject: Re: gsi_remove on a call

[EXTERNAL EMAIL NOTICE: This email originated from an external sender. Please be \
mindful of safe email handling and proprietary information protection practices.]


On Tue, Oct 27 2020, Gary Oblock via Gcc wrote:
> I'm running into grief in verify_node in cgraph.c
> when I use gsi_remove on a call statement.
> 
> Specifically it's a free statement which I've replaced
> with other free statements as part of my structure
> reorg optimizations. Note, in other working code
> I do this with malloc and it doesn't seem to be a problem.
> 
> Where it happens it's trying to look at the call graph edges.
> Is there a way to remove the edge in question or mark it
> to be ignored?

Have you tried using cgraph_edge::set_call_stmt to update the edge?

> I see that line below about built in unreachable
> and wonder if I'm supposed to set the decl to that but I
> don't see others doing it so...

The comment you quoted explains why __builtin_unreachable is special.

Martin

> 
> Here's the code in cgraph (e->call_stmt is the free in question:)
> 
> if (gimple_has_body_p (e->caller->decl)
> && !e->caller->inlined_to
> && !e->speculative
> /* Optimized out calls are redirected to __builtin_unreachable.  */
> && (e->count.nonzero_p ()
> > > ! e->callee->decl
> > > !fndecl_built_in_p (e->callee->decl, BUILT_IN_UNREACHABLE))
> && count == ENTRY_BLOCK_PTR_FOR_FN(DECL_STRUCT_FUNCTION  (decl))->count
> && (!e->count.ipa_p ()
> && e->count.differs_from_p (gimple_bb (e->call_stmt)->count)))
> {
> > 
> 
> Thanks,
> 
> Gary
> 
> 
> 
> 
> 
> 
> CONFIDENTIALITY NOTICE: This e-mail message, including any attachments, is for the \
> sole use of the intended recipient(s) and contains information that is confidential \
> and proprietary to Ampere Computing or its subsidiaries. It is to be used solely \
> for the purpose of furthering the parties' business relationship. Any unauthorized \
> review, copying, or distribution of this email (or any attachments thereto) is \
> strictly prohibited. If you are not the intended recipient, please contact the \
> sender immediately and permanently delete the original and any copies of this email \
> and any attachments thereto.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic