[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 --- Comment #9 from Jiu Fu Guo --- (In reply to CVS Commits from comment #7) this comment should be linked to PR111324.
[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 Jiu Fu Guo changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution|--- |FIXED --- Comment #8 from Jiu Fu Guo --- Fix is committed via r14-3913-g8d8bc560b6ab7f3153db23ffb37157528e5b2c9a.
[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 --- Comment #7 from CVS Commits --- The master branch has been updated by Jiu Fu Guo : https://gcc.gnu.org/g:55b22a6f630e76a0be913ced8bf1b017eaffd89b commit r14-4082-g55b22a6f630e76a0be913ced8bf1b017eaffd89b Author: Jiufu Guo Date: Wed Sep 13 16:12:05 2023 +0800 use local range for one more pattern in match.pd For "get_global_range_query" SSA_NAME_RANGE_INFO can be queried. For "get_range_query", it could get more context-aware range info. And look at the implementation of "get_range_query", it returns global range if no local fun info. ATTRIBUTE_RETURNS_NONNULL inline range_query * get_range_query (const struct function *fun) { return (fun && fun->x_range_query) ? fun->x_range_query : _ranges; } So, using "get_range_query" would cover more case. For example, the test case of "pr111303.c". PR middle-end/111303 gcc/ChangeLog: * match.pd ((t * 2) / 2): Update pattern. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/pr111303.c: New test.
[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 --- Comment #6 from CVS Commits --- The master branch has been updated by Jiu Fu Guo : https://gcc.gnu.org/g:8d8bc560b6ab7f3153db23ffb37157528e5b2c9a commit r14-3913-g8d8bc560b6ab7f3153db23ffb37157528e5b2c9a Author: Jiufu Guo Date: Wed Sep 6 21:38:11 2023 +0800 Checking undefined_p before using the vr For pattern "(X + C) / N": "div (plus@3 @0 INTEGER_CST@1) INTEGER_CST@2)", Even if "X" has value-range and "X + C" does not overflow, "@3" may still be undefined. Like below example: _3 = _2 + -5; if (0 != 0) goto ; [34.00%] else goto ; [66.00%] ;; succ: 3 ;; 4 ;; basic block 3, loop depth 0 ;; pred: 2 _5 = _3 / 5; ;; succ: 4 The whole pattern "(_2 + -5 ) / 5" is in "bb 3", but "bb 3" would be unreachable (because "if (0 != 0)" is always false). And "get_range_query (cfun)->range_of_expr (vr3, @3)" is checked in "bb 3", "range_of_expr" gets an "undefined vr3". Where "@3" is "_5". So, before using "vr3", it would be safe to check "!vr3.undefined_p ()". PR tree-optimization/111303 gcc/ChangeLog: * match.pd ((X - N * M) / N): Add undefined_p checking. ((X + N * M) / N): Likewise. ((X + C) div_rshift N): Likewise. gcc/testsuite/ChangeLog: * gcc.dg/pr111303.c: New test.
[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 Andrew Pinski changed: What|Removed |Added CC||zhendong.su at inf dot ethz.ch --- Comment #5 from Andrew Pinski --- *** Bug 111355 has been marked as a duplicate of this bug. ***
[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 Andrew Pinski changed: What|Removed |Added Target Milestone|--- |14.0
[Bug tree-optimization/111303] [14 Regression] ICE: in type, at value-range.h:869
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111303 Andrew Pinski changed: What|Removed |Added Summary|ICE: in type, at|[14 Regression] ICE: in |value-range.h:869 |type, at value-range.h:869 Keywords||ice-on-valid-code Status|NEW |ASSIGNED Component|c |tree-optimization