[PATCH] Simplify conditions in EVRP, handle taken edge

kugan kugan.vivekanandarajah@linaro.org
Thu Oct 20 06:10:00 GMT 2016


Hi,


On 20/10/16 02:54, Andrew Pinski wrote:
> On Wed, Oct 19, 2016 at 1:01 AM, Christophe Lyon
> <christophe.lyon@linaro.org> wrote:
>> On 18 October 2016 at 09:34, Richard Biener <rguenther@suse.de> wrote:
>>> On Mon, 17 Oct 2016, Richard Biener wrote:
>>>
>>>>
>>>> This refactors propagation vs. substitution and handles condition
>>>> simplification properly as well as passing a known taken edge down
>>>> to the DOM walker (avoiding useless work and properly handling PHIs).
>>>>
>>>> If we do all the work it's stupid to not fold away dead code...
>>>>
>>>> Bootstrap and regtest pending on x86_64-unknown-linux-gnu.
>>>
>>> The following is what I applied, also fixing a spelling mistake noticed
>>> by Bernhard.
>>>
>> Hi Richard,
>>
>> This patch is causing regressions on aarch64. These tests now fail:
>
> So I looked into it and found the testcase themselves need to be changed.
> The functions are marked as noinline but not noclone.
> For an example:
> static void __attribute__((noinline))
> check_args_8 (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
>               int a8)
> ....
>

Indeed. In test12 and so on, arguments for check_args_8/check_args_24 is 
now becoming constant which enables ipa-cp to create specialized clones. 
Though this is good, in order to preserve the tested functionality, we 
need to add noclone attribute. Here is a patch to do this.

Regression tested on aatch64-linux-gnu. Is this OK for trunk?

Thanks,
Kugan

gcc/testsuite/ChangeLog:

2016-10-20  Kugan Vivekanandarajah  <kuganvi@linaro.org>

	* gcc.target/aarch64/test_frame_common.h: Add noclone attribute
	such that cloned verions of tested functions are not created.


> Thanks,
> Andrew
>
>>   gcc.target/aarch64/test_frame_12.c scan-assembler-times ldp\tx29,
>> x30, \\[sp, [0-9]+\\] 1
>>   gcc.target/aarch64/test_frame_12.c scan-assembler-times sub\tsp, sp, #[0-9]+ 1
>>   gcc.target/aarch64/test_frame_15.c scan-assembler-times stp\tx29,
>> x30, \\[sp, [0-9]+\\] 1
>>   gcc.target/aarch64/test_frame_15.c scan-assembler-times sub\tsp, sp, #[0-9]+ 1
>>   gcc.target/aarch64/test_frame_8.c scan-assembler-times ldr\tx30,
>> \\[sp, [0-9]+\\] 1
>>   gcc.target/aarch64/test_frame_8.c scan-assembler-times str\tx30,
>> \\[sp, [0-9]+\\] 1
>>
>> Christophe
>>
>>> Richard.
>>>
>>> 2016-10-18  Richard Biener  <rguenther@suse.de>
>>>
>>>         * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
>>>         not visited but non-executable predecessors.  Return taken edge.
>>>         Simplify conditions and refactor propagation vs. folding step.
>>>
>>>         * gcc.dg/tree-ssa/pr20318.c: Disable EVRP.
>>>         * gcc.dg/tree-ssa/pr21001.c: Likewise.
>>>         * gcc.dg/tree-ssa/pr21090.c: Likewise.
>>>         * gcc.dg/tree-ssa/pr21294.c: Likewise.
>>>         * gcc.dg/tree-ssa/pr21563.c: Likewise.
>>>         * gcc.dg/tree-ssa/pr23744.c: Likewise.
>>>         * gcc.dg/tree-ssa/pr25382.c: Likewise.
>>>         * gcc.dg/tree-ssa/pr68431.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp03.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp06.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp07.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp09.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp19.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp20.c: Likewise.
>>>         * gcc.dg/tree-ssa/vrp92.c: Likewise.
>>>         * gcc.dg/pr68217.c: Likewise.
>>>         * gcc.dg/predict-9.c: Likewise.
>>>         * gcc.dg/tree-prof/val-prof-5.c: Adjust.
>>>         * gcc.dg/predict-1.c: Likewise.
>>>
>>>
>>>
>>> Index: gcc/tree-vrp.c
>>> ===================================================================
>>> --- gcc/tree-vrp.c      (revision 241242)
>>> +++ gcc/tree-vrp.c      (working copy)
>>> @@ -10741,12 +10741,13 @@ evrp_dom_walker::before_dom_children (ba
>>>    gimple_stmt_iterator gsi;
>>>    edge e;
>>>    edge_iterator ei;
>>> -  bool has_unvisived_preds = false;
>>> +  bool has_unvisited_preds = false;
>>>
>>>    FOR_EACH_EDGE (e, ei, bb->preds)
>>> -    if (!(e->src->flags & BB_VISITED))
>>> +    if (e->flags & EDGE_EXECUTABLE
>>> +       && !(e->src->flags & BB_VISITED))
>>>        {
>>> -       has_unvisived_preds = true;
>>> +       has_unvisited_preds = true;
>>>         break;
>>>        }
>>>
>>> @@ -10756,7 +10757,7 @@ evrp_dom_walker::before_dom_children (ba
>>>        gphi *phi = gpi.phi ();
>>>        tree lhs = PHI_RESULT (phi);
>>>        value_range vr_result = VR_INITIALIZER;
>>> -      if (!has_unvisived_preds
>>> +      if (!has_unvisited_preds
>>>           && stmt_interesting_for_vrp (phi))
>>>         extract_range_from_phi_node (phi, &vr_result);
>>>        else
>>> @@ -10764,81 +10765,90 @@ evrp_dom_walker::before_dom_children (ba
>>>        update_value_range (lhs, &vr_result);
>>>      }
>>>
>>> +  edge taken_edge = NULL;
>>> +
>>>    /* Visit all other stmts and discover any new VRs possible.  */
>>>    for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
>>>      {
>>>        gimple *stmt = gsi_stmt (gsi);
>>> -      edge taken_edge;
>>>        tree output = NULL_TREE;
>>>        gimple *old_stmt = stmt;
>>>        bool was_noreturn = (is_gimple_call (stmt)
>>>                            && gimple_call_noreturn_p (stmt));
>>>
>>> -      /* TODO, if found taken_edge, we should visit (return it) and travel
>>> -        again to improve VR as done in DOM/SCCVN optimizations.  It should
>>> -        be done carefully as stmts might prematurely leave a BB like
>>> -        in EH.  */
>>> -      if (stmt_interesting_for_vrp (stmt))
>>> +      if (gcond *cond = dyn_cast <gcond *> (stmt))
>>> +       {
>>> +         vrp_visit_cond_stmt (cond, &taken_edge);
>>> +         if (taken_edge)
>>> +           {
>>> +             if (taken_edge->flags & EDGE_TRUE_VALUE)
>>> +               gimple_cond_make_true (cond);
>>> +             else if (taken_edge->flags & EDGE_FALSE_VALUE)
>>> +               gimple_cond_make_false (cond);
>>> +             else
>>> +               gcc_unreachable ();
>>> +           }
>>> +       }
>>> +      else if (stmt_interesting_for_vrp (stmt))
>>>         {
>>> +         edge taken_edge;
>>>           value_range vr = VR_INITIALIZER;
>>>           extract_range_from_stmt (stmt, &taken_edge, &output, &vr);
>>>           if (output
>>>               && (vr.type == VR_RANGE || vr.type == VR_ANTI_RANGE))
>>> -           update_value_range (output, &vr);
>>> -         else
>>> -           set_defs_to_varying (stmt);
>>> -
>>> -         /* Try folding stmts with the VR discovered.  */
>>> -         bool did_replace
>>> -           = replace_uses_in (stmt,
>>> -                              op_with_constant_singleton_value_range);
>>> -         if (fold_stmt (&gsi, follow_single_use_edges)
>>> -             || did_replace)
>>> -           update_stmt (gsi_stmt (gsi));
>>> -
>>> -         if (did_replace)
>>>             {
>>> -             /* If we cleaned up EH information from the statement,
>>> -                remove EH edges.  */
>>> -             if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt))
>>> -               bitmap_set_bit (need_eh_cleanup, bb->index);
>>> -
>>> -             /* If we turned a not noreturn call into a noreturn one
>>> -                schedule it for fixup.  */
>>> -             if (!was_noreturn
>>> -                 && is_gimple_call (stmt)
>>> -                 && gimple_call_noreturn_p (stmt))
>>> -               stmts_to_fixup.safe_push (stmt);
>>> +             update_value_range (output, &vr);
>>>
>>> -             if (gimple_assign_single_p (stmt))
>>> +             /* Set the SSA with the value range.  */
>>> +             if (INTEGRAL_TYPE_P (TREE_TYPE (output)))
>>>                 {
>>> -                 tree rhs = gimple_assign_rhs1 (stmt);
>>> -                 if (TREE_CODE (rhs) == ADDR_EXPR)
>>> -                   recompute_tree_invariant_for_addr_expr (rhs);
>>> +                 value_range *vr = get_value_range (output);
>>> +
>>> +                 if ((vr->type == VR_RANGE
>>> +                      || vr->type == VR_ANTI_RANGE)
>>> +                     && (TREE_CODE (vr->min) == INTEGER_CST)
>>> +                     && (TREE_CODE (vr->max) == INTEGER_CST))
>>> +                   set_range_info (output, vr->type, vr->min, vr->max);
>>>                 }
>>>             }
>>> +         else
>>> +           set_defs_to_varying (stmt);
>>> +       }
>>> +      else
>>> +       set_defs_to_varying (stmt);
>>>
>>> -         def_operand_p def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
>>> -         /* Set the SSA with the value range.  */
>>> -         if (def_p
>>> -             && TREE_CODE (DEF_FROM_PTR (def_p)) == SSA_NAME
>>> -             && INTEGRAL_TYPE_P (TREE_TYPE (DEF_FROM_PTR (def_p))))
>>> -           {
>>> -             tree def = DEF_FROM_PTR (def_p);
>>> -             value_range *vr = get_value_range (def);
>>> +      /* Try folding stmts with the VR discovered.  */
>>> +      bool did_replace
>>> +       = replace_uses_in (stmt, op_with_constant_singleton_value_range);
>>> +      if (fold_stmt (&gsi, follow_single_use_edges)
>>> +         || did_replace)
>>> +       update_stmt (gsi_stmt (gsi));
>>>
>>> -             if ((vr->type == VR_RANGE
>>> -                  || vr->type == VR_ANTI_RANGE)
>>> -                 && (TREE_CODE (vr->min) == INTEGER_CST)
>>> -                 && (TREE_CODE (vr->max) == INTEGER_CST))
>>> -               set_range_info (def, vr->type, vr->min, vr->max);
>>> +      if (did_replace)
>>> +       {
>>> +         /* If we cleaned up EH information from the statement,
>>> +            remove EH edges.  */
>>> +         if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt))
>>> +           bitmap_set_bit (need_eh_cleanup, bb->index);
>>> +
>>> +         /* If we turned a not noreturn call into a noreturn one
>>> +            schedule it for fixup.  */
>>> +         if (!was_noreturn
>>> +             && is_gimple_call (stmt)
>>> +             && gimple_call_noreturn_p (stmt))
>>> +           stmts_to_fixup.safe_push (stmt);
>>> +
>>> +         if (gimple_assign_single_p (stmt))
>>> +           {
>>> +             tree rhs = gimple_assign_rhs1 (stmt);
>>> +             if (TREE_CODE (rhs) == ADDR_EXPR)
>>> +               recompute_tree_invariant_for_addr_expr (rhs);
>>>             }
>>>         }
>>> -      else
>>> -       set_defs_to_varying (stmt);
>>>      }
>>>    bb->flags |= BB_VISITED;
>>> -  return NULL;
>>> +
>>> +  return taken_edge;
>>>  }
>>>
>>>  /* Restore/pop VRs valid only for BB when we leave BB.  */
>>> Index: gcc/testsuite/gcc.dg/pr68217.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/pr68217.c      (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/pr68217.c      (working copy)
>>> @@ -1,6 +1,5 @@
>>> -
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fdump-tree-vrp1" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */
>>>
>>>  int foo (void)
>>>  {
>>> Index: gcc/testsuite/gcc.dg/predict-1.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/predict-1.c    (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/predict-1.c    (working copy)
>>> @@ -23,4 +23,4 @@ void foo (int bound)
>>>      }
>>>  }
>>>
>>> -/* { dg-final { scan-tree-dump-times "guess loop iv compare heuristics of edge\[^:\]*: 2.0%" 5 "profile_estimate"} } */
>>> +/* { dg-final { scan-tree-dump-times "guess loop iv compare heuristics of edge\[^:\]*: 2.0%" 4 "profile_estimate"} } */
>>> Index: gcc/testsuite/gcc.dg/predict-9.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/predict-9.c    (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/predict-9.c    (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fdump-tree-profile_estimate" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-profile_estimate" } */
>>>
>>>  extern int global;
>>>  extern int global2;
>>> Index: gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c (working copy)
>>> @@ -6,7 +6,7 @@ main()
>>>  {
>>>         int i;
>>>         for (i = 0; i < 1000; i++)
>>> -               if (a[i])
>>> +               if (a[i] != 1)
>>>                         a[i]/=b;
>>>                 else
>>>                         a[i]/=b;
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr20318.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr20318.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr20318.c     (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile { target { ! keeps_null_pointer_checks } } } */
>>> -/* { dg-options "-O2 -fdump-tree-original -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */
>>> +/* { dg-options "-O2 -fdump-tree-original -fdump-tree-vrp1 -fdelete-null-pointer-checks -fdisable-tree-evrp" } */
>>>
>>>  extern int* f(int) __attribute__((returns_nonnull));
>>>  extern void eliminate ();
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr21001.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr21001.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr21001.c     (working copy)
>>> @@ -5,7 +5,7 @@
>>>     range information out of the conditional.  */
>>>
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-fre -fdump-tree-vrp1-details" } */
>>> +/* { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
>>>
>>>  int
>>>  foo (int a)
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr21090.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr21090.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr21090.c     (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */
>>>
>>>  int g, h;
>>>
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr21294.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr21294.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr21294.c     (working copy)
>>> @@ -4,7 +4,7 @@
>>>     allows us to eliminate the second "if" statement.  */
>>>
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1-details" } */
>>> +/* { dg-options "-O2 -fno-tree-dominator-opts -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
>>>
>>>  struct f {
>>>    int i;
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr21563.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr21563.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr21563.c     (working copy)
>>> @@ -2,7 +2,7 @@
>>>     Make sure VRP folds the second "if" statement.  */
>>>
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1-details" } */
>>> +/* { dg-options "-O2 -fno-tree-dominator-opts -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
>>>
>>>  int
>>>  foo (int a)
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr23744.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr23744.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr23744.c     (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-vrp1" } */
>>> +/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-evrp -fdump-tree-vrp1" } */
>>>
>>>  void h (void);
>>>
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr25382.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr25382.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr25382.c     (working copy)
>>> @@ -3,7 +3,7 @@
>>>     Check that VRP now gets ranges from BIT_AND_EXPRs.  */
>>>
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-vrp1" } */
>>> +/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-evrp -fdump-tree-vrp1" } */
>>>
>>>  int
>>>  foo (int a)
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/pr68431.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/pr68431.c     (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/pr68431.c     (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* PR tree-optimization/68431 */
>>> -/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
>>>
>>>  unsigned int x = 1;
>>>  int
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp03.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp03.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp03.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fdump-tree-vrp1" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */
>>>
>>>  struct A
>>>  {
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp06.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp06.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp06.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fdump-tree-vrp1" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */
>>>
>>>  int baz (void);
>>>
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp07.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp07.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp07.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1-details -fdelete-null-pointer-checks" } */
>>> +/* { dg-options "-O2 -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1-details -fdelete-null-pointer-checks" } */
>>>
>>>  int
>>>  foo (int i, int *p)
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp09.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp09.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp09.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1 -std=gnu89" } */
>>> +/* { dg-options "-O2 -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1 -std=gnu89" } */
>>>
>>>  foo (int *p)
>>>  {
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp19.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp19.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp19.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-fwrapv -O1 -ftree-vrp -fdump-tree-vrp1" } */
>>> +/* { dg-options "-fwrapv -O1 -ftree-vrp -fdisable-tree-evrp -fdump-tree-vrp1" } */
>>>
>>>  #include <limits.h>
>>>  extern void abort ();
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp20.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp20.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp20.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-fwrapv -O1 -fno-tree-fre -ftree-vrp -fdump-tree-vrp1" } */
>>> +/* { dg-options "-fwrapv -O1 -fno-tree-fre -fdisable-tree-evrp -ftree-vrp -fdump-tree-vrp1" } */
>>>
>>>  extern void abort ();
>>>  extern void exit (int);
>>> Index: gcc/testsuite/gcc.dg/tree-ssa/vrp92.c
>>> ===================================================================
>>> --- gcc/testsuite/gcc.dg/tree-ssa/vrp92.c       (revision 241241)
>>> +++ gcc/testsuite/gcc.dg/tree-ssa/vrp92.c       (working copy)
>>> @@ -1,5 +1,5 @@
>>>  /* { dg-do compile } */
>>> -/* { dg-options "-O2 -fdump-tree-vrp1-details -fdisable-tree-ethread" } */
>>> +/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details -fdisable-tree-ethread" } */
>>>
>>>  void bar (void);
>>>  int foo (int i, int j)
-------------- next part --------------
diff --git a/gcc/testsuite/gcc.target/aarch64/test_frame_common.h b/gcc/testsuite/gcc.target/aarch64/test_frame_common.h
index d7fed25..c63fbce 100644
--- a/gcc/testsuite/gcc.target/aarch64/test_frame_common.h
+++ b/gcc/testsuite/gcc.target/aarch64/test_frame_common.h
@@ -2,7 +2,7 @@ extern void abort ();
 
 #define CVT(v) ((unsigned char)(v))
 
-static void __attribute__((noinline))
+static void __attribute__((noinline, noclone))
 check_args_8 (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
 	      int a8)
 {
@@ -18,7 +18,7 @@ check_args_8 (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
     abort ();
 }
 
-static void __attribute__((noinline))
+static void __attribute__((noinline, noclone))
 check_args_24 (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
 	       int a8, int a9, int a10)
 {
@@ -36,7 +36,7 @@ check_args_24 (int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
     abort ();
 }
 
-void __attribute__ ((noinline))
+void __attribute__ ((noinline, noclone))
 initialize_array (unsigned char *a, int len)
 {
   int i;


More information about the Gcc-patches mailing list