aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/msp430
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2014-12-24 13:36:29 +0000
committerNick Clifton <nickc@gcc.gnu.org>2014-12-24 13:36:29 +0000
commit5704db3364d16d19ef2da79b2a6c21da8160b939 (patch)
treef413afdcd59c25e9436fdcbcb87fec218154e8bd /gcc/config/msp430
parent923d093af2ec271144cac099e7bc7bd291c6a5fb (diff)
downloadgcc-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.md14
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]);
"
)