public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "jakub at gcc dot gnu.org" <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:30:41 +0000 [thread overview] Message-ID: <bug-110852-4-nHg2tjFQye@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 #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, what about following patch (which also fixes the ICE, would of course need to add the testcase) and doesn't regress any predict-*.c tests)? --- gcc/predict.cc.jj 2024-01-03 11:51:32.000000000 +0100 +++ gcc/predict.cc 2024-01-04 16:28:55.041507010 +0100 @@ -2583,44 +2583,36 @@ expr_expected_value_1 (tree type, tree o if (get_gimple_rhs_class (code) == GIMPLE_BINARY_RHS) { tree res; - tree nop0 = op0; - tree nop1 = op1; - if (TREE_CODE (op0) != INTEGER_CST) - { - /* See if expected value of op0 is good enough to determine the result. */ - nop0 = expr_expected_value (op0, visited, predictor, probability); - if (nop0 - && (res = fold_build2 (code, type, nop0, op1)) != NULL - && TREE_CODE (res) == INTEGER_CST) - return res; - if (!nop0) - nop0 = op0; - } enum br_predictor predictor2; HOST_WIDE_INT probability2; - if (TREE_CODE (op1) != INTEGER_CST) + tree nop0 = expr_expected_value (op0, visited, predictor, probability); + if (!nop0) + { + nop0 = op0; + *predictor = PRED_UNCONDITIONAL; + *probability = -1; + } + tree nop1 = expr_expected_value (op1, visited, &predictor2, &probability2); + if (!nop1) + { + nop1 = op1; + predictor2 = PRED_UNCONDITIONAL; + probability2 = -1; + } + /* Finally see if we have two known values. */ + res = fold_build2 (code, type, nop0, nop1); + if (TREE_CODE (res) == INTEGER_CST) { - /* See if expected value of op1 is good enough to determine the result. */ - nop1 = expr_expected_value (op1, visited, &predictor2, &probability2); - if (nop1 - && (res = fold_build2 (code, type, op0, nop1)) != NULL - && TREE_CODE (res) == INTEGER_CST) + /* If one operand is PRED_UNCONDITIONAL, aka directly or indirectly + constant, prefer the other predictor. */ + if (predictor2 == PRED_UNCONDITIONAL) + return res; + if (*predictor == PRED_UNCONDITIONAL) { *predictor = predictor2; *probability = probability2; return res; } - if (!nop1) - nop1 = op1; - } - if (nop0 == op0 || nop1 == op1) - return NULL; - /* Finally see if we have two known values. */ - res = fold_build2 (code, type, nop0, nop1); - if (TREE_CODE (res) == INTEGER_CST - && TREE_CODE (nop0) == INTEGER_CST - && TREE_CODE (nop1) == INTEGER_CST) - { /* Combine binary predictions. */ if (*probability != -1 || probability2 != -1) { @@ -2631,6 +2623,9 @@ expr_expected_value_1 (tree type, tree o if (predictor2 < *predictor) *predictor = predictor2; + if (*predictor != PRED_BUILTIN_EXPECT + && *predictor != PRED_BUILTIN_EXPECT_WITH_PROBABILITY) + *probability = -1; return res; }
next prev parent reply other threads:[~2024-01-04 15:30 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 2024-01-04 15:30 ` jakub at gcc dot gnu.org [this message] 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-nHg2tjFQye@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).