* [SH] Use some more insn_and_split in MD
@ 2012-07-17 19:49 Oleg Endo
2012-07-18 0:37 ` Kaz Kojima
0 siblings, 1 reply; 2+ messages in thread
From: Oleg Endo @ 2012-07-17 19:49 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 805 bytes --]
Hello,
The attached patch folds some define_insn and define_split with
define_insn_and_split and removes constraints in some expander
definitions.
Tested on rev 189549 with
make -k check RUNTESTFLAGS="--target_board=sh-sim
\{-m2/-ml,-m2/-mb,-m2a/-mb,-m2a-single/-mb,-m4/-ml,-m4/-mb,
-m4-single/-ml,-m4-single/-mb,-m4a-single/-ml,-m4a-single/-mb}"
and no new failures.
CSiBE result-size (-m4-single -ml -O2 -mpretend-cmove) also shows no
changes.
OK?
Cheers,
Oleg
ChangeLog:
* config/sh/sh.md (mulsidi3, umulsidi3): Remove constraints in
expander. Use arith_reg_dest predicate.
(rotldi3, rotrdi3): Remove constraints in expander.
(adddi3_compact, subdi3_compact, mulsidi3_compact,
umulsidi3_compact, ashlsi3_n, *ashlhi3_n, ashrsi2_16,
ashrsi2_31, lshrsi3_n): Convert to insn_and_split.
[-- Attachment #2: sh_fold_insn_and_split.patch --]
[-- Type: text/x-patch, Size: 10969 bytes --]
Index: gcc/config/sh/sh.md
===================================================================
--- gcc/config/sh/sh.md (revision 189427)
+++ gcc/config/sh/sh.md (working copy)
@@ -1431,21 +1431,14 @@
[(set_attr "type" "arith_media")
(set_attr "highpart" "ignore")])
-(define_insn "adddi3_compact"
+(define_insn_and_split "adddi3_compact"
[(set (match_operand:DI 0 "arith_reg_dest" "=&r")
(plus:DI (match_operand:DI 1 "arith_reg_operand" "%0")
(match_operand:DI 2 "arith_reg_operand" "r")))
(clobber (reg:SI T_REG))]
"TARGET_SH1"
"#"
- [(set_attr "length" "6")])
-
-(define_split
- [(set (match_operand:DI 0 "arith_reg_dest" "")
- (plus:DI (match_operand:DI 1 "arith_reg_operand" "")
- (match_operand:DI 2 "arith_reg_operand" "")))
- (clobber (reg:SI T_REG))]
- "TARGET_SH1 && reload_completed"
+ "&& reload_completed"
[(const_int 0)]
{
rtx high0 = gen_highpart (SImode, operands[0]);
@@ -1556,21 +1549,14 @@
[(set_attr "type" "arith_media")
(set_attr "highpart" "ignore")])
-(define_insn "subdi3_compact"
+(define_insn_and_split "subdi3_compact"
[(set (match_operand:DI 0 "arith_reg_dest" "=&r")
(minus:DI (match_operand:DI 1 "arith_reg_operand" "0")
(match_operand:DI 2 "arith_reg_operand" "r")))
(clobber (reg:SI T_REG))]
"TARGET_SH1"
"#"
- [(set_attr "length" "6")])
-
-(define_split
- [(set (match_operand:DI 0 "arith_reg_dest" "")
- (minus:DI (match_operand:DI 1 "arith_reg_operand" "")
- (match_operand:DI 2 "arith_reg_operand" "")))
- (clobber (reg:SI T_REG))]
- "TARGET_SH1 && reload_completed"
+ "&& reload_completed"
[(const_int 0)]
{
rtx high0 = gen_highpart (SImode, operands[0]);
@@ -2861,9 +2847,9 @@
[(set_attr "type" "dmpy")])
(define_expand "mulsidi3"
- [(set (match_operand:DI 0 "arith_reg_operand" "=r")
- (mult:DI (sign_extend:DI (match_operand:SI 1 "arith_reg_operand" "r"))
- (sign_extend:DI (match_operand:SI 2 "arith_reg_operand" "r"))))]
+ [(set (match_operand:DI 0 "arith_reg_dest" "")
+ (mult:DI (sign_extend:DI (match_operand:SI 1 "arith_reg_operand" ""))
+ (sign_extend:DI (match_operand:SI 2 "arith_reg_operand" ""))))]
"TARGET_SH2 || TARGET_SHMEDIA"
{
if (TARGET_SH2)
@@ -2882,7 +2868,7 @@
[(set_attr "type" "dmpy_media")
(set_attr "highpart" "ignore")])
-(define_insn "mulsidi3_compact"
+(define_insn_and_split "mulsidi3_compact"
[(set (match_operand:DI 0 "arith_reg_dest" "=r")
(mult:DI
(sign_extend:DI (match_operand:SI 1 "arith_reg_operand" "r"))
@@ -2890,16 +2876,8 @@
(clobber (reg:SI MACH_REG))
(clobber (reg:SI MACL_REG))]
"TARGET_SH2"
- "#")
-
-(define_split
- [(set (match_operand:DI 0 "arith_reg_dest" "")
- (mult:DI
- (sign_extend:DI (match_operand:SI 1 "arith_reg_operand" ""))
- (sign_extend:DI (match_operand:SI 2 "arith_reg_operand" ""))))
- (clobber (reg:SI MACH_REG))
- (clobber (reg:SI MACL_REG))]
- "TARGET_SH2"
+ "#"
+ "&& 1"
[(const_int 0)]
{
rtx low_dst = gen_lowpart (SImode, operands[0]);
@@ -2930,9 +2908,9 @@
[(set_attr "type" "dmpy")])
(define_expand "umulsidi3"
- [(set (match_operand:DI 0 "arith_reg_operand" "=r")
- (mult:DI (zero_extend:DI (match_operand:SI 1 "arith_reg_operand" "r"))
- (zero_extend:DI (match_operand:SI 2 "arith_reg_operand" "r"))))]
+ [(set (match_operand:DI 0 "arith_reg_dest" "")
+ (mult:DI (zero_extend:DI (match_operand:SI 1 "arith_reg_operand" ""))
+ (zero_extend:DI (match_operand:SI 2 "arith_reg_operand" ""))))]
"TARGET_SH2 || TARGET_SHMEDIA"
{
if (TARGET_SH2)
@@ -2951,7 +2929,7 @@
[(set_attr "type" "dmpy_media")
(set_attr "highpart" "ignore")])
-(define_insn "umulsidi3_compact"
+(define_insn_and_split "umulsidi3_compact"
[(set (match_operand:DI 0 "arith_reg_dest" "=r")
(mult:DI
(zero_extend:DI (match_operand:SI 1 "arith_reg_operand" "r"))
@@ -2959,15 +2937,8 @@
(clobber (reg:SI MACH_REG))
(clobber (reg:SI MACL_REG))]
"TARGET_SH2"
- "#")
-
-(define_split
- [(set (match_operand:DI 0 "arith_reg_dest" "")
- (mult:DI (zero_extend:DI (match_operand:SI 1 "arith_reg_operand" ""))
- (zero_extend:DI (match_operand:SI 2 "arith_reg_operand" ""))))
- (clobber (reg:SI MACH_REG))
- (clobber (reg:SI MACL_REG))]
- "TARGET_SH2"
+ "#"
+ "&& 1"
[(const_int 0)]
{
rtx low_dst = gen_lowpart (SImode, operands[0]);
@@ -3366,9 +3337,9 @@
;; -------------------------------------------------------------------------
(define_expand "rotldi3"
- [(set (match_operand:DI 0 "arith_reg_dest" "=r")
- (rotate:DI (match_operand:DI 1 "arith_reg_operand" "r")
- (match_operand:HI 2 "mextr_bit_offset" "i")))]
+ [(set (match_operand:DI 0 "arith_reg_dest" "")
+ (rotate:DI (match_operand:DI 1 "arith_reg_operand" "")
+ (match_operand:HI 2 "mextr_bit_offset" "")))]
"TARGET_SHMEDIA"
"if (! mextr_bit_offset (operands[2], HImode)) FAIL;")
@@ -3387,9 +3358,9 @@
[(set_attr "type" "arith_media")])
(define_expand "rotrdi3"
- [(set (match_operand:DI 0 "arith_reg_dest" "=r")
- (rotatert:DI (match_operand:DI 1 "arith_reg_operand" "r")
- (match_operand:HI 2 "mextr_bit_offset" "i")))]
+ [(set (match_operand:DI 0 "arith_reg_dest" "")
+ (rotatert:DI (match_operand:DI 1 "arith_reg_operand" "")
+ (match_operand:HI 2 "mextr_bit_offset" "")))]
"TARGET_SHMEDIA"
{
if (! mextr_bit_offset (operands[2], HImode))
@@ -3567,13 +3538,19 @@
shll%O2 %0"
[(set_attr "type" "arith")])
-(define_insn "ashlsi3_n"
+(define_insn_and_split "ashlsi3_n"
[(set (match_operand:SI 0 "arith_reg_dest" "=r")
(ashift:SI (match_operand:SI 1 "arith_reg_operand" "0")
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (reg:SI T_REG))]
"TARGET_SH1 && ! sh_dynamicalize_shift_p (operands[2])"
"#"
+ "TARGET_SH1 && reload_completed"
+ [(use (reg:SI R0_REG))]
+{
+ gen_shifty_op (ASHIFT, operands);
+ DONE;
+}
[(set (attr "length")
(cond [(match_test "shift_insns_rtx (insn)")
(const_string "2")
@@ -3584,18 +3561,6 @@
(const_string "8")))
(set_attr "type" "arith")])
-(define_split
- [(set (match_operand:SI 0 "arith_reg_dest" "")
- (ashift:SI (match_operand:SI 1 "arith_reg_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))
- (clobber (reg:SI T_REG))]
- "TARGET_SH1 && reload_completed"
- [(use (reg:SI R0_REG))]
-{
- gen_shifty_op (ASHIFT, operands);
- DONE;
-})
-
(define_insn "ashlsi3_media"
[(set (match_operand:SI 0 "arith_reg_dest" "=r,r")
(ashift:SI (match_operand:SI 1 "extend_reg_operand" "r,r")
@@ -3631,21 +3596,6 @@
FAIL;
})
-(define_insn "*ashlhi3_n"
- [(set (match_operand:HI 0 "arith_reg_dest" "=r")
- (ashift:HI (match_operand:HI 1 "arith_reg_operand" "0")
- (match_operand:HI 2 "const_int_operand" "n")))
- (clobber (reg:SI T_REG))]
- "TARGET_SH1"
- "#"
- [(set (attr "length")
- (cond [(match_test "shift_insns_rtx (insn)")
- (const_string "2")
- (eq (symbol_ref "shift_insns_rtx (insn)") (const_int 2))
- (const_string "4")]
- (const_string "6")))
- (set_attr "type" "arith")])
-
(define_expand "ashlhi3"
[(parallel [(set (match_operand:HI 0 "arith_reg_operand" "")
(ashift:HI (match_operand:HI 1 "arith_reg_operand" "")
@@ -3661,17 +3611,26 @@
operands[1] = copy_to_mode_reg (HImode, operands[1]);
})
-(define_split
- [(set (match_operand:HI 0 "arith_reg_dest" "")
- (ashift:HI (match_operand:HI 1 "arith_reg_operand" "")
- (match_operand:HI 2 "const_int_operand" "")))
+(define_insn_and_split "*ashlhi3_n"
+ [(set (match_operand:HI 0 "arith_reg_dest" "=r")
+ (ashift:HI (match_operand:HI 1 "arith_reg_operand" "0")
+ (match_operand:HI 2 "const_int_operand" "n")))
(clobber (reg:SI T_REG))]
- "TARGET_SH1 && reload_completed"
+ "TARGET_SH1"
+ "#"
+ "&& reload_completed"
[(use (reg:SI R0_REG))]
{
gen_shifty_hi_op (ASHIFT, operands);
DONE;
-})
+}
+ [(set (attr "length")
+ (cond [(match_test "shift_insns_rtx (insn)")
+ (const_string "2")
+ (eq (symbol_ref "shift_insns_rtx (insn)") (const_int 2))
+ (const_string "4")]
+ (const_string "6")))
+ (set_attr "type" "arith")])
;;
;; arithmetic shift right
@@ -3694,19 +3653,13 @@
;; ??? This should be a define expand.
-(define_insn "ashrsi2_16"
+(define_insn_and_split "ashrsi2_16"
[(set (match_operand:SI 0 "arith_reg_dest" "=r")
(ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "r")
(const_int 16)))]
"TARGET_SH1"
"#"
- [(set_attr "length" "4")])
-
-(define_split
- [(set (match_operand:SI 0 "arith_reg_dest" "")
- (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "")
- (const_int 16)))]
- "TARGET_SH1"
+ "&& 1"
[(set (match_dup 0) (rotate:SI (match_dup 1) (const_int 16)))
(set (match_dup 0) (sign_extend:SI (match_dup 2)))]
{
@@ -3715,21 +3668,14 @@
;; ??? This should be a define expand.
-(define_insn "ashrsi2_31"
+(define_insn_and_split "ashrsi2_31"
[(set (match_operand:SI 0 "arith_reg_dest" "=r")
(ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
(const_int 31)))
(clobber (reg:SI T_REG))]
"TARGET_SH1"
"#"
- [(set_attr "length" "4")])
-
-(define_split
- [(set (match_operand:SI 0 "arith_reg_dest" "")
- (ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "")
- (const_int 31)))
- (clobber (reg:SI T_REG))]
- "TARGET_SH1"
+ "&& 1"
[(const_int 0)]
{
emit_insn (gen_ashlsi_c (operands[0], operands[1]));
@@ -3799,7 +3745,7 @@
(set_attr "highpart" "ignore")])
(define_expand "ashrsi3"
- [(parallel [(set (match_operand:SI 0 "arith_reg_operand" "")
+ [(parallel [(set (match_operand:SI 0 "arith_reg_dest" "")
(ashiftrt:SI (match_operand:SI 1 "arith_reg_operand" "")
(match_operand:SI 2 "nonmemory_operand" "")))
(clobber (reg:SI T_REG))])]
@@ -3846,13 +3792,19 @@
"shlr%O2 %0"
[(set_attr "type" "arith")])
-(define_insn "lshrsi3_n"
+(define_insn_and_split "lshrsi3_n"
[(set (match_operand:SI 0 "arith_reg_dest" "=r")
(lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "0")
(match_operand:SI 2 "const_int_operand" "n")))
(clobber (reg:SI T_REG))]
"TARGET_SH1 && ! sh_dynamicalize_shift_p (operands[2])"
"#"
+ "TARGET_SH1 && reload_completed"
+ [(use (reg:SI R0_REG))]
+{
+ gen_shifty_op (LSHIFTRT, operands);
+ DONE;
+}
[(set (attr "length")
(cond [(match_test "shift_insns_rtx (insn)")
(const_string "2")
@@ -3863,18 +3815,6 @@
(const_string "8")))
(set_attr "type" "arith")])
-(define_split
- [(set (match_operand:SI 0 "arith_reg_dest" "")
- (lshiftrt:SI (match_operand:SI 1 "arith_reg_operand" "")
- (match_operand:SI 2 "const_int_operand" "")))
- (clobber (reg:SI T_REG))]
- "TARGET_SH1 && reload_completed"
- [(use (reg:SI R0_REG))]
-{
- gen_shifty_op (LSHIFTRT, operands);
- DONE;
-})
-
(define_insn "lshrsi3_media"
[(set (match_operand:SI 0 "arith_reg_dest" "=r,r")
(lshiftrt:SI (match_operand:SI 1 "extend_reg_operand" "r,r")
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [SH] Use some more insn_and_split in MD
2012-07-17 19:49 [SH] Use some more insn_and_split in MD Oleg Endo
@ 2012-07-18 0:37 ` Kaz Kojima
0 siblings, 0 replies; 2+ messages in thread
From: Kaz Kojima @ 2012-07-18 0:37 UTC (permalink / raw)
To: oleg.endo; +Cc: gcc-patches
Oleg Endo <oleg.endo@t-online.de> wrote:
> The attached patch folds some define_insn and define_split with
> define_insn_and_split and removes constraints in some expander
> definitions.
>
> Tested on rev 189549 with
> make -k check RUNTESTFLAGS="--target_board=sh-sim
> \{-m2/-ml,-m2/-mb,-m2a/-mb,-m2a-single/-mb,-m4/-ml,-m4/-mb,
> -m4-single/-ml,-m4-single/-mb,-m4a-single/-ml,-m4a-single/-mb}"
>
> and no new failures.
> CSiBE result-size (-m4-single -ml -O2 -mpretend-cmove) also shows no
> changes.
>
> OK?
OK.
Regards,
kaz
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-07-18 0:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-17 19:49 [SH] Use some more insn_and_split in MD Oleg Endo
2012-07-18 0:37 ` Kaz Kojima
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).