From patchwork Tue Nov 14 13:27:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 837853 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-466733-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="uKFK5z2q"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3ybpGh39nwz9sDB for ; Wed, 15 Nov 2017 00:27:55 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:cc:message-id:date:mime-version:content-type; q=dns; s=default; b=ycFiWEEQk6u5faDkrdWaWtWDQ1/ymfx2k+nz7fT5kPRDyL5WQj wFiNptP2OpREnZGmlX9TU5PtG1wjS5D0mmJipOH129su4eaY6qiNzQQ8ym7qnta6 V+VegF/axqh2Qab+JUcYiR0tyFrkB5HBoMHjhw4u4jl+8Xs9NfCernEPo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:cc:message-id:date:mime-version:content-type; s= default; bh=TVsUvqdoRWB5NG02m11tQrPgago=; b=uKFK5z2qUAn0FiK7sVWe lpaU0vQDNrDOoUC0O9W7t/vAh01CQYmZZZQNT6g+RURYSleoT2Gj6a/wGI8GN7Gt QwmfIv/Pke3uN0v4A+a18ANlXLSo5eNlmeZF+1jXqPAeyrk1hv+wYV8C3PiW3Dnp z3/dwPRyKo1tJWs3IhWHNb8= Received: (qmail 119180 invoked by alias); 14 Nov 2017 13:27:46 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 117845 invoked by uid 89); 14 Nov 2017 13:27:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KB_WAM_FROM_NAME_SINGLEWORD, SPF_PASS autolearn=ham version=3.3.2 spammy=U*mliska, liska, Liska, mliska@suse.cz X-Spam-User: qpsmtpd, 2 recipients 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; Tue, 14 Nov 2017 13:27:43 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id E423AACE6; Tue, 14 Nov 2017 13:27:40 +0000 (UTC) From: =?utf-8?q?Martin_Li=C5=A1ka?= Subject: [PATCH] Fix usage of REG_BR_PROBs (PR target/82927). To: gcc-patches@gcc.gnu.org Cc: jsm28@gcc.gnu.org Message-ID: Date: Tue, 14 Nov 2017 14:27:40 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 X-IsSubscribed: yes Hello. Quite obvious fix for SH target. Joseph can you please continue with testing? I don't have a machine to test the patch. Ready for trunk? Thanks, Martin gcc/ChangeLog: 2017-11-14 Martin Liska PR target/82927 * config/sh/sh-mem.cc: Initialize probabilities. (sh_expand_cmpstr): Use to_reg_br_prob_note function for them. (sh_expand_cmpnstr): Likewise. (sh_expand_strlen): Likewise. (sh_expand_setmem): Likewise. --- gcc/config/sh/sh-mem.cc | 75 +++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 30 deletions(-) diff --git a/gcc/config/sh/sh-mem.cc b/gcc/config/sh/sh-mem.cc index 8fce9799921..39d11fe6458 100644 --- a/gcc/config/sh/sh-mem.cc +++ b/gcc/config/sh/sh-mem.cc @@ -183,8 +183,11 @@ expand_block_move (rtx *operands) return false; } -static const int prob_unlikely = REG_BR_PROB_BASE / 10; -static const int prob_likely = REG_BR_PROB_BASE / 4; +static const profile_probability prob_unlikely + = profile_probability::from_reg_br_prob_base (REG_BR_PROB_BASE / 10); +static const profile_probability prob_likely + = profile_probability::from_reg_br_prob_base (REG_BR_PROB_BASE / 4); + /* Emit code to perform a strcmp. @@ -219,19 +222,19 @@ sh_expand_cmpstr (rtx *operands) emit_insn (gen_iorsi3 (tmp1, s1_addr, s2_addr)); emit_insn (gen_tstsi_t (tmp1, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); } else if (addr1_alignment < 4 && addr2_alignment >= 4) { emit_insn (gen_tstsi_t (s1_addr, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); } else if (addr1_alignment >= 4 && addr2_alignment < 4) { emit_insn (gen_tstsi_t (s2_addr, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); } addr1 = adjust_automodify_address (addr1, SImode, s1_addr, 0); @@ -255,7 +258,7 @@ sh_expand_cmpstr (rtx *operands) emit_insn (gen_cmpstr_t (tmp0, tmp3)); jump = emit_jump_insn (gen_branch_true (L_end_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ()); emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); @@ -264,7 +267,7 @@ sh_expand_cmpstr (rtx *operands) emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, 4)); jump = emit_jump_insn (gen_branch_true (L_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); /* end loop. */ /* Fallthu, substract words. */ @@ -303,13 +306,13 @@ sh_expand_cmpstr (rtx *operands) emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx)); jump = emit_jump_insn (gen_branch_true (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ()); emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); if (flag_delayed_branch) emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2))); jump = emit_jump_insn (gen_branch_true (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); /* end loop. */ emit_label (L_end_loop_byte); @@ -378,19 +381,22 @@ sh_expand_cmpnstr (rtx *operands) emit_insn (gen_iorsi3 (tmp1, s1_addr, s2_addr)); emit_insn (gen_tstsi_t (tmp1, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, + prob_likely.to_reg_br_prob_note ()); } else if (addr1_alignment < 4 && addr2_alignment >= 4) { emit_insn (gen_tstsi_t (s1_addr, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, + prob_likely.to_reg_br_prob_note ()); } else if (addr1_alignment >= 4 && addr2_alignment < 4) { emit_insn (gen_tstsi_t (s2_addr, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, + prob_likely.to_reg_br_prob_note ()); } /* word count. Do we have iterations ? */ @@ -414,11 +420,13 @@ sh_expand_cmpnstr (rtx *operands) emit_insn (gen_cmpstr_t (tmp0, tmp3)); jump = emit_jump_insn (gen_branch_true (L_end_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); jump = emit_jump_insn (gen_branch_false (L_end_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); if (TARGET_SH2) emit_insn (gen_dect (lenw, lenw)); @@ -429,7 +437,8 @@ sh_expand_cmpnstr (rtx *operands) } jump = emit_jump_insn (gen_branch_false (L_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, + prob_likely.to_reg_br_prob_note ()); int sbytes = bytes % 4; @@ -454,7 +463,8 @@ sh_expand_cmpnstr (rtx *operands) emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx)); jump = emit_jump_insn (gen_branch_true (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); if (flag_delayed_branch) @@ -462,7 +472,8 @@ sh_expand_cmpnstr (rtx *operands) gen_lowpart (QImode, tmp2))); jump = emit_jump_insn (gen_branch_false (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); addr1 = adjust_address (addr1, QImode, GET_MODE_SIZE (QImode)); @@ -496,14 +507,16 @@ sh_expand_cmpnstr (rtx *operands) emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx)); jump = emit_jump_insn (gen_branch_true (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); if (flag_delayed_branch) emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2))); jump = emit_jump_insn (gen_branch_false (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); addr1 = adjust_address (addr1, QImode, GET_MODE_SIZE (QImode)); addr2 = adjust_address (addr2, QImode, GET_MODE_SIZE (QImode)); @@ -517,7 +530,8 @@ sh_expand_cmpnstr (rtx *operands) emit_insn (gen_cmpeqsi_t (len, const0_rtx)); emit_move_insn (operands[0], const0_rtx); jump = emit_jump_insn (gen_branch_true (L_return)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, + prob_unlikely.to_reg_br_prob_note ()); } addr1 = adjust_automodify_address (addr1, QImode, s1_addr, 0); @@ -533,13 +547,13 @@ sh_expand_cmpnstr (rtx *operands) emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx)); jump = emit_jump_insn (gen_branch_true (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ()); emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); if (flag_delayed_branch) emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2))); jump = emit_jump_insn (gen_branch_false (L_end_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely.to_reg_br_prob_note ()); if (TARGET_SH2) emit_insn (gen_dect (len, len)); @@ -550,7 +564,7 @@ sh_expand_cmpnstr (rtx *operands) } jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); /* end byte loop. */ emit_label (L_end_loop_byte); @@ -598,7 +612,7 @@ sh_expand_strlen (rtx *operands) { emit_insn (gen_tstsi_t (current_addr, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); } emit_move_insn (tmp0, operands[2]); @@ -616,7 +630,7 @@ sh_expand_strlen (rtx *operands) emit_insn (gen_cmpstr_t (tmp0, tmp1)); jump = emit_jump_insn (gen_branch_false (L_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); /* end loop. */ emit_label (L_end_loop_long); @@ -632,7 +646,7 @@ sh_expand_strlen (rtx *operands) emit_move_insn (current_addr, plus_constant (Pmode, current_addr, 1)); emit_insn (gen_cmpeqsi_t (tmp1, const0_rtx)); jump = emit_jump_insn (gen_branch_true (L_return)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); } emit_barrier_after (jump); @@ -645,7 +659,7 @@ sh_expand_strlen (rtx *operands) emit_insn (gen_cmpeqsi_t (tmp1, const0_rtx)); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); /* end loop. */ @@ -690,7 +704,8 @@ sh_expand_setmem (rtx *operands) { emit_insn (gen_tstsi_t (dest_addr, GEN_INT (3))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, + prob_likely.to_reg_br_prob_note ()); } /* word count. Do we have iterations ? */ @@ -715,7 +730,7 @@ sh_expand_setmem (rtx *operands) jump = emit_jump_insn (gen_branch_false (L_loop_word)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); count = count % 4; dest = adjust_address (dest, QImode, 0); @@ -752,7 +767,7 @@ sh_expand_setmem (rtx *operands) GET_MODE_SIZE (QImode))); jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); + add_int_reg_note (jump, REG_BR_PROB, prob_likely.to_reg_br_prob_note ()); emit_label (L_return); }