* Joern Wolfgang Rennecke <g...@amylaar.uk> [2016-04-28 18:06:42 +0100]:

> On 21/04/16 12:39, Andrew Burgess wrote:
> >
> >     * config/arc/arc.md (*loadqi_update): Replace use of 'rI'
> >     constraint with separate 'r' and 'Cm2' constraints.
> >     
> Why don't you use simply rCm2 ?

You are absolutely correct.  Thank you for pointing this out.

The much simpler version of this patch is below.

Thanks,
Andrew

---

gcc/arc: Replace rI constraint with rCm2 for ld and update insns

In the load*_update instructions the constraint 'rI' was being used,
which would accept either a register or a signed 12 bit constant.  The
problem is that the 32-bit form of ld with update only takes a signed
9-bit immediate.  As such, some ld instructions could be generated that
would, when assembled be 64-bit long, however, GCC believed them to be
32-bit long.  This error in the length would cause problems during
branch shortening.

The store*_update have the same restrictions on immediate size, however,
the patterns for these instructions already only accept 9-bit
immediates, and so should be safe.

gcc/ChangeLog:

        * config/arc/arc.md (*loadqi_update): Replace use of 'rI'
        constraint with 'rCm2' constraints to limit possible immediate
        size.
        (*load_zeroextendqisi_update): Likewise.
        (*load_signextendqisi_update): Likewise.
        (*loadhi_update): Likewise.
        (*load_zeroextendhisi_update): Likewise.
        (*load_signextendhisi_update): Likewise.
        (*loadsi_update): Likewise.
        (*loadsf_update): Likewise.
---
 gcc/ChangeLog.NPS400  | 12 ++++++++++++
 gcc/config/arc/arc.md | 16 ++++++++--------
 2 files changed, 20 insertions(+), 8 deletions(-)
 create mode 100644 gcc/ChangeLog.NPS400

diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
index d1a9159..c61107f 100644
--- a/gcc/config/arc/arc.md
+++ b/gcc/config/arc/arc.md
@@ -1254,7 +1254,7 @@
   [(set (match_operand:QI 3 "dest_reg_operand" "=r,r")
         (match_operator:QI 4 "any_mem_operand"
          [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                   (match_operand:SI 2 "nonmemory_operand" "rI,Cal"))]))
+                   (match_operand:SI 2 "nonmemory_operand" "rCm2,Cal"))]))
    (set (match_operand:SI 0 "dest_reg_operand" "=r,r")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1266,7 +1266,7 @@
   [(set (match_operand:SI 3 "dest_reg_operand" "=r,r")
        (zero_extend:SI (match_operator:QI 4 "any_mem_operand"
                         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                                  (match_operand:SI 2 "nonmemory_operand" 
"rI,Cal"))])))
+                                  (match_operand:SI 2 "nonmemory_operand" 
"rCm2,Cal"))])))
    (set (match_operand:SI 0 "dest_reg_operand" "=r,r")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1278,7 +1278,7 @@
   [(set (match_operand:SI 3 "dest_reg_operand" "=r,r")
        (sign_extend:SI (match_operator:QI 4 "any_mem_operand"
                         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                                  (match_operand:SI 2 "nonmemory_operand" 
"rI,Cal"))])))
+                                  (match_operand:SI 2 "nonmemory_operand" 
"rCm2,Cal"))])))
    (set (match_operand:SI 0 "dest_reg_operand" "=r,r")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1304,7 +1304,7 @@
   [(set (match_operand:HI 3 "dest_reg_operand" "=r,r")
        (match_operator:HI 4 "any_mem_operand"
         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                  (match_operand:SI 2 "nonmemory_operand" "rI,Cal"))]))
+                  (match_operand:SI 2 "nonmemory_operand" "rCm2,Cal"))]))
    (set (match_operand:SI 0 "dest_reg_operand" "=w,w")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1316,7 +1316,7 @@
   [(set (match_operand:SI 3 "dest_reg_operand" "=r,r")
        (zero_extend:SI (match_operator:HI 4 "any_mem_operand"
                         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                                  (match_operand:SI 2 "nonmemory_operand" 
"rI,Cal"))])))
+                                  (match_operand:SI 2 "nonmemory_operand" 
"rCm2,Cal"))])))
    (set (match_operand:SI 0 "dest_reg_operand" "=r,r")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1329,7 +1329,7 @@
   [(set (match_operand:SI 3 "dest_reg_operand" "=r,r")
        (sign_extend:SI (match_operator:HI 4 "any_mem_operand"
                         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                                  (match_operand:SI 2 "nonmemory_operand" 
"rI,Cal"))])))
+                                  (match_operand:SI 2 "nonmemory_operand" 
"rCm2,Cal"))])))
    (set (match_operand:SI 0 "dest_reg_operand" "=w,w")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1354,7 +1354,7 @@
   [(set (match_operand:SI 3 "dest_reg_operand" "=r,r")
        (match_operator:SI 4 "any_mem_operand"
         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                  (match_operand:SI 2 "nonmemory_operand" "rI,Cal"))]))
+                  (match_operand:SI 2 "nonmemory_operand" "rCm2,Cal"))]))
    (set (match_operand:SI 0 "dest_reg_operand" "=w,w")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
@@ -1378,7 +1378,7 @@
   [(set (match_operand:SF 3 "dest_reg_operand" "=r,r")
        (match_operator:SF 4 "any_mem_operand"
         [(plus:SI (match_operand:SI 1 "register_operand" "0,0")
-                  (match_operand:SI 2 "nonmemory_operand" "rI,Cal"))]))
+                  (match_operand:SI 2 "nonmemory_operand" "rCm2,Cal"))]))
    (set (match_operand:SI 0 "dest_reg_operand" "=w,w")
        (plus:SI (match_dup 1) (match_dup 2)))]
   ""
-- 
2.6.4

Reply via email to