This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/49419] [4.6/4.7 regression] gcc -O2 miscompiles gp2c
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 16 Jun 2011 18:18:56 +0000
- Subject: [Bug tree-optimization/49419] [4.6/4.7 regression] gcc -O2 miscompiles gp2c
- Auto-submitted: auto-generated
- References: <bug-49419-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49419
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-06-16 18:18:55 UTC ---
Created attachment 24548
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=24548
gcc47-vrp.patch
So, I've tried this patch for extract_range_from_assert.
It bootstrapped/regtested on x86_64-linux and i686-linux, but regressed
FAIL: g++.dg/tree-ssa/pr18178.C scan-tree-dump-times vrp1 "if " 1
(just the vrp1 dump checking and code removal, the assembly is the same at the
end).
The VR is just different (- is vanilla, + is with the patch).
Value ranges after VRP:
-i_1: [0, +INF(OVF)]
+i_1: [0, +INF]
a_3(D): VARYING
D.2084_4: VARYING
D.2090_7: VARYING
@@ -681,10 +927,10 @@ D.2094_11: VARYING
i_12: [1, +INF(OVF)]
D.2077_13: VARYING
.MEM_14: VARYING
-i_19: [-INF, D.2084_4 + -1] EQUIVALENCES: { i_1 } (1 elements)
-i_20: [0, +INF] EQUIVALENCES: { i_1 i_19 } (2 elements)
+i_19: [0, +INF] EQUIVALENCES: { } (0 elements)
+i_20: [0, +INF] EQUIVALENCES: { i_19 } (1 elements)
a_21: ~[0B, 0B] EQUIVALENCES: { a_3(D) } (1 elements)
-D.2084_22: [i_19 + 1, +INF] EQUIVALENCES: { D.2084_4 } (1 elements)
+D.2084_22: [1, +INF] EQUIVALENCES: { D.2084_4 } (1 elements)
D.2077_23: ~[0B, 0B] EQUIVALENCES: { D.2077_13 } (1 elements)
but resulted in:
Folding statement: if (i_20 >= D.2084_22)
-Folding predicate i_20 >= D.2084_22 to 0
-Folded into: if (0 != 0)
-
+Not folded
So, not sure if I should push this anyway (with adjusting/removing the
testcase), or not.