* [PATCH] Fix PR81403
@ 2017-07-18 7:32 Richard Biener
0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2017-07-18 7:32 UTC (permalink / raw)
To: gcc-patches
The following fixes VN simplification during PHI translation where we
can assign value-numbers to new expressions in different context and thus
have to reset flow-sensitive SSA info like we do during VN.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard.
2017-07-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/80620
PR tree-optimization/81403
* tree-ssa-pre.c (phi_translate_1): Clear range and points-to
info when re-using a VN table entry.
* gcc.dg/torture/pr80620.c: New testcase.
* gcc.dg/torture/pr81403.c: Likewise.
Index: gcc/tree-ssa-pre.c
===================================================================
--- gcc/tree-ssa-pre.c (revision 250270)
+++ gcc/tree-ssa-pre.c (working copy)
@@ -1489,6 +1489,45 @@ phi_translate_1 (pre_expr expr, bitmap_s
PRE_EXPR_NARY (expr) = nary;
new_val_id = nary->value_id;
get_or_alloc_expression_id (expr);
+ /* When we end up re-using a value number make sure that
+ doesn't have unrelated (which we can't check here)
+ range or points-to info on it. */
+ if (result
+ && INTEGRAL_TYPE_P (TREE_TYPE (result))
+ && SSA_NAME_RANGE_INFO (result)
+ && ! SSA_NAME_IS_DEFAULT_DEF (result))
+ {
+ if (! VN_INFO (result)->info.range_info)
+ {
+ VN_INFO (result)->info.range_info
+ = SSA_NAME_RANGE_INFO (result);
+ VN_INFO (result)->range_info_anti_range_p
+ = SSA_NAME_ANTI_RANGE_P (result);
+ }
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "clearing range info of ");
+ print_generic_expr (dump_file, result);
+ fprintf (dump_file, "\n");
+ }
+ SSA_NAME_RANGE_INFO (result) = NULL;
+ }
+ else if (result
+ && POINTER_TYPE_P (TREE_TYPE (result))
+ && SSA_NAME_PTR_INFO (result)
+ && ! SSA_NAME_IS_DEFAULT_DEF (result))
+ {
+ if (! VN_INFO (result)->info.ptr_info)
+ VN_INFO (result)->info.ptr_info
+ = SSA_NAME_PTR_INFO (result);
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "clearing points-to info of ");
+ print_generic_expr (dump_file, result);
+ fprintf (dump_file, "\n");
+ }
+ SSA_NAME_PTR_INFO (result) = NULL;
+ }
}
else
{
Index: gcc/testsuite/gcc.dg/torture/pr80620.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr80620.c (nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr80620.c (working copy)
@@ -0,0 +1,33 @@
+/* { dg-do run } */
+/* { dg-require-effective-target int32plus } */
+
+long long int a = -465274079317386463LL;
+int b = 856872806;
+int c = -1940894202;
+int d = 1718449211;
+int e = -392681565;
+unsigned long long int f = 13521452247506316486ULL;
+int g = -13194608;
+
+__attribute__((noinline, noclone))
+void foo ()
+{
+ if (!a - a)
+ c = b = 0;
+ else
+ d = 3UL * a == 0;
+ if (g / a)
+ e = 0 < -a + 500849970701012771LL + (unsigned long) -a;
+ else
+ f = 4081116982543369LL & a;
+}
+
+int
+main ()
+{
+ asm volatile ("" : : : "memory");
+ foo ();
+ if (f != 2818598057803777LL)
+ __builtin_abort ();
+ return 0;
+}
Index: gcc/testsuite/gcc.dg/torture/pr81403.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr81403.c (nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr81403.c (working copy)
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-require-effective-target int32plus } */
+
+short var_9 = 19581;
+unsigned char var_33 = 21;
+long long int var_55 = 286697804684061197LL;
+long long int var_59 = -1962393262513510540LL;
+long long int var_71 = 4731868609112929952LL;
+long long int var_773 = -4784633456247777769LL;
+short var_776 = 5894;
+long long int var_1321 = 7573221950916697355LL;
+unsigned char uc = 217;
+
+void foo()
+{
+ if (var_55)
+ var_71 = 0;
+ if (var_9 != ~(0 < uc))
+ var_773 = 0;
+ else
+ var_776 = 1 / ~var_9 * -1;
+ if (var_33)
+ var_59 = ~var_9 & 10393;
+ var_1321 = ~var_9;
+}
+int main()
+{
+ foo();
+ if (var_59 != 8320)
+ __builtin_abort ();
+ return 0;
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-07-18 7:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-18 7:32 [PATCH] Fix PR81403 Richard Biener
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).