diff options
author | Nick Clifton <nickc@redhat.com> | 2014-12-24 13:36:29 +0000 |
---|---|---|
committer | Nick Clifton <nickc@gcc.gnu.org> | 2014-12-24 13:36:29 +0000 |
commit | 5704db3364d16d19ef2da79b2a6c21da8160b939 (patch) | |
tree | f413afdcd59c25e9436fdcbcb87fec218154e8bd /gcc/config/msp430 | |
parent | 923d093af2ec271144cac099e7bc7bd291c6a5fb (diff) | |
download | gcc-5704db3364d16d19ef2da79b2a6c21da8160b939.zip gcc-5704db3364d16d19ef2da79b2a6c21da8160b939.tar.gz gcc-5704db3364d16d19ef2da79b2a6c21da8160b939.tar.bz2 |
re PR target/64160 (msp430 code generation error adding 32-bit integers)
PR target/64160
* config/msp430/msp430.md (addsi splitter): Do not split when the
destination partially overlaps the source.
From-SVN: r219058
Diffstat (limited to 'gcc/config/msp430')
-rw-r--r-- | gcc/config/msp430/msp430.md | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/gcc/config/msp430/msp430.md b/gcc/config/msp430/msp430.md index 60e7b6f..d9abeef 100644 --- a/gcc/config/msp430/msp430.md +++ b/gcc/config/msp430/msp430.md @@ -402,14 +402,16 @@ operands[6] = msp430_subreg (HImode, operands[0], SImode, 2); operands[7] = msp430_subreg (HImode, operands[1], SImode, 2); operands[8] = msp430_subreg (HImode, operands[2], SImode, 2); + + /* BZ 64160: Do not use this splitter when the dest partially overlaps the source. */ + if (reg_overlap_mentioned_p (operands[3], operands[7]) + || reg_overlap_mentioned_p (operands[3], operands[8])) + FAIL; + if (GET_CODE (operands[5]) == CONST_INT) - { - operands[9] = GEN_INT (INTVAL (operands[5]) & 0xffff); - } + operands[9] = GEN_INT (INTVAL (operands[5]) & 0xffff); else - { - operands[9] = gen_rtx_ZERO_EXTEND (SImode, operands[5]); - } + operands[9] = gen_rtx_ZERO_EXTEND (SImode, operands[5]); " ) |