rs6000.md (*insvsi_internal5/6): New patterns.

2004-06-22  Eric Christopher  <echristo@redhat.com>

	* config/rs6000/rs6000.md (*insvsi_internal5/6): New patterns.

From-SVN: r83538
This commit is contained in:
Eric Christopher 2004-06-23 05:54:21 +00:00 committed by Eric Christopher
parent 649b2789d1
commit f241bf8947
2 changed files with 51 additions and 12 deletions

View File

@ -1,3 +1,7 @@
2004-06-22 Eric Christopher <echristo@redhat.com>
* config/rs6000/rs6000.md (*insvsi_internal5/6): New patterns.
2004-06-22 Pat Haugen <pthaugen@us.ibm.com>
* cfghooks.c (make_forwarder_block): Decrement count on fallthru edge

View File

@ -3036,6 +3036,45 @@
}"
[(set_attr "type" "insert_word")])
;; combine patterns for rlwimi
(define_insn "*insvsi_internal5"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(ior:SI (and:SI (match_operand:SI 4 "gpc_reg_operand" "0")
(match_operand:SI 1 "mask_operand" "i"))
(and:SI (lshiftrt:SI (match_operand:SI 3 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "i"))
(match_operand:SI 5 "mask_operand" "i"))))]
"TARGET_POWERPC && INTVAL(operands[1]) == ~INTVAL(operands[5])"
"*
{
int me = extract_ME(operands[5]);
int mb = extract_MB(operands[5]);
operands[4] = GEN_INT(32 - INTVAL(operands[2]));
operands[2] = GEN_INT(mb);
operands[1] = GEN_INT(me);
return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
}"
[(set_attr "type" "insert_word")])
(define_insn "*insvsi_internal6"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
(ior:SI (and:SI (lshiftrt:SI (match_operand:SI 3 "gpc_reg_operand" "r")
(match_operand:SI 2 "const_int_operand" "i"))
(match_operand:SI 5 "mask_operand" "i"))
(and:SI (match_operand:SI 4 "gpc_reg_operand" "0")
(match_operand:SI 1 "mask_operand" "i"))))]
"TARGET_POWERPC && INTVAL(operands[1]) == ~INTVAL(operands[5])"
"*
{
int me = extract_ME(operands[5]);
int mb = extract_MB(operands[5]);
operands[4] = GEN_INT(32 - INTVAL(operands[2]));
operands[2] = GEN_INT(mb);
operands[1] = GEN_INT(me);
return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\";
}"
[(set_attr "type" "insert_word")])
(define_insn "insvdi"
[(set (zero_extract:DI (match_operand:DI 0 "gpc_reg_operand" "+r")
(match_operand:SI 1 "const_int_operand" "i")
@ -8051,13 +8090,11 @@
else
return \"mr %0,%1\;mr %L0,%L1\";
case 1:
if (GET_CODE (operands[1]) == MEM
&& (rs6000_legitimate_offset_address_p (DFmode, XEXP (operands[1], 0),
reload_completed || reload_in_progress)
|| GET_CODE (XEXP (operands[1], 0)) == REG
|| GET_CODE (XEXP (operands[1], 0)) == LO_SUM
if (offsettable_memref_p (operands[1])
|| (GET_CODE (operands[1]) == MEM
&& (GET_CODE (XEXP (operands[1], 0)) == LO_SUM
|| GET_CODE (XEXP (operands[1], 0)) == PRE_INC
|| GET_CODE (XEXP (operands[1], 0)) == PRE_DEC))
|| GET_CODE (XEXP (operands[1], 0)) == PRE_DEC)))
{
/* If the low-address word is used in the address, we must load
it last. Otherwise, load it first. Note that we cannot have
@ -8093,13 +8130,11 @@
}
}
case 2:
if (GET_CODE (operands[0]) == MEM
&& (rs6000_legitimate_offset_address_p (DFmode, XEXP (operands[0], 0),
reload_completed || reload_in_progress)
|| GET_CODE (XEXP (operands[0], 0)) == REG
|| GET_CODE (XEXP (operands[0], 0)) == LO_SUM
if (offsettable_memref_p (operands[0])
|| (GET_CODE (operands[0]) == MEM
&& (GET_CODE (XEXP (operands[0], 0)) == LO_SUM
|| GET_CODE (XEXP (operands[0], 0)) == PRE_INC
|| GET_CODE (XEXP (operands[0], 0)) == PRE_DEC))
|| GET_CODE (XEXP (operands[0], 0)) == PRE_DEC)))
return \"{st%U0|stw%U0} %1,%0\;{st|stw} %L1,%L0\";
else
{