public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "olegendo at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/51244] [SH] Inefficient conditional branch and code around T bit
Date: Sat, 24 Jan 2015 13:06:00 -0000	[thread overview]
Message-ID: <bug-51244-4-PUqK22SbHU@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-51244-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #85 from Oleg Endo <olegendo at gcc dot gnu.org> ---
Author: olegendo
Date: Sat Jan 24 13:04:53 2015
New Revision: 220081

URL: https://gcc.gnu.org/viewcvs?rev=220081&root=gcc&view=rev
Log:
gcc/
    PR target/49263
    PR target/53987
    PR target/64345
    PR target/59533
    PR target/52933
    PR target/54236
    PR target/51244
    * config/sh/sh-protos.h
    (sh_extending_set_of_reg::can_use_as_unextended_reg,
    sh_extending_set_of_reg::use_as_unextended_reg,
    sh_is_nott_insn, sh_movt_set_dest, sh_movrt_set_dest, sh_is_movt_insn,
    sh_is_movrt_insn, sh_insn_operands_modified_between_p,
    sh_reg_dead_or_unused_after_insn, sh_in_recog_treg_set_expr,
    sh_recog_treg_set_expr, sh_split_treg_set_expr): New functions.
    (sh_treg_insns): New class.
    * config/sh/sh.c (TARGET_LEGITIMATE_COMBINED_INSN): Define target hook.
    (scope_counter): New class.
    (sh_legitimate_combined_insn, sh_is_nott_insn, sh_movt_set_dest,
    sh_movrt_set_dest, sh_reg_dead_or_unused_after_insn,
    sh_extending_set_of_reg::can_use_as_unextended_reg,
    sh_extending_set_of_reg::use_as_unextended_reg, sh_recog_treg_set_expr,
    sh_in_recog_treg_set_expr, sh_try_split_insn_simple,
    sh_split_treg_set_expr): New functions.
    (addsubcosts): Handle treg_set_expr.
    (sh_rtx_costs): Handle IF_THEN_ELSE and ZERO_EXTRACT.
    (sh_rtx_costs): Use arith_reg_operand in SIGN_EXTEND and ZERO_EXTEND.
    (sh_rtx_costs): Handle additional bit test patterns in EQ and AND cases.
    (sh_insn_operands_modified_between_p): Make non-static.
    * config/sh/predicates.md (zero_extend_movu_operand): Allow
    simple_mem_operand in addition to displacement_mem_operand.
    (zero_extend_operand): Don't allow zero_extend_movu_operand.
    (treg_set_expr, treg_set_expr_not_const01,
    arith_reg_or_treg_set_expr): New predicates.
    * config/sh/sh.md (tstsi_t): Use arith_reg_operand and
    arith_or_int_operand instead of logical_operand.  Convert to
    insn_and_split.  Try to optimize constant operand in splitter.
    (tsthi_t, tstqi_t): Fold into *tst<mode>_t.  Convert to insn_and_split.
    (*tstqi_t_zero): Delete.
    (*tst<mode>_t_subregs): Add !sh_in_recog_treg_set_expr split condition.
    (tstsi_t_and_not): Delete.
    (tst<mode>_t_zero_extract_eq): Rename to *tst<mode>_t_zero_extract.
    Convert to insn_and_split.
    (unnamed split, tstsi_t_zero_extract_xor,
    tstsi_t_zero_extract_subreg_xor_little,
    tstsi_t_zero_extract_subreg_xor_big): Delete.
    (*tstsi_t_shift_mask): New insn_and_split.
    (cmpeqsi_t, cmpgesi_t): Add new split for const_int 0 operands and try
    to recombine with surrounding insns when splitting.
    (*negtstsi): Add !sh_in_recog_treg_set_expr condition.
    (cmp_div0s_0, cmp_div0s_1, *cmp_div0s_0, *cmp_div0s_1): Rewrite as ...
    (cmp_div0s, *cmp_div0s_1, *cmp_div0s_2, *cmp_div0s_3, *cmp_div0s_4,
    *cmp_div0s_5, *cmp_div0s_6): ... these new insn_and_split patterns.
    (*cbranch_div0s: Delete.
    (*addc): Convert to insn_and_split.  Use treg_set_expr as 3rd operand.
    Try to recombine with surrounding insns when splitting.  Add operand
    order variants.
    (*addc_t_r, *addc_r_t): Use treg_set_expr_not_const01.
    (*addc_r_r_1, *addc_r_lsb, *addc_r_r_lsb, *addc_r_lsb_r, *addc_r_msb,
    *addc_r_r_msb, *addc_2r_msb): Delete.
    (*addc_2r_lsb): Rename to *addc_2r_t.  Use treg_set_expr.  Add operand
    order variant.
    (*addc_negreg_t): New insn_and_split.
    (*subc): Convert to insn_and_split.  Use treg_set_expr as 3rd operand.
    Try to recombine with surrounding insns when splitting.
    Add operand order variants.  
    (*subc_negt_reg, *subc_negreg_t, *reg_lsb_t, *reg_msb_t): New
    insn_and_split patterns.
    (*rotcr): Use arith_reg_or_treg_set_expr.  Try to recombine with
    surrounding insns when splitting.
    (unnamed rotcr split): Use arith_reg_or_treg_set_expr.
    (*rotcl): Likewise.  Add zero_extract variant.
    (*ashrsi2_31): New insn_and_split.
    (*negc): Convert to insn_and_split.  Use treg_set_expr.
    (*zero_extend<mode>si2_disp_mem): Update comment.
    (movrt_negc, *movrt_negc, nott): Add !sh_in_recog_treg_set_expr split
    condition.
    (*mov_t_msb_neg, mov_neg_si_t): Use treg_set_expr.  Try to recombine
    with surrounding insns when splitting.
    (any_treg_expr_to_reg): New insn_and_split.
    (*neg_zero_extract_0, *neg_zero_extract_1, *neg_zero_extract_2,
    *neg_zero_extract_3, *neg_zero_extract_4, *neg_zero_extract_5,
    *neg_zero_extract_6, *zero_extract_0, *zero_extract_1,
    *zero_extract_2): New single bit zero extract patterns.
    (bld_reg, *bld_regqi): Fold into bld<mode>_reg.
    (*get_thread_pointersi, store_gbr, *mov<mode>_gbr_load,
    *mov<mode>_gbr_load, *mov<mode>_gbr_load, *mov<mode>_gbr_load,
    *movdi_gbr_load): Use arith_reg_dest instead of register_operand for
    set destination.
    (set_thread_pointersi, load_gbr): Use arith_reg_operand instead of
    register_operand for set source.

gcc/testsuite/
    PR target/49263
    PR target/53987
    PR target/64345
    PR target/59533
    PR target/52933
    PR target/54236
    PR target/51244
    * gcc.target/sh/pr64345-1.c: New.
    * gcc.target/sh/pr64345-2.c: New.
    * gcc.target/sh/pr59533-1.c: New.
    * gcc.target/sh/pr49263.c: Adjust matching of expected insns.
    * gcc.target/sh/pr52933-2.c: Likewise.
    * gcc.target/sh/pr54089-1.c: Likewise.
    * gcc.target/sh/pr54236-1.c: Likewise.
    * gcc.target/sh/pr51244-20-sh2a.c: Likewise.
    * gcc.target/sh/pr49263-1.c: Remove xfails.
    * gcc.target/sh/pr49263-2.c: Likewise.
    * gcc.target/sh/pr49263-3.c: Likewise.
    * gcc.target/sh/pr53987-1.c: Likewise.
    * gcc.target/sh/pr52933-1.c: Adjust matching of expected insns.
    (test_24, test_25, test_26, test_27, test_28, test_29, test_30): New.
    * gcc.target/sh/pr51244-12.c: Adjust matching of expected insns.
    (test05, test06, test07, test08, test09, test10, test11, test12): New.
    * gcc.target/sh/pr54236-3.c: Adjust matching of expected insns.
    (test_002, test_003, test_004, test_005, test_006, test_007, test_008,
    test_009): New.
    * gcc.target/sh/pr51244-4.c: Adjust matching of expected insns.
    (test_02): New.

Added:
    trunk/gcc/testsuite/gcc.target/sh/pr59533-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr64345-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr64345-2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/sh/predicates.md
    trunk/gcc/config/sh/sh-protos.h
    trunk/gcc/config/sh/sh.c
    trunk/gcc/config/sh/sh.md
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gcc.target/sh/pr49263-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr49263-2.c
    trunk/gcc/testsuite/gcc.target/sh/pr49263-3.c
    trunk/gcc/testsuite/gcc.target/sh/pr49263.c
    trunk/gcc/testsuite/gcc.target/sh/pr51244-12.c
    trunk/gcc/testsuite/gcc.target/sh/pr51244-20-sh2a.c
    trunk/gcc/testsuite/gcc.target/sh/pr51244-4.c
    trunk/gcc/testsuite/gcc.target/sh/pr52933-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr52933-2.c
    trunk/gcc/testsuite/gcc.target/sh/pr53987-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr54089-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr54236-1.c
    trunk/gcc/testsuite/gcc.target/sh/pr54236-3.c


  parent reply	other threads:[~2015-01-24 13:06 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-20 20:29 [Bug target/51244] New: SH Target: Inefficient conditional branch oleg.endo@t-online.de
2011-11-22 23:36 ` [Bug target/51244] " kkojima at gcc dot gnu.org
2011-12-27 22:03 ` oleg.endo@t-online.de
2011-12-27 23:17 ` oleg.endo@t-online.de
2011-12-28  0:42 ` oleg.endo@t-online.de
2011-12-28  4:57 ` oleg.endo@t-online.de
2011-12-28 16:07 ` oleg.endo@t-online.de
2011-12-28 22:30 ` kkojima at gcc dot gnu.org
2011-12-30 22:18 ` oleg.endo@t-online.de
2012-02-26 23:36 ` olegendo at gcc dot gnu.org
2012-03-02 21:57 ` olegendo at gcc dot gnu.org
2012-03-03 12:32 ` olegendo at gcc dot gnu.org
2012-03-04 17:25 ` olegendo at gcc dot gnu.org
2012-03-05 23:13 ` olegendo at gcc dot gnu.org
2012-03-05 23:38 ` olegendo at gcc dot gnu.org
2012-03-06  8:28 ` olegendo at gcc dot gnu.org
2012-03-06  8:50 ` kkojima at gcc dot gnu.org
2012-03-06  9:48 ` olegendo at gcc dot gnu.org
2012-03-06 10:36 ` kkojima at gcc dot gnu.org
2012-03-06 10:38 ` kkojima at gcc dot gnu.org
2012-03-06 10:39 ` kkojima at gcc dot gnu.org
2012-03-06 10:40 ` kkojima at gcc dot gnu.org
2012-03-06 11:30 ` olegendo at gcc dot gnu.org
2012-03-06 23:43 ` olegendo at gcc dot gnu.org
2012-03-08  1:26 ` olegendo at gcc dot gnu.org
2012-03-08 11:12 ` kkojima at gcc dot gnu.org
2012-03-08 11:15 ` kkojima at gcc dot gnu.org
2012-03-08 11:17 ` kkojima at gcc dot gnu.org
2012-03-09  0:27 ` olegendo at gcc dot gnu.org
2012-03-09  1:45 ` kkojima at gcc dot gnu.org
2012-03-09  8:41 ` kkojima at gcc dot gnu.org
2012-03-09 10:02 ` olegendo at gcc dot gnu.org
2012-03-09 10:37 ` kkojima at gcc dot gnu.org
2012-03-11 13:18 ` olegendo at gcc dot gnu.org
2012-03-15  8:11 ` kkojima at gcc dot gnu.org
2012-03-20  1:46 ` olegendo at gcc dot gnu.org
2012-03-20  2:33 ` kkojima at gcc dot gnu.org
2012-03-20 20:41 ` olegendo at gcc dot gnu.org
2012-05-07 20:53 ` olegendo at gcc dot gnu.org
2012-05-08 21:43 ` olegendo at gcc dot gnu.org
2012-06-30 12:01 ` olegendo at gcc dot gnu.org
2012-07-02 19:24 ` olegendo at gcc dot gnu.org
2012-07-08 15:03 ` olegendo at gcc dot gnu.org
2012-07-23 22:58 ` olegendo at gcc dot gnu.org
2012-07-23 23:29 ` olegendo at gcc dot gnu.org
2012-07-26  0:20 ` olegendo at gcc dot gnu.org
2012-07-30  6:46 ` olegendo at gcc dot gnu.org
2012-08-09 15:55 ` olegendo at gcc dot gnu.org
2012-08-12 22:47 ` olegendo at gcc dot gnu.org
2012-08-20 20:51 ` olegendo at gcc dot gnu.org
2012-08-30 22:54 ` olegendo at gcc dot gnu.org
2012-08-31 10:55 ` kkojima at gcc dot gnu.org
2012-08-31 15:50 ` olegendo at gcc dot gnu.org
2012-09-04  8:03 ` olegendo at gcc dot gnu.org
2012-09-23 21:36 ` [Bug target/51244] [SH] Inefficient conditional branch and code around T bit olegendo at gcc dot gnu.org
2012-09-23 21:42 ` olegendo at gcc dot gnu.org
2012-10-03 21:39 ` olegendo at gcc dot gnu.org
2012-10-12  0:41 ` olegendo at gcc dot gnu.org
2012-10-15 22:08 ` olegendo at gcc dot gnu.org
2012-11-03 12:01 ` olegendo at gcc dot gnu.org
2013-07-18 16:11 ` laurent.alfonsi at st dot com
2013-07-18 16:12 ` laurent.alfonsi at st dot com
2013-07-20 14:38 ` olegendo at gcc dot gnu.org
2013-07-23  8:21 ` laurent.alfonsi at st dot com
2013-07-27 19:28 ` olegendo at gcc dot gnu.org
2013-07-28  8:51 ` olegendo at gcc dot gnu.org
2013-07-28 12:26 ` olegendo at gcc dot gnu.org
2013-07-31 21:46 ` olegendo at gcc dot gnu.org
2013-08-23  0:13 ` olegendo at gcc dot gnu.org
2013-08-23  0:25 ` kkojima at gcc dot gnu.org
2013-09-24 22:43 ` olegendo at gcc dot gnu.org
2013-10-03 22:50 ` olegendo at gcc dot gnu.org
2013-10-12 20:47 ` olegendo at gcc dot gnu.org
2013-10-12 21:26 ` olegendo at gcc dot gnu.org
2013-12-05 17:54 ` olegendo at gcc dot gnu.org
2013-12-06 10:47 ` olegendo at gcc dot gnu.org
2014-05-10 20:19 ` olegendo at gcc dot gnu.org
2014-05-16 22:55 ` olegendo at gcc dot gnu.org
2014-09-13 18:48 ` olegendo at gcc dot gnu.org
2014-11-22 15:07 ` olegendo at gcc dot gnu.org
2014-11-22 15:50 ` olegendo at gcc dot gnu.org
2014-11-22 16:08 ` olegendo at gcc dot gnu.org
2014-12-01  6:50 ` olegendo at gcc dot gnu.org
2014-12-17 22:53 ` olegendo at gcc dot gnu.org
2014-12-17 23:08 ` olegendo at gcc dot gnu.org
2014-12-17 23:15 ` olegendo at gcc dot gnu.org
2014-12-24 21:56 ` olegendo at gcc dot gnu.org
2015-01-24 13:06 ` olegendo at gcc dot gnu.org [this message]
2015-03-01 19:16 ` olegendo at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-51244-4-PUqK22SbHU@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).