From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92677 invoked by alias); 10 Jun 2016 11:41:24 -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 92630 invoked by uid 89); 10 Jun 2016 11:41:18 -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=sk:gsi_ins, Hx-languages-length:1740 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 (CAMELLIA256-SHA encrypted) ESMTPS; Fri, 10 Jun 2016 11:41:03 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id AD5EEAC3F for ; Fri, 10 Jun 2016 11:41:00 +0000 (UTC) Date: Fri, 10 Jun 2016 11:41:00 -0000 From: Richard Biener To: gcc-patches@gcc.gnu.org Subject: [PATCH] Fold RHS when open-coding memcpy 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-06/txt/msg00797.txt.bz2 I noticed that we fail to fold the source to a constant if possible. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2016-06-10 Richard Biener * gimple-fold.c (gimple_fold_builtin_memory_op): Make sure to fold the RHS to a constant if possible. Index: gcc/gimple-fold.c =================================================================== *** gcc/gimple-fold.c (revision 237286) --- gcc/gimple-fold.c (working copy) *************** gimple_fold_builtin_memory_op (gimple_st *** 1020,1033 **** gimple *new_stmt; if (is_gimple_reg_type (TREE_TYPE (srcvar))) { ! new_stmt = gimple_build_assign (NULL_TREE, srcvar); ! if (gimple_in_ssa_p (cfun)) ! srcvar = make_ssa_name (TREE_TYPE (srcvar), new_stmt); ! else ! srcvar = create_tmp_reg (TREE_TYPE (srcvar)); ! gimple_assign_set_lhs (new_stmt, srcvar); ! gimple_set_vuse (new_stmt, gimple_vuse (stmt)); ! gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); } new_stmt = gimple_build_assign (destvar, srcvar); gimple_set_vuse (new_stmt, gimple_vuse (stmt)); --- 1020,1039 ---- gimple *new_stmt; if (is_gimple_reg_type (TREE_TYPE (srcvar))) { ! tree tem = fold_const_aggregate_ref (srcvar); ! if (tem) ! srcvar = tem; ! if (! is_gimple_min_invariant (srcvar)) ! { ! new_stmt = gimple_build_assign (NULL_TREE, srcvar); ! if (gimple_in_ssa_p (cfun)) ! srcvar = make_ssa_name (TREE_TYPE (srcvar), new_stmt); ! else ! srcvar = create_tmp_reg (TREE_TYPE (srcvar)); ! gimple_assign_set_lhs (new_stmt, srcvar); ! gimple_set_vuse (new_stmt, gimple_vuse (stmt)); ! gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); ! } } new_stmt = gimple_build_assign (destvar, srcvar); gimple_set_vuse (new_stmt, gimple_vuse (stmt));