public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/109650] avr-gcc incorrect code with -Os
Date: Sat, 10 Jun 2023 20:46:22 +0000	[thread overview]
Message-ID: <bug-109650-4-6MvC8SACO9@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-109650-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-12 branch has been updated by Georg-Johann Lay
<gjl@gcc.gnu.org>:

https://gcc.gnu.org/g:ee92dc2dae45acc79d4dc08ea31adf894831840a

commit r12-9691-gee92dc2dae45acc79d4dc08ea31adf894831840a
Author: Georg-Johann Lay <avr@gjlay.de>
Date:   Sat Jun 10 21:47:53 2023 +0200

    target/109650: Fix wrong code after cc0 -> CCmode transition.

    This patch fixes a wrong-code bug in the wake of PR92729, the transition
that
    turned the AVR backend from cc0 to CCmode.  In cc0, the insn that uses cc0
like
    a conditional branch always follows the cc0 setter, which is no more the
case
    with CCmode where set and use of REG_CC might be in different basic blocks.

    This patch removes the machine-dependent reorg pass in avr_reorg entirely.

    It is replaced by a new, AVR specific mini-pass that runs prior to split2.
    Canonicalization of comparisons away from the "difficult" codes GT[U] and
LE[U]
    is now mostly performed by implementing TARGET_CANONICALIZE_COMPARISON.

    Moreover:

    * Text peephole conditions get "dead_or_set_regno_p (*, REG_CC)" as needed.

    * RTL peephole conditions get "peep2_regno_dead_p (*, REG_CC)" as needed.

    * Conditional branches no more clobber REG_CC.

    * insn output for compares looks ahead to determine the branch mode in use.
      This needs also "dead_or_set_regno_p (*, REG_CC)".

    * Add RTL peepholes for decrement-and-branch detection.

    * Some of the patterns like "*cmphi.zero-extend.0" lost their
      combine-ational part wit PR92729.  Restore them.

    Finally, it fixes some of the many indentation glitches left over from
PR92729.

    gcc/
            PR target/109650
            PR target/92729
            Backport from 2023-05-10 master r14-1688.
            * config/avr/avr-passes.def (avr_pass_ifelse): Insert new pass.
            * config/avr/avr.cc (avr_pass_ifelse): New RTL pass.
            (avr_pass_data_ifelse): New pass_data for it.
            (make_avr_pass_ifelse, avr_redundant_compare, avr_cbranch_cost)
            (avr_canonicalize_comparison, avr_out_plus_set_ZN)
            (avr_out_cmp_ext): New functions.
            (compare_condtition): Make sure REG_CC dies in the branch insn.
            (avr_rtx_costs_1): Add computation of cbranch costs.
            (avr_adjust_insn_length) [ADJUST_LEN_ADD_SET_ZN,
ADJUST_LEN_CMP_ZEXT]:
            [ADJUST_LEN_CMP_SEXT]Handle them.
            (TARGET_CANONICALIZE_COMPARISON): New define.
            (avr_simplify_comparison_p, compare_diff_p, avr_compare_pattern)
            (avr_reorg_remove_redundant_compare, avr_reorg): Remove functions.
            (TARGET_MACHINE_DEPENDENT_REORG): Remove define.
            * config/avr/avr-protos.h (avr_simplify_comparison_p): Remove
proto.
            (make_avr_pass_ifelse, avr_out_plus_set_ZN, cc_reg_rtx)
            (avr_out_cmp_zext): New Protos
            * config/avr/avr.md (branch, difficult_branch): Don't split insns.
            (*cbranchhi.zero-extend.0", *cbranchhi.zero-extend.1")
            (*swapped_tst<mode>, *add.for.eqne.<mode>): New insns.
            (*cbranch<mode>4): Rename to cbranch<mode>4_insn.
            (define_peephole): Add dead_or_set_regno_p(insn,REG_CC) as needed.
            (define_deephole2): Add peep2_regno_dead_p(*,REG_CC) as needed.
            Add new RTL peepholes for decrement-and-branch and
*swapped_tst<mode>.
            Rework signtest-and-branch peepholes for *sbrx_branch<mode>.
            (adjust_len) [add_set_ZN, cmp_zext]: New.
            (QIPSI): New mode iterator.
            (ALLs1, ALLs2, ALLs4, ALLs234): New mode iterators.
            (gelt): New code iterator.
            (gelt_eqne): New code attribute.
            (rvbranch, *rvbranch, difficult_rvbranch, *difficult_rvbranch)
            (branch_unspec, *negated_tst<mode>, *reversed_tst<mode>)
            (*cmpqi_sign_extend): Remove insns.
            (define_c_enum "unspec") [UNSPEC_IDENTITY]: Remove.
            * config/avr/avr-dimode.md (cbranch<mode>4): Canonicalize
comparisons.
            * config/avr/predicates.md (scratch_or_d_register_operand): New.
            * config/avr/constraints.md (Yxx): New constraint.

    gcc/testsuite/
            PR target/109650
            Backport from 2023-05-10 master r14-1688.
            * gcc.target/avr/torture/pr109650-1.c: New test.
            * gcc.target/avr/torture/pr109650-2.c: New test.

  parent reply	other threads:[~2023-06-10 20:46 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-27 17:13 [Bug c/109650] New: " thierer at web dot de
2023-04-27 17:26 ` [Bug target/109650] " pinskia at gcc dot gnu.org
2023-04-28 15:09 ` gjl at gcc dot gnu.org
2023-04-28 15:13 ` gjl at gcc dot gnu.org
2023-04-28 15:14 ` [Bug other/109650] " gjl at gcc dot gnu.org
2023-04-29  9:05 ` [Bug middle-end/109650] " gjl at gcc dot gnu.org
2023-05-02 16:46 ` gjl at gcc dot gnu.org
2023-05-03 16:57 ` [Bug target/109650] " gjl at gcc dot gnu.org
2023-05-19  8:31 ` gjl at gcc dot gnu.org
2023-05-19  8:52 ` gjl at gcc dot gnu.org
2023-06-10 19:59 ` cvs-commit at gcc dot gnu.org
2023-06-10 20:25 ` cvs-commit at gcc dot gnu.org
2023-06-10 20:46 ` cvs-commit at gcc dot gnu.org [this message]
2023-06-10 21:08 ` gjl at gcc dot gnu.org
2023-06-10 21:13 ` gjl 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-109650-4-6MvC8SACO9@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).