Commit 8e90a625 by Walter Lee Committed by Walter Lee

tilegx.c (tilegx_gen_bundles): Delete barrier insns after bundles have been formed.

2014-01-25  Walter Lee  <walt@tilera.com>

            * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
            insns after bundles have been formed.
            * config/tilegx/tilegx.md (tile_network_barrier): Update
            comment.

From-SVN: r207081
parent 450c1ffe
2014-01-25 Walter Lee <walt@tilera.com> 2014-01-25 Walter Lee <walt@tilera.com>
* config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
insns before bundling.
* config/tilegx/tilegx.md (tile_network_barrier): Update
comment.
2014-01-25 Walter Lee <walt@tilera.com>
* config/tilegx/tilegx.c (tilegx_expand_builtin): Set * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
PREFETCH_SCHEDULE_BARRIER_P to true for prefetches. PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
* config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto. * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
......
...@@ -4401,10 +4401,12 @@ tilegx_gen_bundles (void) ...@@ -4401,10 +4401,12 @@ tilegx_gen_bundles (void)
basic_block bb; basic_block bb;
FOR_EACH_BB_FN (bb, cfun) FOR_EACH_BB_FN (bb, cfun)
{ {
rtx insn, next; rtx insn, next, prev;
rtx end = NEXT_INSN (BB_END (bb)); rtx end = NEXT_INSN (BB_END (bb));
for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next) prev = NULL_RTX;
for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
prev = insn, insn = next)
{ {
next = next_insn_to_bundle (NEXT_INSN (insn), end); next = next_insn_to_bundle (NEXT_INSN (insn), end);
...@@ -4429,6 +4431,18 @@ tilegx_gen_bundles (void) ...@@ -4429,6 +4431,18 @@ tilegx_gen_bundles (void)
PUT_MODE (insn, SImode); PUT_MODE (insn, SImode);
} }
} }
/* Delete barrier insns, because they can mess up the
emitting of bundle braces. If it is end-of-bundle, then
the previous insn must be marked end-of-bundle. */
if (get_attr_type (insn) == TYPE_NOTHING) {
if (GET_MODE (insn) == QImode && prev != NULL
&& GET_MODE (prev) == SImode)
{
PUT_MODE (prev, QImode);
}
delete_insn (insn);
}
} }
} }
} }
......
...@@ -5171,10 +5171,8 @@ ...@@ -5171,10 +5171,8 @@
;; Network intrinsics ;; Network intrinsics
;; Note the "pseudo" text is handled specially by the ;; Note the this barrier is of type "nothing," which is deleted after
;; asm_output_opcode routine. If the output is an empty string, the ;; the final scheduling pass so that nothing is emitted for it.
;; instruction would bypass the asm_output_opcode routine, bypassing
;; the bundle handling code.
(define_insn "tilegx_network_barrier" (define_insn "tilegx_network_barrier"
[(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)] [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
"" ""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment