Commit 69853ea9 by Oleg Endo

sh.md (prefetch): Simplify expander.

	* config/sh/sh.md (prefetch): Simplify expander.  Fix condition to
	allow SH3.
	(*prefetch_media): Move insn below expander.
	(*prefetch): Fix condition to allow SH3.

	* gcc.target/sh/prefetch.c: Add -m3* to inclusion list.

From-SVN: r190332
parent eb11dba2
2012-08-12 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/sh.md (prefetch): Simplify expander. Fix condition to
allow SH3.
(*prefetch_media): Move insn below expander.
(*prefetch): Fix condition to allow SH3.
2012-08-12 Oleg Endo <olegendo@gcc.gnu.org>
PR target/51244
* config/sh/sh.md: Add splits for inverted compare and branch
opportunities.
......
......@@ -13868,44 +13868,36 @@ label:
"byterev %1, %0"
[(set_attr "type" "arith_media")])
(define_insn "*prefetch_media"
[(prefetch (match_operand:QI 0 "address_operand" "p")
(match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n"))]
"TARGET_SHMEDIA"
{
operands[0] = gen_rtx_MEM (QImode, operands[0]);
output_asm_insn ("ld%M0.b %m0,r63", operands);
return "";
}
[(set_attr "type" "other")])
;; In user mode, the "pref" instruction will raise a RADDERR exception
;; for accesses to [0x80000000,0xffffffff]. This makes it an unsuitable
;; implementation of __builtin_prefetch for VxWorks RTPs.
(define_expand "prefetch"
[(prefetch (match_operand 0 "address_operand" "p")
(match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n"))]
"TARGET_SH2A || ((TARGET_HARD_SH4 || TARGET_SH5)
&& (TARGET_SHMEDIA || !TARGET_VXWORKS_RTP))"
{
if (GET_MODE (operands[0]) != Pmode
|| !CONST_INT_P (operands[1])
|| !CONST_INT_P (operands[2]))
FAIL;
if (! TARGET_SHMEDIA)
operands[0] = force_reg (Pmode, operands[0]);
})
[(prefetch (match_operand 0 "address_operand" "")
(match_operand:SI 1 "const_int_operand" "")
(match_operand:SI 2 "const_int_operand" ""))]
"(TARGET_SH2A || TARGET_SH3 || TARGET_SH5)
&& (TARGET_SHMEDIA || ! TARGET_VXWORKS_RTP)")
(define_insn "*prefetch"
[(prefetch (match_operand:SI 0 "register_operand" "r")
(match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n"))]
"(TARGET_SH2A || TARGET_HARD_SH4 || TARGET_SHCOMPACT) && !TARGET_VXWORKS_RTP"
"(TARGET_SH2A || TARGET_SH3 || TARGET_SHCOMPACT) && ! TARGET_VXWORKS_RTP"
"pref @%0"
[(set_attr "type" "other")])
(define_insn "*prefetch_media"
[(prefetch (match_operand:QI 0 "address_operand" "p")
(match_operand:SI 1 "const_int_operand" "n")
(match_operand:SI 2 "const_int_operand" "n"))]
"TARGET_SHMEDIA"
{
operands[0] = gen_rtx_MEM (QImode, operands[0]);
output_asm_insn ("ld%M0.b %m0,r63", operands);
return "";
}
[(set_attr "type" "other")])
(define_insn "alloco_i"
[(set (mem:BLK (match_operand:QI 0 "cache_address_operand" "p"))
(unspec:BLK [(const_int 0)] UNSPEC_ALLOCO))]
......
2012-08-12 Oleg Endo <olegendo@gcc.gnu.org>
* gcc.target/sh/prefetch.c: Add -m3* to inclusion list.
2012-08-12 Oleg Endo <olegendo@gcc.gnu.org>
PR target/51244
* gcc.target/sh/pr51244-7.c: New.
* gcc.target/sh/pr51244-8.c: New.
......
......@@ -2,7 +2,7 @@
instruction PREF @Rm. */
/* { dg-do assemble {target sh*-*-*}} */
/* { dg-options "-O0" } */
/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m2a*" "-m4*" } } */
/* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m2a*" "-m3*" "-m4*" } } */
/* { dg-final { scan-assembler "pref"} } */
void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment