On September 6, 2020 9:38:45 AM GMT+02:00, Gary Oblock via Gcc <gcc@gcc.gnu.org> wrote: >>That's not a question? Are you asking why PHIs exist at all? >>They are the standard way to represent merging in SSA >>representations. You can iterate on the PHIs of a basic block, etc. > >Marc, > >I first worked with the SSA form twenty years ago so yes I am >aware of what a phi is... I've just never seen a compiler eliminate >an assignment of a variable to a constant and jam the constant into >the phi where the SSA variable should be. What a phi is all about >is representing data flow and a constant in the phi doesn't seem >to be related to that. I can deal with this but it seems that having to >crawl the phis looking for constants seems baroque. I would hope >there is a control that can suppress this or a transformation >that I can invoke to reverse it...
No, there isn't. We happily propagate constants into PHI nodes. Richard. > >Thanks, > >Gary >________________________________ >From: Marc Glisse <marc.gli...@inria.fr> >Sent: Saturday, September 5, 2020 11:29 PM >To: Gary Oblock <g...@amperecomputing.com> >Cc: gcc@gcc.gnu.org <gcc@gcc.gnu.org> >Subject: Re: A couple GIMPLE questions > >[EXTERNAL EMAIL NOTICE: This email originated from an external sender. >Please be mindful of safe email handling and proprietary information >protection practices.] > > >On Sat, 5 Sep 2020, Gary Oblock via Gcc wrote: > >> First off one of the questions just me being curious but >> second is quite serious. Note, this is GIMPLE coming >> into my optimization and not something I've modified. >> >> Here's the C code: >> >> type_t * >> do_comp( type_t *data, size_t len) >> { >> type_t *res; >> type_t *x = min_of_x( data, len); >> type_t *y = max_of_y( data, len); >> >> res = y; >> if ( x < y ) res = 0; >> return res; >> } >> >> And here's the resulting GIMPLE: >> >> ;; Function do_comp.constprop (do_comp.constprop.0, funcdef_no=5, >decl_uid=4392, cgraph_uid=3, symbol_order=68) (executed once) >> >> do_comp.constprop (struct type_t * data) >> { >> struct type_t * res; >> struct type_t * x; >> struct type_t * y; >> size_t len; >> >> <bb 5> [local count: 1073741824]: >> >> <bb 2> [local count: 1073741824]: >> x_2 = min_of_x (data_1(D), 10000); >> y_3 = max_of_y (data_1(D), 10000); >> if (x_2 < y_3) >> goto <bb 3>; [29.00%] >> else >> goto <bb 4>; [71.00%] >> >> <bb 3> [local count: 311385128]: >> >> <bb 4> [local count: 1073741824]: >> # res_4 = PHI <y_3(2), 0B(3)> >> return res_4; >> >> } >> >> The silly question first. In the "if" stmt how does GCC >> get those probabilities? Which it shows as 29.00% and >> 71.00%. I believe they should both be 50.00%. > >See the profile_estimate pass dump. One branch makes the function >return >NULL, which makes gcc guess that it may be a bit less likely than the >other. Those are heuristics, which are tuned to help on average, but of >course they are sometimes wrong. > >> The serious question is what is going on with this phi? >> res_4 = PHI <y_3(2), 0B(3)> >> >> This makes zero sense practicality wise to me and how is >> it supposed to be recognized and used? Note, I really do >> need to transform the "0B" into something else for my >> structure reorganization optimization. > >That's not a question? Are you asking why PHIs exist at all? They are >the >standard way to represent merging in SSA representations. You can >iterate >on the PHIs of a basic block, etc. > >> 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. > >Could you please get rid of this when posting on public mailing lists? > >-- >Marc Glisse