From e0727ae56b52ca891626a6c4242e26e5392e2796 Mon Sep 17 00:00:00 2001 From: Sandra Loosemore Date: Thu, 7 Dec 2017 23:24:21 -0500 Subject: [PATCH] nios2.md (ldio): Add splitter for memory operand. 2017-12-07 Sandra Loosemore gcc/ * config/nios2/nios2.md (ldio): Add splitter for memory operand. (ldio_signed): Likewise. (stio): Likewise. * config/nios2/predicates.md (ldstio_memory_operand): Allow SMALL_INT12 constant integer operand. From-SVN: r255493 --- gcc/ChangeLog | 9 +++++++++ gcc/config/nios2/nios2.md | 23 ++++++++++++++++++++--- gcc/config/nios2/predicates.md | 2 ++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39a6f94..bea643d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,14 @@ 2017-12-07 Sandra Loosemore + * config/nios2/nios2.md (ldio): Add splitter for memory + operand. + (ldio_signed): Likewise. + (stio): Likewise. + * config/nios2/predicates.md (ldstio_memory_operand): Allow + SMALL_INT12 constant integer operand. + +2017-12-07 Sandra Loosemore + * config/nios2/nios2.c (nios2_symbolic_constant_allowed): Rename to... (nios2_large_constant_allowed): ...this. Adjust uses. diff --git a/gcc/config/nios2/nios2.md b/gcc/config/nios2/nios2.md index 1d16be4..04693b1 100644 --- a/gcc/config/nios2/nios2.md +++ b/gcc/config/nios2/nios2.md @@ -318,12 +318,18 @@ (define_mode_attr bhw [(QI "b") (HI "h") (SI "w")]) (define_mode_attr bhw_uns [(QI "bu") (HI "hu") (SI "w")]) -(define_insn "ldio" +(define_insn_and_split "ldio" [(set (match_operand:BHW 0 "register_operand" "=r") (unspec_volatile:BHW [(match_operand:BHW 1 "ldstio_memory_operand" "w")] UNSPECV_LDXIO))] "" "ldio\\t%0, %1" + "nios2_large_constant_memory_operand_p (operands[1])" + [(set (match_dup 0) + (unspec_volatile:BHW [(match_dup 1)] UNSPECV_LDXIO))] + { + operands[1] = nios2_split_large_constant_memory_operand (operands[1]); + } [(set_attr "type" "ld")]) (define_expand "ldio" @@ -337,21 +343,32 @@ DONE; }) -(define_insn "ldio_signed" +(define_insn_and_split "ldio_signed" [(set (match_operand:SI 0 "register_operand" "=r") (sign_extend:SI (unspec_volatile:BH [(match_operand:BH 1 "ldstio_memory_operand" "w")] UNSPECV_LDXIO)))] "" "ldio\\t%0, %1" + "nios2_large_constant_memory_operand_p (operands[1])" + [(set (match_dup 0) + (sign_extend:SI (unspec_volatile:BH [(match_dup 1)] UNSPECV_LDXIO)))] + { + operands[1] = nios2_split_large_constant_memory_operand (operands[1]); + } [(set_attr "type" "ld")]) -(define_insn "stio" +(define_insn_and_split "stio" [(set (match_operand:BHW 0 "ldstio_memory_operand" "=w") (unspec_volatile:BHW [(match_operand:BHW 1 "reg_or_0_operand" "rM")] UNSPECV_STXIO))] "" "stio\\t%z1, %0" + "nios2_large_constant_memory_operand_p (operands[0])" + [(set (match_dup 0) (unspec_volatile:BHW [(match_dup 1)] UNSPECV_STXIO))] + { + operands[0] = nios2_split_large_constant_memory_operand (operands[0]); + } [(set_attr "type" "st")]) diff --git a/gcc/config/nios2/predicates.md b/gcc/config/nios2/predicates.md index e35a37e..d605299 100644 --- a/gcc/config/nios2/predicates.md +++ b/gcc/config/nios2/predicates.md @@ -146,6 +146,8 @@ return (REG_P (XEXP (addr, 0)) && CONST_INT_P (XEXP (addr, 1)) && SMALL_INT12 (INTVAL (XEXP (addr, 1)))); + else if (CONST_INT_P (addr)) + return SMALL_INT12 (INTVAL (addr)); return false; } return memory_operand (op, mode); -- 2.7.4