From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 45799 invoked by alias); 27 Oct 2016 12:20:56 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 45787 invoked by uid 89); 27 Oct 2016 12:20:55 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=1,24, bb2, nonSSA, bb3 X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 27 Oct 2016 12:20:45 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id E2BB4AC29 for ; Thu, 27 Oct 2016 12:20:42 +0000 (UTC) Date: Thu, 27 Oct 2016 12:20:00 -0000 From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH][GIMPLE FE] Handle non-SSA PHI args Message-ID: User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2016-10/txt/msg02242.txt.bz2 Tested on x86_64-unknown-linux-gnu. Richard. 2016-10-27 Richard Biener * tree-into-ssa.c (rewrite_add_phi_arguments): Handle non-SSA PHI arguments from the GIMPLE FE. * gcc.dg/gimplefe-18.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/gimplefe-18.c b/gcc/testsuite/gcc.dg/gimplefe-18.c new file mode 100644 index 0000000..ba918b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-18.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple" } */ + +int +__GIMPLE () * +foo () +{ + int _1; + int j; + int *b; + _1 = 1; +bb1: + if (_1) + goto bb3; + else + goto bb2; + +bb2: + b_2 = (int *)0; + +bb3: + b_4 = __PHI (bb1: &j, bb2: b_2); + return b_4; +} diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 7eaf8ae..0e78845 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1383,10 +1383,11 @@ rewrite_add_phi_arguments (basic_block bb) phi = gsi.phi (); res = gimple_phi_result (phi); - /* If we have pre-existing PHI its args may be different - vars than existing vars */ + /* If we have pre-existing PHI (via the GIMPLE FE) its args may + be different vars than existing vars and they may be constants + as well. Note the following supports partial SSA for PHI args. */ argvar = gimple_phi_arg_def (phi, e->dest_idx); - if (argvar && TREE_CODE (argvar) == SSA_NAME) + if (argvar && ! DECL_P (argvar)) continue; if (!argvar) argvar = SSA_NAME_VAR (res);