From ddc75e8bafc26ece2c4792f13fb36693a1b2f8ce Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 22 May 2015 14:17:09 -0600 Subject: [PATCH] pa.md (integer_indexed_store splitters): Use mem_shadd_operand. * config/pa/pa.md (integer_indexed_store splitters): Use mem_shadd_operand. Use ASHIFT rather than MULT in the resulting insns -- adjusting the constant 2nd operand accordingly. From-SVN: r223586 --- gcc/ChangeLog | 4 ++++ gcc/config/pa/pa.md | 30 +++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a6f06d9dfe3..769c7b5e58f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2015-05-22 Jeff Law + * config/pa/pa.md (integer_indexed_store splitters): Use + mem_shadd_operand. Use ASHIFT rather than MULT in the resulting + insns -- adjusting the constant 2nd operand accordingly. + * combine.c (try_combine): Canonicalize (plus (mult X pow2) Y) into (plus (ashift X log2) Y) if it is a split point. diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index aaec27d985e..6cc7a3cf054 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -2819,42 +2819,54 @@ ;; a 2 insn store with some creative RTL rewriting. (define_split [(set (mem:SI (plus:SI (mult:SI (match_operand:SI 0 "register_operand" "") - (match_operand:SI 1 "shadd_operand" "")) + (match_operand:SI 1 "mem_shadd_operand" "")) (plus:SI (match_operand:SI 2 "register_operand" "") (match_operand:SI 3 "const_int_operand" "")))) (match_operand:SI 4 "register_operand" "")) (clobber (match_operand:SI 5 "register_operand" ""))] "" - [(set (match_dup 5) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + [(set (match_dup 5) (plus:SI (ashift:SI (match_dup 0) (match_dup 1)) (match_dup 2))) (set (mem:SI (plus:SI (match_dup 5) (match_dup 3))) (match_dup 4))] - "") + " +{ + operands[1] = GEN_INT (exact_log2 (INTVAL (operands[1]))); + +}") (define_split [(set (mem:HI (plus:SI (mult:SI (match_operand:SI 0 "register_operand" "") - (match_operand:SI 1 "shadd_operand" "")) + (match_operand:SI 1 "mem_shadd_operand" "")) (plus:SI (match_operand:SI 2 "register_operand" "") (match_operand:SI 3 "const_int_operand" "")))) (match_operand:HI 4 "register_operand" "")) (clobber (match_operand:SI 5 "register_operand" ""))] "" - [(set (match_dup 5) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + [(set (match_dup 5) (plus:SI (ashift:SI (match_dup 0) (match_dup 1)) (match_dup 2))) (set (mem:HI (plus:SI (match_dup 5) (match_dup 3))) (match_dup 4))] - "") + " +{ + operands[1] = GEN_INT (exact_log2 (INTVAL (operands[1]))); + +}") (define_split [(set (mem:QI (plus:SI (mult:SI (match_operand:SI 0 "register_operand" "") - (match_operand:SI 1 "shadd_operand" "")) + (match_operand:SI 1 "mem_shadd_operand" "")) (plus:SI (match_operand:SI 2 "register_operand" "") (match_operand:SI 3 "const_int_operand" "")))) (match_operand:QI 4 "register_operand" "")) (clobber (match_operand:SI 5 "register_operand" ""))] "" - [(set (match_dup 5) (plus:SI (mult:SI (match_dup 0) (match_dup 1)) + [(set (match_dup 5) (plus:SI (ashift:SI (match_dup 0) (match_dup 1)) (match_dup 2))) (set (mem:QI (plus:SI (match_dup 5) (match_dup 3))) (match_dup 4))] - "") + " +{ + operands[1] = GEN_INT (exact_log2 (INTVAL (operands[1]))); + +}") (define_expand "movhi" [(set (match_operand:HI 0 "general_operand" "") -- 2.30.2