From 914d2119720344505a6ad2adb51d55fc80ed630c Mon Sep 17 00:00:00 2001
From: jozefl <jozefl@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 5 Dec 2019 10:56:02 +0000
Subject: [PATCH] MSP430: Fix postinc addressing mode being used for dst op of
CMP insns
2019-12-05 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* config/msp430/msp430.md (cbranch<mode>4): Use
msp430_general_dst_nonv_operand instead of nonimmediate_operand for
dest operand of CMP instruction.
(cbranchpsi4_real): Likewise.
(cbranchqi4_real): Likewise.
(cbranchhi4_real): Likewise.
(cbranchpsi4_reversed): Likewise.
(cbranchqi4_reversed): Likewise.
(cbranchhi4_reversed): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@278994 138bc75d-0d04-0410-961f-82ee72b054a4
---
gcc/ChangeLog | 12 ++++++++++++
gcc/config/msp430/msp430.md | 14 +++++++-------
2 files changed, 19 insertions(+), 7 deletions(-)
@@ -1,3 +1,15 @@
+2019-12-05 Jozef Lawrynowicz <jozef.l@mittosystems.com>
+
+ * config/msp430/msp430.md (cbranch<mode>4): Use
+ msp430_general_dst_nonv_operand instead of nonimmediate_operand for
+ dest operand of CMP instruction.
+ (cbranchpsi4_real): Likewise.
+ (cbranchqi4_real): Likewise.
+ (cbranchhi4_real): Likewise.
+ (cbranchpsi4_reversed): Likewise.
+ (cbranchqi4_reversed): Likewise.
+ (cbranchhi4_reversed): Likewise.
+
2019-12-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/92803
@@ -1247,7 +1247,7 @@
(define_expand "cbranch<mode>4"
[(parallel [(set (pc) (if_then_else
(match_operator 0 ""
- [(match_operand:QHI 1 "nonimmediate_operand")
+ [(match_operand:QHI 1 "msp430_general_dst_nonv_operand")
(match_operand:QHI 2 "general_operand")])
(label_ref (match_operand 3 "" ""))
(pc)))
@@ -1260,7 +1260,7 @@
(define_insn "cbranchpsi4_real"
[(set (pc) (if_then_else
(match_operator 0 "msp430_cmp_operator"
- [(match_operand:PSI 1 "nonimmediate_operand" "r,rYs,rm")
+ [(match_operand:PSI 1 "msp430_general_dst_nonv_operand" "r,rYs,rm")
(match_operand:PSI 2 "general_operand" "rLs,rYsi,rmi")])
(label_ref (match_operand 3 "" ""))
(pc)))
@@ -1276,7 +1276,7 @@
(define_insn "cbranchqi4_real"
[(set (pc) (if_then_else
(match_operator 0 "msp430_cmp_operator"
- [(match_operand:QI 1 "nonimmediate_operand" "rYsYx,rm")
+ [(match_operand:QI 1 "msp430_general_dst_nonv_operand" "rYsYx,rm")
(match_operand:QI 2 "general_operand" "rYsYxi,rmi")])
(label_ref (match_operand 3 "" ""))
(pc)))
@@ -1291,7 +1291,7 @@
(define_insn "cbranchhi4_real"
[(set (pc) (if_then_else
(match_operator 0 "msp430_cmp_operator"
- [(match_operand:HI 1 "nonimmediate_operand" "rYsYx,rm")
+ [(match_operand:HI 1 "msp430_general_dst_nonv_operand" "rYsYx,rm")
(match_operand:HI 2 "general_operand" "rYsYxi,rmi")])
(label_ref (match_operand 3 "" ""))
(pc)))
@@ -1330,7 +1330,7 @@
[(set (pc) (if_then_else
(match_operator 0 "msp430_reversible_cmp_operator"
[(match_operand:PSI 1 "general_operand" "rLs,rYsi,rmi")
- (match_operand:PSI 2 "general_operand" "r,rYs,rm")])
+ (match_operand:PSI 2 "msp430_general_dst_nonv_operand" "r,rYs,rm")])
(label_ref (match_operand 3 "" ""))
(pc)))
(clobber (reg:BI CARRY))
@@ -1346,7 +1346,7 @@
[(set (pc) (if_then_else
(match_operator 0 "msp430_reversible_cmp_operator"
[(match_operand:QI 1 "general_operand" "rYsYxi,rmi")
- (match_operand:QI 2 "general_operand" "rYsYx,rm")])
+ (match_operand:QI 2 "msp430_general_dst_nonv_operand" "rYsYx,rm")])
(label_ref (match_operand 3 "" ""))
(pc)))
(clobber (reg:BI CARRY))
@@ -1361,7 +1361,7 @@
[(set (pc) (if_then_else
(match_operator 0 "msp430_reversible_cmp_operator"
[(match_operand:HI 1 "general_operand" "rYsYxi,rmi")
- (match_operand:HI 2 "general_operand" "rYsYx,rm")])
+ (match_operand:HI 2 "msp430_general_dst_nonv_operand" "rYsYx,rm")])
(label_ref (match_operand 3 "" ""))
(pc)))
(clobber (reg:BI CARRY))
--
2.17.1
MSP430 RTL patterns for conditional branch instructions allow the post increment addressing mode to be used for the "dest" operand of CMP instructions used in these patterns. This is currently causing trunk to FTB for msp430-elf since these instructions are being generated using an autoinc for the dest operand, and the assembler is rejecting them: > ldtoa.s:1104: Error: this addressing mode is not applicable for destination operand The attached patch fixes this by using the "msp430_general_dst_nonv_operand" predicate instead of the "nonimmediate_operand" predicate for the offending RTL patterns. Successfully regtested for msp430-elf on trunk and committed as obvious.