re PR target/64160 (msp430 code generation error adding 32-bit integers)
authorNick Clifton <nickc@redhat.com>
Wed, 24 Dec 2014 13:36:29 +0000 (13:36 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Wed, 24 Dec 2014 13:36:29 +0000 (13:36 +0000)
PR target/64160
* config/msp430/msp430.md (addsi splitter): Do not split when the
destination partially overlaps the source.

From-SVN: r219058

gcc/ChangeLog
gcc/config/msp430/msp430.md

index 0d817d26994e1d4161226c0f1a4b0d541f53d587..259e2af9f989768b6dc9f1d6c1ae57055ba5b38c 100644 (file)
@@ -1,3 +1,9 @@
+2014-12-24  Nick Clifton  <nickc@redhat.com>
+
+       PR target/64160
+       * config/msp430/msp430.md (addsi splitter): Do not split when the
+       destination partially overlaps the source.
+
 2014-12-22  Zhouyi Zhou <yizhouzhou@ict.ac.cn>
 
        * ira-build.c (ira_flattening): Add the current
index 60e7b6ff14208adba43fa17364060127841932ee..d9abeef545bcdd667870911708ccef9119b34618 100644 (file)
    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]);
    "
   )