From: Sandra Loosemore Date: Fri, 8 Dec 2017 04:24:21 +0000 (-0500) Subject: nios2.md (ldio): Add splitter for memory operand. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e0727ae56b52ca891626a6c4242e26e5392e2796;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39a6f94c4ad..bea643d6285 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +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): diff --git a/gcc/config/nios2/nios2.md b/gcc/config/nios2/nios2.md index 1d16be48992..04693b1ab4f 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 e35a37e5968..d60529998c9 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);