[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