[Beignet] [PATCH] GBE: fix one scheduling bug for ATOMIC instruction.

Yang, Rong R rong.r.yang at intel.com
Tue May 27 23:33:29 PDT 2014


Function isRead and isWrite already return true for Atomic, but Atomic use insn.extra.elem for bti, load/store use insn.extra.function for bti, and Sample and TYPED_WRITE used other field.
I think it is better to get correct bti when getIndex.

-----Original Message-----
From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of Zhigang Gong
Sent: Wednesday, May 28, 2014 10:29 AM
To: beignet at lists.freedesktop.org
Cc: Gong, Zhigang
Subject: [Beignet] [PATCH] GBE: fix one scheduling bug for ATOMIC instruction.

Atomic instruction is both read/write instruction, we need to take care of it in the instruction scheduling.

Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
---
 backend/src/backend/gen_insn_scheduling.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/backend/src/backend/gen_insn_scheduling.cpp b/backend/src/backend/gen_insn_scheduling.cpp
index 6f37ed4..578db58 100644
--- a/backend/src/backend/gen_insn_scheduling.cpp
+++ b/backend/src/backend/gen_insn_scheduling.cpp
@@ -486,6 +486,10 @@ namespace gbe
         const uint32_t index = tracker.getIndex(insn.extra.function);
         tracker.addDependency(node, index, READ_AFTER_WRITE);
       }
+      if (insn.opcode == SEL_OP_ATOMIC) {
+        const uint32_t index = tracker.getIndex(insn.extra.elem);
+        tracker.addDependency(node, index, READ_AFTER_WRITE);
+      }
       //read-after-write of scratch memory
       if (insn.opcode == SEL_OP_UNSPILL_REG) {
         const uint32_t index = tracker.getIndex(0xff); @@ -519,6 +523,10 @@ namespace gbe
         const uint32_t index = tracker.getIndex(insn.extra.function);
         tracker.addDependency(node, index, WRITE_AFTER_WRITE);
       }
+      if (insn.opcode == SEL_OP_ATOMIC) {
+        const uint32_t index = tracker.getIndex(insn.extra.elem);
+        tracker.addDependency(node, index, WRITE_AFTER_WRITE);
+      }
 
       // write-after-write in scratch memory
       if (insn.opcode == SEL_OP_SPILL_REG) { @@ -549,6 +557,10 @@ namespace gbe
         const uint32_t index = tracker.getIndex(insn.extra.function);
         tracker.addDependency(index, node, WRITE_AFTER_READ);
       }
+      if (insn.opcode == SEL_OP_ATOMIC) {
+        const uint32_t index = tracker.getIndex(insn.extra.elem);
+        tracker.addDependency(index, node, WRITE_AFTER_READ);
+      }
 
       // write-after-read in scratch memory
       if (insn.opcode == SEL_OP_UNSPILL_REG) {
--
1.8.3.2

_______________________________________________
Beignet mailing list
Beignet at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list