public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Mode change for bswap pattern expansion
@ 2014-01-27 11:28 Paulo Matos
  2014-01-27 16:24 ` Richard Sandiford
  0 siblings, 1 reply; 6+ messages in thread
From: Paulo Matos @ 2014-01-27 11:28 UTC (permalink / raw)
  To: gcc

Hello,

On a vector processor we can do a bswapsi with two instructions, by first rotating half-words (16 bits) by 8 and then rotating full words by 16. 
However, this means expanding:
(set (match_operand:SI 0 "register_operand" "")
     (bswap:SI (match_operand:SI 1 "register_operand" "")))

to:
(set (match_dup:V2HI 0)
     (rotate:V2HI (match_dup:V2HI 1)
                  (const_int 8)))
(set (match_dup:SI 0)
     (rotate:SI (match_dup:SI 0)
                (const_int 16)))

This is obviously not correct, because match_dup cannot set the mode. The point I am trying to make is that I can't find a good way to deal with the mode changes. I don't think GCC is too happy if I change the modes of the same operand from one instruction to the other right? The only other way is to emit paradoxical subregs. So something along these lines:
(set (subreg:V2HI (match_dup 0) 0)
     (rotate:V2HI (subreg:V2HI (match_dup 1) 0)
                  (const_int 8)))
(set (match_dup 0)
     (rotate:SI (match_dup 0)
                (const_int 16)))

Is there a better way to handle a situation like this?

Cheers,

Paulo Matos



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-01-27 18:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-27 11:28 Mode change for bswap pattern expansion Paulo Matos
2014-01-27 16:24 ` Richard Sandiford
2014-01-27 16:28   ` Paulo Matos
2014-01-27 17:00     ` Richard Sandiford
2014-01-27 17:57       ` Paulo Matos
2014-01-27 19:29         ` pinskia

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).