------- Comment #12 from bernds at gcc dot gnu dot org  2010-08-02 10:07 -------
Subject: Bug 40457

Author: bernds
Date: Mon Aug  2 10:06:47 2010
New Revision: 162815

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=162815
Log:
        PR target/40457
        * config/arm/arm.h (arm_regs_in_sequence): Declare.
        * config/arm/arm-protos.h (emit_ldm_seq, emit_stm_seq,
        load_multiple_sequence, store_multiple_sequence): Delete
        declarations.
        (arm_gen_load_multiple, arm_gen_store_multiple): Adjust
        declarations.
        * config/arm/ldmstm.md: New file.
        * config/arm/arm.c (arm_regs_in_sequence): New array.
        (load_multiple_sequence): Now static.  New args SAVED_ORDER,
        CHECK_REGS.  All callers changed.
        If SAVED_ORDER is nonnull, copy the computed order into it.
        If CHECK_REGS is false, don't sort REGS.  Handle Thumb mode.
        (store_multiple_sequence): Now static.  New args NOPS_TOTAL,
        SAVED_ORDER, REG_RTXS and CHECK_REGS.  All callers changed.
        If SAVED_ORDER is nonnull, copy the computed order into it.
        If CHECK_REGS is false, don't sort REGS.  Set up REG_RTXS just
        like REGS.  Handle Thumb mode.
        (arm_gen_load_multiple_1): New function, broken out of
        arm_gen_load_multiple.
        (arm_gen_store_multiple_1): New function, broken out of
        arm_gen_store_multiple.
        (arm_gen_multiple_op): New function, with code from
        arm_gen_load_multiple and arm_gen_store_multiple moved here.
        (arm_gen_load_multiple, arm_gen_store_multiple): Now just
        wrappers around arm_gen_multiple_op.  Remove argument UP, all callers
        changed.
        (gen_ldm_seq, gen_stm_seq, gen_const_stm_seq): New functions.
        * config/arm/predicates.md (commutative_binary_operator): New.
        (load_multiple_operation, store_multiple_operation): Handle more
        variants of these patterns with different starting offsets.  Handle
        Thumb-1.
        * config/arm/arm.md: Include "ldmstm.md".
        (ldmsi_postinc4, ldmsi_postinc4_thumb1, ldmsi_postinc3, ldmsi_postinc2,
        ldmsi4, ldmsi3, ldmsi2, stmsi_postinc4, stmsi_postinc4_thumb1,
        stmsi_postinc3, stmsi_postinc2, stmsi4, stmsi3, stmsi2 and related
        peepholes): Delete.
        * config/arm/ldmstm.md: New file.
        * config/arm/arm-ldmstm.ml: New file.

testsuite/
        PR target/40457
        * gcc.target/arm/pr40457-1.c: New test.
        * gcc.target/arm/pr40457-2.c: New test.


Added:
    trunk/gcc/config/arm/arm-ldmstm.ml
    trunk/gcc/config/arm/ldmstm.md
    trunk/gcc/testsuite/gcc.target/arm/pr40457-1.c
    trunk/gcc/testsuite/gcc.target/arm/pr40457-2.c
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/arm/arm-protos.h
    trunk/gcc/config/arm/arm.c
    trunk/gcc/config/arm/arm.h
    trunk/gcc/config/arm/arm.md
    trunk/gcc/config/arm/predicates.md
    trunk/gcc/testsuite/ChangeLog


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40457

Reply via email to