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 tree-optimization/110852] [14 Regression] ICE: in get_predictor_value, at predict.cc:2695 with -O -fno-tree-fre and __builtin_expect() since r14-2219-geab57b825bcc35 Date: Thu, 04 Jan 2024 15:24:25 +0000 [thread overview] Message-ID: <bug-110852-4-NvJgVJh2yP@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-110852-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110852 --- Comment #6 from Jan Hubicka <hubicka at ucw dot cz> --- > which fixes the ICE by preferring PRED_BUILTIN_EXPECT* over others. > At least in this case when one operand is a constant and another one is > __builtin_expect* result that seems like the right choice to me, the fact that > one operand is constant doesn't mean the outcome of the binary operation is > unconditionally constant when the other operand is __builtin_expect* based. The code attempt to solve an problem with no good solution. If you have two probabilities that certain thing happens, the combination of them is neither correct (since we do not know that the both probabilities are independent) nor the resulting value corresponds to one of the two predictors contributing to the outcome. One exception is when one value is 100% sure, which is the case of PRED_UNCDITIONAL. So I would say we could simply special case 0% and 100% probability and pick the other predictor in that case. > But reading the > "This incorrectly takes precedence over more reliable heuristics predicting > that call > to cold noreturn is likely not going to happen." > in the description makes me wonder whether that is what we want always (though, > I must say I don't understand the cold noreturn argument because > PRED_COLD_FUNCTION is never returned from expr_expected_value_1. But Once expr_epeced_value finishes its job, it attaches precitor to an edge and later all predictions sitting on an edge are combined. If you end up declaring prediction as BUILTIN_EXPECT_WITH_PROBABILITY, the logic combining precitions will believe that the value is very reliable and will ignore other predictors. This is the PRED_FLAG_FIRST_MATCH mode. So computing uncertain probability and declaring it to be BUILTIN_EXPECT_WITH_PROBABILITY is worse than declaring it to be a predictor with PRED_DS_THEORY merging mode (which assumes that the value is detrmined by possibly unreliable heuristics) So I would go with special casing 0% and 100% predictors (which can be simply stripped and forgotten). For the rest we could probably introduce PRED_COMBINED_VALUE which will be like BUILTIN_EXPECT_WITH_PROBABILITY but with DS_THEORY meging mode. It is probably better than nothing, but certainly can not be trusted anymore. > > Oh, another thing is that before the patch there were two spots that merged the > predictors, one for the binary operands (which previously picked the weaker > predictor and now picks stronger predictor), but also in the PHI handling > (which still picks weaker predictor); shouldn't that be changed to match, > including the != -1 handling? PHI is even more fishy, since we have no idea of probability of entering the basic block with a given edge. We can probably ignore basic blocks that are already having profile_count of 0. Otherwise we may try to do DS theory combination of the incomming values. I can cook up a patch. (also fixing other profile related issue is very high on my TODO now)
next prev parent reply other threads:[~2024-01-04 15:24 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-07-30 9:02 [Bug tree-optimization/110852] New: [14 Regression] ICE: in get_predictor_value, at predict.cc:2695 with -O -fno-tree-fre and __builtin_expect() zsojka at seznam dot cz 2023-07-30 20:04 ` [Bug tree-optimization/110852] " pinskia at gcc dot gnu.org 2023-08-01 13:57 ` hubicka at gcc dot gnu.org 2023-10-17 12:23 ` rguenth at gcc dot gnu.org 2023-10-17 12:23 ` rguenth at gcc dot gnu.org 2023-10-22 23:40 ` [Bug tree-optimization/110852] [14 Regression] ICE: in get_predictor_value, at predict.cc:2695 with -O -fno-tree-fre and __builtin_expect() since r14-2219-geab57b825bcc35 sjames at gcc dot gnu.org 2023-11-13 3:27 ` pinskia at gcc dot gnu.org 2024-01-04 14:42 ` jakub at gcc dot gnu.org 2024-01-04 15:24 ` hubicka at ucw dot cz [this message] 2024-01-04 15:30 ` jakub at gcc dot gnu.org 2024-01-04 15:59 ` jakub at gcc dot gnu.org 2024-01-04 16:06 ` hubicka at ucw dot cz 2024-01-04 16:17 ` jakub at gcc dot gnu.org 2024-01-04 16:26 ` hubicka at ucw dot cz 2024-01-04 16:35 ` jakub at gcc dot gnu.org 2024-01-04 16:37 ` jakub at gcc dot gnu.org 2024-01-04 17:06 ` hubicka at ucw dot cz 2024-01-17 14:20 ` cvs-commit at gcc dot gnu.org 2024-01-17 14:22 ` hubicka 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-110852-4-NvJgVJh2yP@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: linkBe 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).