public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "hubicka at ucw dot cz" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug middle-end/113907] [14 regression] ICU miscompiled since on x86 since r14-5109-ga291237b628f41
Date: Thu, 15 Feb 2024 14:55:22 +0000	[thread overview]
Message-ID: <bug-113907-4-wex9keYEpZ@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-113907-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #36 from Jan Hubicka <hubicka at ucw dot cz> ---
> > Having a testcase is great. I was just playing with crafting one.
> > I am still concerned about value ranges in ipa-prop's jump functions.
> 
> Maybe my imagination is too limited, but if the ipa-prop's jump functions are
> computed before ICF is performed, then if you call function a which makes some
> assumptions about its arguments and SSA_NAMEs used within the function and
> results in some return range
> and another one which makes different assumptions and results in a different
> range,
> then even if the two functions are merged and either the range info is thrown
> away
> or unioned, I think if some functions call one or the other functions then
> still the original range assumptions still apply, depending on which one
> actually called.

I think the tescase should have functions A1 and A2 calling function B.
We need to arrange A1 to ICF into A2 and make A2 to have narrower value
range of parameter of B visible to ipa-prop. Since ICF happens first,
ipa-prop will not see A1's value range and specialize B for A2's range.
Which sould make it possible to trigger wrong code.
> 
> > Let me see if I can modify the testcase to also trigger problem with value
> > ranges in ipa-prop jump functions.
> > 
> > Not streaming value ranges is an omission on my side (I mistakely assumed we
> > do stream them).  We ought to stream them, since otherwise we will lose
> > propagated return value ranges in partitioned programs, which is pity.
> 
> Not sure if it is a good idea to start streaming them now in stage4, but sure,
> if we
> stream them (and I think we should mostly have code to be able to stream that

It probably makes sense to postpone VR stremaing for stage1.
(Even thouh it is not hard to do.)  I will add that to my TODO.

> because we can stream the ranges in the jump functions, just unsure about
> points-to stuff),
> then I still think best approach would be to merge regardless of range info,
> but in that case preferrably union instead of throw away.  The only question is
> where to do the merging for the LTO case (where to stream the union of the
> ranges and where to read it in and update for the SSA_NAMEs).

With LTO ICF streams in all function bodies for comparsion to WPA and
keeps the winning one, so it is about extending the comparator to keep
track of difference of value ranges for all compared pairs.

There is code to merge profiles, so at that place one can also do other
kind of metadata merging.  ICF needs a lot of love on this - value
range merging is just one example.  We also want to merge TBAA (so we
can merge different template instatiations) and other stuff.

At the moment we handle all other metadat conservatively (i.e. do not
attempt to merge, just refuse merging if it differs) so value ranges are
first that are handled aggressively with your patch.

I think it is fine, since most value range will be recomputed in late
optimization - the only exceptions are the return value ranges for now.

I will try to work on making this more systematic next stage1.

  parent reply	other threads:[~2024-02-15 14:55 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-13 12:49 [Bug middle-end/113907] New: " sjames at gcc dot gnu.org
2024-02-13 12:55 ` [Bug middle-end/113907] " sjames at gcc dot gnu.org
2024-02-13 13:00 ` sjames at gcc dot gnu.org
2024-02-13 13:00 ` rguenth at gcc dot gnu.org
2024-02-13 13:14 ` jakub at gcc dot gnu.org
2024-02-13 14:17 ` sjames at gcc dot gnu.org
2024-02-13 14:18 ` sjames at gcc dot gnu.org
2024-02-13 14:19 ` sjames at gcc dot gnu.org
2024-02-13 14:22 ` sjames at gcc dot gnu.org
2024-02-13 14:23 ` sjames at gcc dot gnu.org
2024-02-13 14:24 ` sjames at gcc dot gnu.org
2024-02-13 14:49 ` jakub at gcc dot gnu.org
2024-02-13 14:55 ` pinskia at gcc dot gnu.org
2024-02-13 14:56 ` sjames at gcc dot gnu.org
2024-02-13 14:58 ` sjames at gcc dot gnu.org
2024-02-13 15:11 ` jakub at gcc dot gnu.org
2024-02-13 15:17 ` pinskia at gcc dot gnu.org
2024-02-13 15:19 ` sjames at gcc dot gnu.org
2024-02-13 15:36 ` jakub at gcc dot gnu.org
2024-02-13 15:40 ` pinskia at gcc dot gnu.org
2024-02-13 15:46 ` jakub at gcc dot gnu.org
2024-02-13 15:58 ` jakub at gcc dot gnu.org
2024-02-13 16:00 ` pinskia at gcc dot gnu.org
2024-02-13 16:01 ` pinskia at gcc dot gnu.org
2024-02-13 16:07 ` jakub at gcc dot gnu.org
2024-02-13 16:30 ` jakub at gcc dot gnu.org
2024-02-14  9:16 ` jakub at gcc dot gnu.org
2024-02-14  9:24 ` rguenth at gcc dot gnu.org
2024-02-14  9:25 ` rguenth at gcc dot gnu.org
2024-02-14  9:52 ` jakub at gcc dot gnu.org
2024-02-14 10:35 ` rguenther at suse dot de
2024-02-14 15:52 ` hubicka at gcc dot gnu.org
2024-02-14 15:56 ` jakub at gcc dot gnu.org
2024-02-15 10:25 ` sjames at gcc dot gnu.org
2024-02-15 14:25 ` hubicka at gcc dot gnu.org
2024-02-15 14:36 ` jakub at gcc dot gnu.org
2024-02-15 14:36 ` jakub at gcc dot gnu.org
2024-02-15 14:43 ` rguenther at suse dot de
2024-02-15 14:45 ` rguenther at suse dot de
2024-02-15 14:55 ` hubicka at ucw dot cz [this message]
2024-02-15 14:57 ` hubicka at ucw dot cz
2024-02-15 15:02 ` jakub at gcc dot gnu.org
2024-02-16 14:40 ` hubicka at gcc dot gnu.org
2024-02-16 15:10 ` jakub at gcc dot gnu.org
2024-02-16 15:52 ` [Bug middle-end/113907] [12/13/14 " hubicka at gcc dot gnu.org
2024-02-16 15:55 ` jakub at gcc dot gnu.org
2024-02-16 16:08 ` hubicka at ucw dot cz
2024-02-16 16:27 ` jakub at gcc dot gnu.org
2024-02-16 16:45 ` hubicka at ucw dot cz
2024-02-16 17:01 ` amacleod at redhat dot com
2024-02-16 20:42 ` amacleod at redhat dot com
2024-02-22  9:22 ` sjames at gcc dot gnu.org
2024-03-08 15:34 ` jakub at gcc dot gnu.org
2024-03-09 17:10 ` law at gcc dot gnu.org
2024-03-09 21:04 ` [Bug ipa/113907] " pinskia at gcc dot gnu.org
2024-03-09 21:06 ` [Bug ipa/113907] [11/12/13/14 " pinskia at gcc dot gnu.org
2024-03-09 21:11 ` pinskia at gcc dot gnu.org
2024-03-11 11:21 ` jakub at gcc dot gnu.org
2024-03-13 14:07 ` hubicka at gcc dot gnu.org
2024-03-13 14:14 ` jakub at gcc dot gnu.org
2024-03-13 15:21 ` hubicka at ucw dot cz
2024-03-14 16:20 ` hubicka at gcc dot gnu.org
2024-03-14 16:39 ` hubicka at gcc dot gnu.org
2024-03-14 16:49 ` cvs-commit at gcc dot gnu.org
2024-03-14 16:53 ` jakub at gcc dot gnu.org
2024-03-15 23:29 ` cvs-commit at gcc dot gnu.org
2024-03-19 17:09 ` jakub at gcc dot gnu.org
2024-03-19 18:41 ` hubicka at ucw dot cz
2024-03-20  9:05 ` jamborm at gcc dot gnu.org
2024-03-20 18:13 ` jamborm at gcc dot gnu.org
2024-03-20 18:33 ` jakub at gcc dot gnu.org
2024-03-21 15:29 ` jakub at gcc dot gnu.org
2024-03-28 12:25 ` [Bug ipa/113907] [11/12/13/14 regression] ICU miscompiled " cvs-commit at gcc dot gnu.org
2024-04-02  8:44 ` hubicka at ucw dot cz
2024-04-04 21:17 ` jamborm at gcc dot gnu.org
2024-04-08  9:33 ` sjames at gcc dot gnu.org
2024-04-08  9:38 ` rguenth at gcc dot gnu.org
2024-04-08 16:56 ` cvs-commit at gcc dot gnu.org
2024-04-08 17:04 ` jamborm at gcc dot gnu.org
2024-04-09  9:47   ` Jan Hubicka
2024-04-09  9:47 ` hubicka at ucw dot cz
2024-05-07  7:45 ` [Bug ipa/113907] [11/12/13/14/15 " rguenth at gcc dot gnu.org
2024-05-14 15:06 ` cvs-commit at gcc dot gnu.org
2024-05-28 13:45 ` cvs-commit at gcc dot gnu.org
2024-06-11 10:37 ` cvs-commit at gcc dot gnu.org
2024-06-20 13:22 ` cvs-commit 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-113907-4-wex9keYEpZ@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).