public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Sandiford <rsandifo@nildram.co.uk>
To: David Daney <ddaney@avtrex.com>
Cc: Mark Mitchell <mark@codesourcery.com>,
	 Paolo Bonzini <bonzini@gnu.org>,
	 gcc-patches@gcc.gnu.org
Subject: Re: [Patch] 1/3 Add new builtin __builtin_flush_icache().
Date: Thu, 05 Jul 2007 19:11:00 -0000	[thread overview]
Message-ID: <87fy423c40.fsf@firetop.home> (raw)
In-Reply-To: <468D35AD.90208@avtrex.com> (David Daney's message of "Thu, 05 	Jul 2007 11:17:17 -0700")

David Daney <ddaney@avtrex.com> writes:
> Richard Sandiford wrote:
>> David Daney <ddaney@avtrex.com> writes:
>>> +  /* Evaluate BEGIN and END. */
>>> +  begin_rtx = expand_expr (begin, NULL_RTX, Pmode, EXPAND_NORMAL);
>>> +  begin_rtx = convert_memory_address (Pmode, begin_rtx);
>>> +
>>> +  end_rtx = expand_expr (end, NULL_RTX, Pmode, EXPAND_NORMAL);
>>> +  end_rtx = convert_memory_address (Pmode, end_rtx);
>>> +
>>> +#ifdef HAVE_clear_cache
>>> +  if (HAVE_clear_cache)
>>> +    emit_insn (gen_clear_cache (begin_rtx, end_rtx));
>>> +#endif
>> 
>> When I said that the switch from general_operand to pmode_register_operand
>> would need target-independent changes, I meant it would need changes to
>> this bit of code.  I think you need to check the predicates of each
>> clear_cache operand and force the operand into a register if it doesn't
>> match.  Something like:
>> 
>>   if (HAVE_clear_cache)
>>     {
>>       icode = CODE_FOR_clear_cache;
>>       if (!insn_data[icode].operand[0].predicate (begin_rtx, Pmode))
>> 	begin_rtx = copy_to_mode_reg (Pmode, begin_rtx);
>>       if (!insn_data[icode].operand[1].predicate (end_rtx, Pmode))
>> 	end_rtx = copy_to_mode_reg (Pmode, end_rtx);
>>       emit_insn (gen_clear_cache (begin_rtx, end_rtx));
>>     }
>> 
>> (It's unfortunate that this construct has to be copied so often,
>> but that's the way it is.)
>> 
>> As it stands, the code only seems to guarantee that the operand
>> is an address operand, whereas the predicates in the MIPS patch
>> claim that it will be a register.
>
> The operands in the MIPS patch are both (match_operand:SI 0 
> "general_operand").  Look at the part in mips.c where I do:
>
> begin = force_reg(Pmode, begin);
>
> If that is the wrong way to put something in a register I will change it.

That's the right way to put something into a register if it isn't
already one.  But I'd like the MIPS pattern to say that it needs
pmode_register_operands from the outset, and for the target-independent
code to force the operands into a register where necessary.  I admit
that not all named patterns work this way -- extv, insv and extzv are
ones that have bitten me in the past -- but the vast majority do.  And I
think that, where possible, we should try to make sure that new patterns
work this way too.

For the vast majority of named patterns, the predicates on the expander
really do meaning something: the code calling the generator function
must make sure that the operands match the predicates first.  With the
patch as it stands, nothing checks the general_operand predicate in the
MIPS clear_cache insn; it's just syntactic lip-service.  The problem is
that it looks (at least to me) like it's more than syntactic lip-service.

Richard

  reply	other threads:[~2007-07-05 19:05 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-01  5:01 David Daney
2007-07-01  5:05 ` [Patch] 2/3 MIPS support for " David Daney
2007-07-01 10:56   ` Richard Sandiford
2007-07-05  7:50     ` David Daney
2007-07-05 19:05       ` Richard Sandiford
2007-07-08 20:00         ` David Daney
2007-07-09 19:07           ` Richard Sandiford
2007-07-11  5:45             ` David Daney
2007-07-01  5:11 ` [Patch] 3/3 FFI: Use __builtin_flush_icache() to flush MIPS i-cache David Daney
2007-07-05  8:34   ` David Daney
2007-07-05 19:08     ` Richard Sandiford
2007-07-11 18:55       ` Tom Tromey
2007-07-01  8:01 ` [Patch] 1/3 Add new builtin __builtin_flush_icache() Paolo Bonzini
2007-07-01 17:51   ` Thiemo Seufer
2007-07-01 18:47   ` David Daney
2007-07-02  5:04     ` Paolo Bonzini
2007-07-03 23:55       ` Mark Mitchell
2007-07-04  7:18         ` Paolo Bonzini
2007-07-04 17:17           ` Mark Mitchell
2007-07-04 17:10         ` David Daney
2007-07-04 17:51           ` Mark Mitchell
2007-07-05  7:36             ` David Daney
2007-07-05 17:59               ` Richard Sandiford
2007-07-05 18:23                 ` David Daney
2007-07-05 19:11                   ` Richard Sandiford [this message]
2007-07-06  6:07               ` Mark Mitchell
2007-07-06  6:19                 ` David Daney
2007-07-06 16:39                   ` Mark Mitchell
2007-07-08 19:22                     ` David Daney
2007-07-09 19:04                       ` Richard Sandiford
2007-07-11  2:22                       ` Mark Mitchell
2007-07-11  4:47                         ` David Daney
2007-07-05  9:05 ` [Patch] 4/3 i386 target support for __builtin___clear_cache() David Daney
2007-07-08 20:39   ` David Daney

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=87fy423c40.fsf@firetop.home \
    --to=rsandifo@nildram.co.uk \
    --cc=bonzini@gnu.org \
    --cc=ddaney@avtrex.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=mark@codesourcery.com \
    /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).