public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "aldyh at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug tree-optimization/114331] Missed optimization: indicate knownbits from dominating condition switch(trunc(a))
Date: Fri, 15 Mar 2024 07:51:59 +0000	[thread overview]
Message-ID: <bug-114331-4-cQkPEPwBea@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-114331-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #13 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
I think y'all have it all figured out.  Basically,

operator_cast::op1_range() is solving num_5 in the equation:

[111,111] = (short int) num_5

Where lhs is:
(gdb) p debug(lhs)
[irange] short int [111, 111]

And the bitmask is implicit, but correctly calculated:
(gdb) p debug(lhs.get_bitmask ())
MASK 0x0 VALUE 0x6f

And the range for num_5 is just varying.

You are looking at the true side of the truncating_cast_p() conditional in
op1_range.  Essentially, once it starts building the range it ignores known
bitmasks, which cause it to return an overly conservative range.

And yes, bitmasks are calculated on demand per the comment in get_bitmask:

  // The mask inherent in the range is calculated on-demand.  For               
  // example, [0,255] does not have known bits set by default.  This            
  // saves us considerable time, because setting it at creation incurs          
  // a large penalty for irange::set.  At the time of writing there             
  // was a 5% slowdown in VRP if we kept the mask precisely up to date          
  // at all times.  Instead, we default to -1 and set it when                   
  // explicitly requested.  However, this function will always return           
  // the correct mask.                                

We may have to revisit this.  Perhaps it doesn't matter any more, and we could
keep bitmasks up to date.  It would definitely make the dumps easier to read. 
Though, at least for this testcase the bitmask is correctly returned with
get_bitmask().

I think the analysis in comment 11 is spot on.  And no Andrew, it's not *my*
code, it all comes from the bit-ccp code :-P.

fold_range() should call update_bitmask(), which eventually calls
bit_value_binop() in the CCP code.

And yes Jakub, as you have noticed, BIT_IOR_EXPR, BIT_XOR_EXPR, and likely
other operators may need to be tweaked to take bitmasks into account.  I
wouldn't be surprised if there's a lot of low hanging fruit in this space.

  parent reply	other threads:[~2024-03-15  7:52 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-14  5:50 [Bug tree-optimization/114331] New: " xxs_chy at outlook dot com
2024-03-14  8:36 ` [Bug tree-optimization/114331] " rguenth at gcc dot gnu.org
2024-03-14  8:44 ` jakub at gcc dot gnu.org
2024-03-14 12:45 ` amacleod at redhat dot com
2024-03-14 13:21 ` jakub at gcc dot gnu.org
2024-03-14 16:33 ` amacleod at redhat dot com
2024-03-14 16:57 ` aldyh at gcc dot gnu.org
2024-03-14 17:08 ` jakub at gcc dot gnu.org
2024-03-14 17:28 ` amacleod at redhat dot com
2024-03-14 17:39 ` pinskia at gcc dot gnu.org
2024-03-14 17:58 ` jakub at gcc dot gnu.org
2024-03-14 18:29 ` amacleod at redhat dot com
2024-03-14 18:41 ` jakub at gcc dot gnu.org
2024-03-15  7:51 ` aldyh at gcc dot gnu.org [this message]
2024-03-15  8:01 ` jakub at gcc dot gnu.org
2024-03-15  8:05 ` jakub at gcc dot gnu.org

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=bug-114331-4-cQkPEPwBea@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@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).