public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <richard.guenther@gmail.com>
To: Gary Oblock <gary@amperecomputing.com>,
	Gary Oblock via Gcc <gcc@gcc.gnu.org>,
	"gcc@gcc.gnu.org" <gcc@gcc.gnu.org>
Subject: Re: A couple GIMPLE questions
Date: Sun, 06 Sep 2020 18:43:11 +0200	[thread overview]
Message-ID: <907ECAC0-B1A3-4F4A-8246-E9027060D7F4@gmail.com> (raw)
In-Reply-To: <BYAPR01MB5464AA9A21834900FBC72038C62B0@BYAPR01MB5464.prod.exchangelabs.com>

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.glisse@inria.fr>
>Sent: Saturday, September 5, 2020 11:29 PM
>To: Gary Oblock <gary@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


  reply	other threads:[~2020-09-06 16:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-05 23:19 Gary Oblock
2020-09-06  6:29 ` Marc Glisse
2020-09-06  7:38   ` Gary Oblock
2020-09-06 16:43     ` Richard Biener [this message]
2020-09-06  7:42   ` Gary Oblock

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=907ECAC0-B1A3-4F4A-8246-E9027060D7F4@gmail.com \
    --to=richard.guenther@gmail.com \
    --cc=gary@amperecomputing.com \
    --cc=gcc@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).