public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Andrew Hutchinson <andrewhutchinson@cox.net>
To: GCC Development <gcc@gcc.gnu.org>
Subject: Re: Cannot get Bit test RTL to cooperate with Combine.
Date: Tue, 22 Sep 2009 01:43:00 -0000	[thread overview]
Message-ID: <4AB82BBE.3030703@cox.net> (raw)
In-Reply-To: <20090921204853.n2kguj1an4g0s8k4-nzlynne@webmail.spamcop.net>

Why doesn't combine try matching "unsimplified" expressions when it fails?

This would at least permit creating patterns based on explicit format 
of  input RTL without the added vagaries of simplification

Andy



Joern Rennecke wrote:
> On Sun, Sep 20, 2009 at 01:49:39PM -0400, Andrew Hutchinson wrote:
>> All,
>>
>> I have been debugging AVR port to see why we fail to match so many bit
>> test opportunities.
>>
>> When dealing with longer modes I have come across a problem I can not 
>> solve.
>>
>> Expansion in RTL for a bit test can produce two styles.
>>
>> STYLE 1  Bit to be tested is NOT LSB (e.g. if ( longthing & 0x10)),  the
>> expanded code contains the test as:
>>
>> (and:SI (reg:SI 45 [ lx.1 ])
>>    (const_int 16 [0x10]))
>>
>> Bit tests are matched by combine. Combine has no problems with this and
>> eventually creates a matching pattern based on the conversion of the AND
>> to a zero extraction
>>
>> (set (pc)
>>    (if_then_else (ne (zero_extract:SI (subreg:QI (reg:SI 45 [ lx.1 ]) 0)
>>                (const_int 1 [0x1])
>>                (const_int 4 [0x4]))
>>            (const_int 0 [0x0]))
>>        (label_ref:HI 133)
>>        (pc)))
>>
>> This will match Bit test patterns and produces optimal code. :-)
>
> Unfortunately, when combine knows about upper bits that are zero, it
> will generate an lshiftrt instead, which can't be legitimately matched
> by a bit test.
>
> I have a patch for this which I haven't gotten around yet to test it
> separately in trunk and formally submit to the patches list, but you can
> extract it from arc-20081210-branch:
>
> 2008-12-02  J"orn Rennecke  <joern.rennecke@arc.com>
>
>         * combine.c (undo_since): New function, broken out of:
>         (undo_all).
>         (combine_simplify_bittest): New function.
>         (combine_simplify_rtx, simplify_if_then_else): Use it.
>         * config/arc/arc.c (arc_rtx_costs): Check for bbit test.
>
> svn diff -r144651:144652 
> svn://gcc.gnu.org/svn/gcc/branches/arc-20081210-branch/gcc/combine.c
>

  parent reply	other threads:[~2009-09-22  1:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-20 17:49 Andrew Hutchinson
2009-09-22  0:49 ` Joern Rennecke
2009-09-22  1:20   ` Andrew Hutchinson
2009-09-22  1:43   ` Andrew Hutchinson [this message]
2009-09-22  6:57     ` Joern Rennecke

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=4AB82BBE.3030703@cox.net \
    --to=andrewhutchinson@cox.net \
    --cc=gcc@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).