diff mbox series

[committed] Fix minor bug in epiphany port

Message ID d45fd0b5-9706-48a8-88df-f355904954a3@gmail.com
State New
Headers show
Series [committed] Fix minor bug in epiphany port | expand

Commit Message

Jeff Law Jan. 9, 2024, 5:19 p.m. UTC
So I consider this port dead as it semi-randomly fails in reload due to 
unrelated changes earlier in the gimple and RTL pipelines.  Regardless 
Richard S's late-combine work did show a very obvious error in the port 
that we should go ahead and fix as long as the port is in-tree.

The epiphany add-with-immediate instruction allows an 11 bit signed 
immediate.  That gives the instruction an immediate range of -1024..1023.

The port actually allowed -8192..8191 due to the uber-weird constraint 
definition.  I've simplified the constraint to match the hardware 
documentation I was able to find.  That was enough to get the epiphany 
port to build libgcc/newlib with Richard S's late-combine work.

The testsuite is so flakey on that port (due to the reload failures) 
that my tester doesn't run it.  So no comparisons are available.

Anyway, I've pushed this to the trunk.

jeff
commit 0beb20c01cf7120c724f9882be41a77e970fe63d
Author: Jeff Law <jlaw@ventanamicro.com>
Date:   Tue Jan 9 10:17:54 2024 -0700

    [committed] Fix minor bug in epiphany port
    
    So I consider this port dead as it semi-randomly fails in reload due to
    unrelated changes earlier in the gimple and RTL pipelines.  Regardless Richard
    S's late-combine work did show a very obvious error in the port that we should
    go ahead and fix as long as the port is in-tree.
    
    The epiphany add-with-immediate instruction allows an 11 bit signed immediate.
    That gives the instruction an immediate range of -1024..1023.
    
    The port actually allowed -8192..8191 due to the uber-weird constraint
    definition.  I've simplified the constraint to match the hardware documentation
    I was able to find.  That was enough to get the epiphany port to build
    libgcc/newlib with Richard S's late-combine work.
    
    The testsuite is so flakey on that port (due to the reload failures) that my
    tester doesn't run it.  So no comparisons are available.
    
    gcc/
            * config/epiphany/constraints.md (Car): Allow -1024..1023, no more,
            no less.
diff mbox series

Patch

diff --git a/gcc/config/epiphany/constraints.md b/gcc/config/epiphany/constraints.md
index e4fda2d34a4..5dc960175f1 100644
--- a/gcc/config/epiphany/constraints.md
+++ b/gcc/config/epiphany/constraints.md
@@ -98,12 +98,12 @@  (define_constraint "Rgs"
        (match_test "REGNO (op) >= FIRST_PSEUDO_REGISTER || REGNO (op) <= 7")))
 
 ;; Constant suitable for the addsi3_r pattern.
+;; No idea why we previously used RTX_OK_FOR_OFFSET with SI, HI an QI
+;; modes.  The instruction in question accepts 11 bit signed constants.
 (define_constraint "Car"
   "addsi3_r constant."
   (and (match_code "const_int")
-       (ior (match_test "RTX_OK_FOR_OFFSET_P (SImode, op)")
-	    (match_test "RTX_OK_FOR_OFFSET_P (HImode, op)")
-	    (match_test "RTX_OK_FOR_OFFSET_P (QImode, op)"))))
+       (match_test "IN_RANGE (INTVAL (op), -1024, 1023)")))
 
 ;; The return address if it can be replaced with GPR_LR.
 (define_constraint "Rra"