On 05/23/2012 10:48 AM, Pat Haugen wrote:
The following patch fixes existing code that tried to prevent load-hit-store 
(LHS) from being in the same dispatch group. The main problem was use of the 
wrong dependency list in is_costly_group(), but I also added code to verify the 
memory refs overlap and to emit group ending nops for those ISAs that have them.

Bootstrap/regtest on powerpc64-linux with no new regressions. Ok for trunk?

-Pat


2012-05-23  Pat Haugen <pthau...@us.ibm.com>

         * config/rs6000/rs6000.c (rs6000_option_override_internal): Change
         rs6000_sched_costly_dep default to true_store_to_load_dep_costly.
         (adjacent_mem_locations): Move some code to and call...
         (get_memref_parts): ...new function.
         (mem_locations_overlap): New function.
         (rs6000_adjust_priority): Adjust calls to is_load_insn/is_store_insn.
         (is_mem_ref): Rename to...
         (find_mem_ref): ...this. Return MEM rtx.
         (get_store_dest): Remove function.
         (is_load_insn1, is_load_insn, is_store_insn1, is_store_insn): Add
         new parameter and adjust calls.
         (rs6000_is_costly_dependence): Update calls for extra arg. Make sure
         mem refs overlap for true_store_to_load_dep_costly.
         (rs6000_sched_reorder2): Update calls for extra arg. Adjust args
         passed to adjacent_mem_locations.
         (is_costly_group): Walk resolved dependency list.
         (force_new_group): Emit group ending nop for Power6/Power7.
         * config/rs6000/rs6000.md (UNSPEC_GRP_END_NOP): New enum value.
         (group_ending_nop): New define_insn.

gcc/testsuite:
         * gcc.target/powerpc/lhs-1.c: New.
         * gcc.target/powerpc/lhs-2.c: New.
         * gcc.target/powerpc/lhs-3.c: New.



Ok for backport to 4.7 branch now that that is open again?

-Pat

Reply via email to