diff options
author | Christian Bruel <christian.bruel@st.com> | 2014-04-23 09:30:12 +0200 |
---|---|---|
committer | Christian Bruel <chrbr@gcc.gnu.org> | 2014-04-23 09:30:12 +0200 |
commit | 5e66b2e564ad79ab783f86733ad31ce34865b0e9 (patch) | |
tree | 6ca11c38886369fd842c92bc9e5d920aeaef9e64 /gcc | |
parent | aa22156410cb3056d4a56815173886f6a91b8e92 (diff) | |
download | gcc-5e66b2e564ad79ab783f86733ad31ce34865b0e9.zip gcc-5e66b2e564ad79ab783f86733ad31ce34865b0e9.tar.gz gcc-5e66b2e564ad79ab783f86733ad31ce34865b0e9.tar.bz2 |
sh.md (mov<mode>): Replace movQIHI.
2014-04-22 Christian Bruel <christian.bruel@st.com>
* config/sh/sh.md (mov<mode>): Replace movQIHI.
Force immediates to SImode.
From-SVN: r209671
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 22 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/sh/hiconst.c | 22 |
4 files changed, 42 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 38d19bd..61987af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-04-22 Christian Bruel <christian.bruel@st.com> + + * config/sh/sh.md (mov<mode>): Replace movQIHI. + Force immediates to SImode. + 2014-04-22 Sandra Loosemore <sandra@codesourcery.com> * config/nios2/nios2.md (UNSPEC_ROUND): New. diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 9035bfc..367f4ef 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -6978,20 +6978,20 @@ label: [(set_attr "type" "sfunc") (set_attr "needs_delay_slot" "yes")]) -(define_expand "movhi" - [(set (match_operand:HI 0 "general_movdst_operand" "") - (match_operand:HI 1 "general_movsrc_operand" ""))] +(define_expand "mov<mode>" + [(set (match_operand:QIHI 0 "general_movdst_operand") + (match_operand:QIHI 1 "general_movsrc_operand"))] "" { - prepare_move_operands (operands, HImode); -}) + if (can_create_pseudo_p () && CONST_INT_P (operands[1]) + && REG_P (operands[0]) && REGNO (operands[0]) != R0_REG) + { + rtx reg = gen_reg_rtx(SImode); + emit_move_insn (reg, operands[1]); + operands[1] = gen_lowpart (<MODE>mode, reg); + } -(define_expand "movqi" - [(set (match_operand:QI 0 "general_operand" "") - (match_operand:QI 1 "general_operand" ""))] - "" -{ - prepare_move_operands (operands, QImode); + prepare_move_operands (operands, <MODE>mode); }) ;; Specifying the displacement addressing load / store patterns separately diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 78b0e34..69a5667 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-04-22 Christian Bruel <christian.bruel@st.com> + + * gcc.target/sh/hiconst.c: New test. + 2014-04-22 Sandra Loosemore <sandra@codesourcery.com> * gcc.target/nios2/custom-fp-conversion.c: Adjust to test that diff --git a/gcc/testsuite/gcc.target/sh/hiconst.c b/gcc/testsuite/gcc.target/sh/hiconst.c new file mode 100644 index 0000000..d471d20 --- /dev/null +++ b/gcc/testsuite/gcc.target/sh/hiconst.c @@ -0,0 +1,22 @@ +/* { dg-do compile { target "sh*-*-*" } } */ +/* { dg-options "-O1" } */ + +char a; +int b; + +foo(char *pt, int *pti) +{ + a = 0; + b = 0; + *pt = 0; + *pti = 0; +} + +rab(char *pt, int *pti) +{ + pt[2] = 0; + pti[3] = 0; +} + +/* { dg-final { scan-assembler-times "mov\t#0" 2 } } */ + |