Disable TBAA in some uses of call_may_clobber_ref_p
authorJan Hubicka <jh@suse.cz>
Thu, 8 Oct 2020 15:15:58 +0000 (17:15 +0200)
committerJan Hubicka <jh@suse.cz>
Thu, 8 Oct 2020 15:23:16 +0000 (17:23 +0200)
* tree-nrv.c (dest_safe_for_nrv_p): Disable tbaa in
call_may_clobber_ref_p and ref_maybe_used_by_stmt_p.
* tree-tailcall.c (find_tail_calls): Likewise.
* tree-ssa-alias.c (call_may_clobber_ref_p): Add tbaa_p parameter.
* tree-ssa-alias.h (call_may_clobber_ref_p): Update prototype.
* tree-ssa-sccvn.c (vn_reference_lookup_3): Pass data->tbaa_p
to call_may_clobber_ref_p_1.

gcc/tree-nrv.c
gcc/tree-ssa-alias.c
gcc/tree-ssa-alias.h
gcc/tree-ssa-sccvn.c
gcc/tree-tailcall.c

index 9d17a104f34c33bd979253afee819e6baaea53b8..df757f70e71ee9739d48f976ebaea76f53be26d5 100644 (file)
@@ -315,8 +315,8 @@ dest_safe_for_nrv_p (gcall *call)
   if (TREE_CODE (dest) == SSA_NAME)
     return true;
 
-  if (call_may_clobber_ref_p (call, dest)
-      || ref_maybe_used_by_stmt_p (call, dest))
+  if (call_may_clobber_ref_p (call, dest, false)
+      || ref_maybe_used_by_stmt_p (call, dest, false))
     return false;
 
   return true;
index 97255987e79bca2ca5afaa39a618de286f69d5ad..ac7e020c5e23e442ec4391232153080a62dc0cd9 100644 (file)
@@ -3320,12 +3320,12 @@ call_may_clobber_ref_p_1 (gcall *call, ao_ref *ref, bool tbaa_p)
    return true, otherwise return false.  */
 
 bool
-call_may_clobber_ref_p (gcall *call, tree ref)
+call_may_clobber_ref_p (gcall *call, tree ref, bool tbaa_p)
 {
   bool res;
   ao_ref r;
   ao_ref_init (&r, ref);
-  res = call_may_clobber_ref_p_1 (call, &r, true);
+  res = call_may_clobber_ref_p_1 (call, &r, tbaa_p);
   if (res)
     ++alias_stats.call_may_clobber_ref_p_may_alias;
   else
index 1dd02c0ea620fd18f9936a8094329b2daf0e5ac4..1561ead2941e304f939fb0989474f1b7eae96495 100644 (file)
@@ -128,7 +128,7 @@ extern bool ref_maybe_used_by_stmt_p (gimple *, ao_ref *, bool = true);
 extern bool stmt_may_clobber_global_p (gimple *);
 extern bool stmt_may_clobber_ref_p (gimple *, tree, bool = true);
 extern bool stmt_may_clobber_ref_p_1 (gimple *, ao_ref *, bool = true);
-extern bool call_may_clobber_ref_p (gcall *, tree);
+extern bool call_may_clobber_ref_p (gcall *, tree, bool = true);
 extern bool call_may_clobber_ref_p_1 (gcall *, ao_ref *, bool = true);
 extern bool stmt_kills_ref_p (gimple *, tree);
 extern bool stmt_kills_ref_p (gimple *, ao_ref *);
index 014b7bdfd01bd3ef5d14c3f54329515e60d50706..c139adb6130b4f0cd43e265c6bc88e9f40f61b28 100644 (file)
@@ -2586,7 +2586,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
       if (valueized_anything)
        {
          bool res = call_may_clobber_ref_p_1 (as_a <gcall *> (def_stmt),
-                                              ref);
+                                              ref, data->tbaa_p);
          for (unsigned i = 0; i < gimple_call_num_args (def_stmt); ++i)
            gimple_call_set_arg (def_stmt, i, oldargs[i]);
          if (!res)
index d81e921346056a8ce9b7198e59c9fd25a6b51c6a..44643bef5f18a332bb5fe114838cbca32b430b32 100644 (file)
@@ -523,7 +523,7 @@ find_tail_calls (basic_block bb, struct tailcall **ret)
   tree result_decl = DECL_RESULT (cfun->decl);
   if (result_decl
       && may_be_aliased (result_decl)
-      && ref_maybe_used_by_stmt_p (call, result_decl))
+      && ref_maybe_used_by_stmt_p (call, result_decl, false))
     return;
 
   /* We found the call, check whether it is suitable.  */
@@ -597,8 +597,8 @@ find_tail_calls (basic_block bb, struct tailcall **ret)
       if (TREE_CODE (var) != PARM_DECL
          && auto_var_in_fn_p (var, cfun->decl)
          && may_be_aliased (var)
-         && (ref_maybe_used_by_stmt_p (call, var)
-             || call_may_clobber_ref_p (call, var)))
+         && (ref_maybe_used_by_stmt_p (call, var, false)
+             || call_may_clobber_ref_p (call, var, false)))
        {
          if (!VAR_P (var))
            {