diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2016-05-18 14:01:31 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2016-05-18 14:01:31 +0000 |
commit | cf8be00de9a9e31a2f05894d429fe38948a0c255 (patch) | |
tree | a8b6d0e0b1940214a97b2c5e39a0e3fd1e099cf9 /gcc/tree-dfa.h | |
parent | 29799e9db1ee2bcb8113d96adc965c7a1a284aaa (diff) | |
download | gcc-cf8be00de9a9e31a2f05894d429fe38948a0c255.zip gcc-cf8be00de9a9e31a2f05894d429fe38948a0c255.tar.gz gcc-cf8be00de9a9e31a2f05894d429fe38948a0c255.tar.bz2 |
To...
To: gcc-patches@gcc.gnu.org
Subject: PR 71020: Handle abnormal PHIs in tree-call-cdce.c
From: Richard Sandiford <richard.sandiford@arm.com>
Gcc: private.sent
--text follows this line--
The PR is about a case where tree-call-cdce.c causes two abnormal
PHIs for the same variable to be live at the same time, leading to
a coalescing failure. It seemed like getting rid of these kinds of
input would be generally useful, so I added a utility to tree-dfa.c.
Tested on x86_64-linux-gnu.
gcc/
PR middle-end/71020
* tree-dfa.h (replace_abnormal_ssa_names): Declare.
* tree-dfa.c (replace_abnormal_ssa_names): New function.
* tree-call-cdce.c: Include tree-dfa.h.
(can_guard_call_p): New function, extracted from...
(can_use_internal_fn): ...here.
(shrink_wrap_one_built_in_call_with_conds): Remove failure path
and return void.
(shrink_wrap_one_built_in_call): Likewise.
(use_internal_fn): Likewise.
(shrink_wrap_conditional_dead_built_in_calls): Update accordingly
and return void. Call replace_abnormal_ssa_names.
(pass_call_cdce::execute): Check can_guard_call_p during the
initial walk. Assume shrink_wrap_conditional_dead_built_in_calls
will always change something.
gcc/testsuite/
* gcc.dg/torture/pr71020.c: New test.
From-SVN: r236393
Diffstat (limited to 'gcc/tree-dfa.h')
-rw-r--r-- | gcc/tree-dfa.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/tree-dfa.h b/gcc/tree-dfa.h index c94dc55..08864cf 100644 --- a/gcc/tree-dfa.h +++ b/gcc/tree-dfa.h @@ -35,6 +35,7 @@ extern tree get_addr_base_and_unit_offset_1 (tree, HOST_WIDE_INT *, tree (*) (tree)); extern tree get_addr_base_and_unit_offset (tree, HOST_WIDE_INT *); extern bool stmt_references_abnormal_ssa_name (gimple *); +extern void replace_abnormal_ssa_names (gimple *); extern void dump_enumerated_decls (FILE *, int); |