https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71020

--- Comment #4 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
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

Reply via email to