This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hello, The attached patch includes enhancements for SMS to support targets that their doloop part is not decoupled from the rest of the loop's instructions, as SMS currently requires. (ARM is an example for such target, where the loop's instructions might use CC which is used in the doloop part) The patch uses already existing closing_branch_deps field in the DDG to indicate whether the closing branch should be scheduled with the rest of the loop instructions to preserve the dependencies between them. In the current implementation, closing_branch_deps is always false which enables to leave the closing branch outside of the scheduling process and place it at ii-1 row at the end of the process. This patch extends the implementation by identifying loops where closing_branch_deps should be true and scheduling the closing branch with the rest of the instructions for such loops, rotating the branch to be in the ii-1 row at the end of the scheduling process. The patch also enables the scheduling when debug_insn is generated for instructions in the do-loop part. To enable this, a small fix was inserted on top of the already approved do-loop patch (not in mainline yet, http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html) in loop-doloop.c file to consider prev_nondebug_insn instead of PREV_INSN as follows: (the diff is against the patch in the above link and thus it is not included in the attached file, however it is part of the tested patch and thus I appreciate an approval for this part also) @@ -610,7 +614,7 @@ + inc = XVECEXP (PATTERN (prev_insn), 0, 1); + } + else -+ inc = PATTERN (PREV_INSN (doloop_pat)); ++ inc = PATTERN (prev_insn); /* We expect the condition to be of the form (reg != 0) */ cond = XEXP (SET_SRC (cmp), 0); if (GET_CODE (cond) != NE || XEXP (cond, 1) != const0_rtx) The attached patch was tested with the patch to support do-loop for ARM (http://gcc.gnu.org/ml/gcc-patches/2011-01/msg01718.html) including the fix mentioned above; as following: On ppc64-redhat-linux regtest as well as bootstrap with flags(*); enabling SMS also on loops with stage count 1. Regtested on SPU. On arm-linux-gnueabi regtseted on c,c++. Bootstrap c language with flags (*) configured w and w\o --with-arch=armv7-a; and w and w\o --with-mode=thumb (four different configurations in total) enabling SMS also on loops with stage count 1. (*) flags used for bootstrap: -O2 -fmodulo-sched -fmodulo-sched-allow-regmoves -fno-auto-inc-dec -funsafe-math-optimizations OK for trunk once stage 1 will be open? Thanks, Revital ChangeLog: * ddg.c (check_closing_branch_deps, get_node_of_insn_uid): New functions. (create_ddg): Pass sbitmap containing do-loop related instructions instead of closing_branch_deps parameter and call check_closing_branch_deps function. * ddg.h (create_ddg): Adjust the function declaration. * modulo-sched.c (PS_STAGE_COUNT): Rename to CALC_STAGE_COUNT and redefine. (doloop_register_get): Handle NONDEBUG_INSN_P. (stage_count): New field in struct partial_schedule. (mark_doloop_insns, calculate_stage_count): New functions. (normalize_sched_times): Rename to reset_sched_times and handle incrementing the sched time of the nodes by a constant value passed as parameter. (duplicate_insns_of_cycles): Skip closing branch. (sms_schedule_by_order): Schedule closing branch when closing_branch_deps is true. (ps_insn_find_column): Handle closing branch. (sms_schedule): Call reset_sched_times and handle case where do-loop pattern is not decoupled from the other loop instructions. (ps_insert_empty_row): Update calls to normalize_sched_times and rotate_partial_schedule functions. * loop-doloop.c (doloop_condition_get): Use prev_nondebug_insn instead of PREV_INSN. testsuite Changlog: * gcc.target/arm/sms-9.c: New file. * gcc.target/arm/sms-10.c: New file. (See attached file: patch_doloop_fix_7_3_new.txt) (See attached file: sms-10.c)(See attached file: sms-9.c)
Attachment:
patch_doloop_fix_7_3_new.txt
Description: Text document
Attachment:
sms-10.c
Description: Binary data
Attachment:
sms-9.c
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |