Commit 3b4c46d7 by H.J. Lu Committed by H.J. Lu

Check TARGET_PARTIAL_REG_STALL in imul to lea peepholes.

2011-06-22  H.J. Lu  <hongjiu.lu@intel.com>

	PR target/49497
	* config/i386/i386.md (*lea_general_2): Always allow SImode.
	(*lea_general_2_zext): Likewise.
	(imul to lea peepholes): Use const359_operand and check
	TARGET_PARTIAL_REG_STALL.

	* config/i386/predicates.md (const359_operand): New.

From-SVN: r175295
parent 4399cf59
2011-06-22 H.J. Lu <hongjiu.lu@intel.com>
PR target/49497
* config/i386/i386.md (*lea_general_2): Always allow SImode.
(*lea_general_2_zext): Likewise.
(imul to lea peepholes): Use const359_operand and check
TARGET_PARTIAL_REG_STALL.
* config/i386/predicates.md (const359_operand): New.
2011-06-22 Michael Matz <matz@suse.de>
* cgraphunit.c (assemble_thunk): Use correct return type.
......
......@@ -6287,7 +6287,9 @@
(match_operand 3 "nonmemory_operand" "ri")))]
"(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode
|| (TARGET_64BIT && GET_MODE (operands[0]) == SImode))
&& (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
&& (!TARGET_PARTIAL_REG_STALL
|| GET_MODE (operands[0]) == SImode
|| optimize_function_for_size_p (cfun))
&& GET_MODE (operands[0]) == GET_MODE (operands[1])
&& (GET_MODE (operands[0]) == GET_MODE (operands[3])
|| GET_MODE (operands[3]) == VOIDmode)"
......@@ -6338,7 +6340,9 @@
(match_operand 4 "immediate_operand" "i")))]
"(GET_MODE (operands[0]) == QImode || GET_MODE (operands[0]) == HImode
|| (TARGET_64BIT && GET_MODE (operands[0]) == SImode))
&& (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
&& (!TARGET_PARTIAL_REG_STALL
|| GET_MODE (operands[0]) == SImode
|| optimize_function_for_size_p (cfun))
&& GET_MODE (operands[0]) == GET_MODE (operands[1])
&& GET_MODE (operands[0]) == GET_MODE (operands[3])"
"#"
......@@ -17199,11 +17203,11 @@
[(parallel
[(set (match_operand:SWI48 0 "register_operand" "")
(mult:SWI48 (match_operand:SWI48 1 "register_operand" "")
(match_operand:SWI48 2 "const_int_operand" "")))
(match_operand:SWI48 2 "const359_operand" "")))
(clobber (reg:CC FLAGS_REG))])]
"INTVAL (operands[2]) == 3
|| INTVAL (operands[2]) == 5
|| INTVAL (operands[2]) == 9"
"!TARGET_PARTIAL_REG_STALL
|| <MODE>mode == SImode
|| optimize_function_for_size_p (cfun)"
[(set (match_dup 0)
(plus:SWI48 (mult:SWI48 (match_dup 1) (match_dup 2))
(match_dup 1)))]
......@@ -17213,12 +17217,10 @@
[(parallel
[(set (match_operand:SWI48 0 "register_operand" "")
(mult:SWI48 (match_operand:SWI48 1 "nonimmediate_operand" "")
(match_operand:SWI48 2 "const_int_operand" "")))
(match_operand:SWI48 2 "const359_operand" "")))
(clobber (reg:CC FLAGS_REG))])]
"optimize_insn_for_speed_p ()
&& (INTVAL (operands[2]) == 3
|| INTVAL (operands[2]) == 5
|| INTVAL (operands[2]) == 9)"
&& (!TARGET_PARTIAL_REG_STALL || <MODE>mode == SImode)"
[(set (match_dup 0) (match_dup 1))
(set (match_dup 0)
(plus:SWI48 (mult:SWI48 (match_dup 0) (match_dup 2))
......
......@@ -606,6 +606,14 @@
return i == 2 || i == 4 || i == 8;
})
;; Match 3, 5, or 9. Used for leal multiplicands.
(define_predicate "const359_operand"
(match_code "const_int")
{
HOST_WIDE_INT i = INTVAL (op);
return i == 3 || i == 5 || i == 9;
})
;; Match 0 or 1.
(define_predicate "const_0_to_1_operand"
(and (match_code "const_int")
......
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