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.
(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"