https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71020
Eric Gallager <egallager at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |egallager at gcc dot gnu.org --- Comment #10 from Eric Gallager <egallager at gcc dot gnu.org> --- (In reply to rsand...@gcc.gnu.org from comment #4) > Author: rsandifo > Date: Wed May 18 14:01:31 2016 > New Revision: 236393 > > URL: https://gcc.gnu.org/viewcvs?rev=236393&root=gcc&view=rev > Log: > To: gcc-patc...@gcc.gnu.org > Subject: PR 71020: Handle abnormal PHIs in tree-call-cdce.c > From: Richard Sandiford <richard.sandif...@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. > > Added: > trunk/gcc/testsuite/gcc.dg/torture/pr71020.c > Modified: > trunk/gcc/ChangeLog > trunk/gcc/testsuite/ChangeLog > trunk/gcc/tree-call-cdce.c > trunk/gcc/tree-dfa.c > trunk/gcc/tree-dfa.h Last chance to backport this to 6-branch