i386.md (addti3 splitter): Pass arrays of 3 operands to split_ti instead of three separate calls with...

* config/i386/i386.md (addti3 splitter): Pass arrays of 3 operands
        to split_ti instead of three separate calls with single member arrays.
        (subti3 splitter): Ditto.
        (adddi3 splitter): Ditto with split_di.
        (subdi3 splitter): Ditto.
        (negti2 splitter): Pass arrays of 2 operands to split_ti instead of
        two separate calls with single member arrays.  Swap match_dup
        operands 1 and 2 to better fit into the array.
        (negdi2 splitter): Ditto with split_di.
        (movdfcc splitter):  Pass arrays of 2 operands to split_di instead of
        two separate calls with single member arrays.  Swap match_dup operands
        6 and 7 to better fit into the array.

From-SVN: r134403
This commit is contained in:
Uros Bizjak 2008-04-17 20:38:35 +02:00 committed by Uros Bizjak
parent 6afce8909c
commit c2b814b9ff
2 changed files with 41 additions and 37 deletions

View File

@ -1,3 +1,18 @@
2008-04-17 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (addti3 splitter): Pass arrays of 3 operands
to split_ti instead of three separate calls with single member arrays.
(subti3 splitter): Ditto.
(adddi3 splitter): Ditto with split_di.
(subdi3 splitter): Ditto.
(negti2 splitter): Pass arrays of 2 operands to split_ti instead of
two separate calls with single member arrays. Swap match_dup
operands 1 and 2 to better fit into the array.
(negdi2 splitter): Ditto with split_di.
(movdfcc splitter): Pass arrays of 2 operands to split_di instead of
two separate calls with single member arrays. Swap match_dup operands
6 and 7 to better fit into the array.
2008-04-17 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (sse_builtin_type): New.

View File

@ -2127,7 +2127,7 @@
&& !x86_64_immediate_operand (operands[1], DImode) && 1"
[(set (match_dup 0) (match_dup 1))
(set (match_dup 2) (match_dup 3))]
"split_di (operands + 1, 1, operands + 2, operands + 3);
"split_di (&operands[1], 1, &operands[2], &operands[3]);
operands[1] = gen_lowpart (DImode, operands[2]);
operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
GEN_INT (4)));
@ -2142,7 +2142,7 @@
&& !x86_64_immediate_operand (operands[1], DImode)"
[(set (match_dup 0) (match_dup 1))
(set (match_dup 2) (match_dup 3))]
"split_di (operands + 1, 1, operands + 2, operands + 3);
"split_di (&operands[1], 1, &operands[2], &operands[3]);
operands[1] = gen_lowpart (DImode, operands[2]);
operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
GEN_INT (4)));
@ -2367,7 +2367,7 @@
&& !x86_64_immediate_operand (operands[1], DImode) && 1"
[(set (match_dup 2) (match_dup 3))
(set (match_dup 4) (match_dup 5))]
"split_di (operands, 2, operands + 2, operands + 4);")
"split_di (&operands[0], 2, &operands[2], &operands[4]);")
(define_split
[(set (match_operand:DI 0 "memory_operand" "")
@ -2378,7 +2378,7 @@
&& !x86_64_immediate_operand (operands[1], DImode)"
[(set (match_dup 2) (match_dup 3))
(set (match_dup 4) (match_dup 5))]
"split_di (operands, 2, operands + 2, operands + 4);")
"split_di (&operands[0], 2, &operands[2], &operands[4]);")
(define_insn "*swapdi_rex64"
[(set (match_operand:DI 0 "register_operand" "+r")
@ -5522,9 +5522,7 @@
(match_dup 4))
(match_dup 5)))
(clobber (reg:CC FLAGS_REG))])]
"split_ti (operands+0, 1, operands+0, operands+3);
split_ti (operands+1, 1, operands+1, operands+4);
split_ti (operands+2, 1, operands+2, operands+5);")
"split_ti (&operands[0], 3, &operands[0], &operands[3]);")
;; %%% splits for addsidi3
; [(set (match_operand:DI 0 "nonimmediate_operand" "")
@ -5561,9 +5559,7 @@
(match_dup 4))
(match_dup 5)))
(clobber (reg:CC FLAGS_REG))])]
"split_di (operands+0, 1, operands+0, operands+3);
split_di (operands+1, 1, operands+1, operands+4);
split_di (operands+2, 1, operands+2, operands+5);")
"split_di (&operands[0], 3, &operands[0], &operands[3]);")
(define_insn "adddi3_carry_rex64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r")
@ -7298,9 +7294,7 @@
(plus:DI (ltu:DI (reg:CC FLAGS_REG) (const_int 0))
(match_dup 5))))
(clobber (reg:CC FLAGS_REG))])]
"split_ti (operands+0, 1, operands+0, operands+3);
split_ti (operands+1, 1, operands+1, operands+4);
split_ti (operands+2, 1, operands+2, operands+5);")
"split_ti (&operands[0], 3, &operands[0], &operands[3]);")
;; %%% splits for subsidi3
@ -7333,9 +7327,7 @@
(plus:SI (ltu:SI (reg:CC FLAGS_REG) (const_int 0))
(match_dup 5))))
(clobber (reg:CC FLAGS_REG))])]
"split_di (operands+0, 1, operands+0, operands+3);
split_di (operands+1, 1, operands+1, operands+4);
split_di (operands+2, 1, operands+2, operands+5);")
"split_di (&operands[0], 3, &operands[0], &operands[3]);")
(define_insn "subdi3_carry_rex64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=rm,r")
@ -10193,20 +10185,19 @@
"TARGET_64BIT && reload_completed"
[(parallel
[(set (reg:CCZ FLAGS_REG)
(compare:CCZ (neg:DI (match_dup 2)) (const_int 0)))
(set (match_dup 0) (neg:DI (match_dup 2)))])
(compare:CCZ (neg:DI (match_dup 1)) (const_int 0)))
(set (match_dup 0) (neg:DI (match_dup 1)))])
(parallel
[(set (match_dup 1)
[(set (match_dup 2)
(plus:DI (plus:DI (ltu:DI (reg:CC FLAGS_REG) (const_int 0))
(match_dup 3))
(const_int 0)))
(clobber (reg:CC FLAGS_REG))])
(parallel
[(set (match_dup 1)
(neg:DI (match_dup 1)))
[(set (match_dup 2)
(neg:DI (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
"split_ti (operands+1, 1, operands+2, operands+3);
split_ti (operands+0, 1, operands+0, operands+1);")
"split_ti (&operands[0], 2, &operands[0], &operands[2]);")
(define_expand "negdi2"
[(parallel [(set (match_operand:DI 0 "nonimmediate_operand" "")
@ -10230,20 +10221,19 @@
"!TARGET_64BIT && reload_completed"
[(parallel
[(set (reg:CCZ FLAGS_REG)
(compare:CCZ (neg:SI (match_dup 2)) (const_int 0)))
(set (match_dup 0) (neg:SI (match_dup 2)))])
(compare:CCZ (neg:SI (match_dup 1)) (const_int 0)))
(set (match_dup 0) (neg:SI (match_dup 1)))])
(parallel
[(set (match_dup 1)
[(set (match_dup 2)
(plus:SI (plus:SI (ltu:SI (reg:CC FLAGS_REG) (const_int 0))
(match_dup 3))
(const_int 0)))
(clobber (reg:CC FLAGS_REG))])
(parallel
[(set (match_dup 1)
(neg:SI (match_dup 1)))
[(set (match_dup 2)
(neg:SI (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
"split_di (operands+1, 1, operands+2, operands+3);
split_di (operands+0, 1, operands+0, operands+1);")
"split_di (&operands[0], 2, &operands[0], &operands[2]);");
(define_insn "*negdi2_1_rex64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
@ -13225,7 +13215,7 @@
(lshiftrt:SI (match_dup 3)
(minus:QI (const_int 32) (match_dup 2)))))
(clobber (reg:CC FLAGS_REG))])]
"split_di (operands, 1, operands + 4, operands + 5);")
"split_di (&operands[0], 1, &operands[4], &operands[5]);")
(define_insn "*rotlsi3_1_one_bit_rex64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
@ -13461,7 +13451,7 @@
(ashift:SI (match_dup 3)
(minus:QI (const_int 32) (match_dup 2)))))
(clobber (reg:CC FLAGS_REG))])]
"split_di (operands, 1, operands + 4, operands + 5);")
"split_di (&operands[0], 1, &operands[4], &operands[5]);")
(define_insn "*rotrdi3_1_one_bit_rex64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=rm")
@ -19467,14 +19457,13 @@
[(set (match_dup 2)
(if_then_else:SI (match_op_dup 1 [(match_dup 4) (const_int 0)])
(match_dup 5)
(match_dup 7)))
(match_dup 6)))
(set (match_dup 3)
(if_then_else:SI (match_op_dup 1 [(match_dup 4) (const_int 0)])
(match_dup 6)
(match_dup 7)
(match_dup 8)))]
"split_di (operands+2, 1, operands+5, operands+6);
split_di (operands+3, 1, operands+7, operands+8);
split_di (operands, 1, operands+2, operands+3);")
"split_di (&operands[2], 2, &operands[5], &operands[7]);
split_di (&operands[0], 1, &operands[2], &operands[3]);")
(define_insn "*movxfcc_1"
[(set (match_operand:XF 0 "register_operand" "=f,f")