diff options
author | Ruiling Song <ruiling.song@intel.com> | 2015-04-30 11:49:46 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2015-05-15 13:13:37 +0800 |
commit | 030cc96a3a0f94dbf99b8fb441bd0108ad027c79 (patch) | |
tree | c0921a4d06a7fd3362279a56be94e02b010f7fca | |
parent | 5c5e4456eff7ee4de5d6bbd09be4698b5893872b (diff) |
GBE: make all memory operation share same bti dependency.
As we are going to support dynamic bti, it is impossible
to add the bti dependency. so just use one bti dependency,
that is to say, we don't change the memory instruction sequence
in instruction scheduler.
Signed-off-by: Ruiling Song <ruiling.song@intel.com>
Reviewed-by: Zhigang Gong <zhigang.gong@intel.com>
-rw-r--r-- | backend/src/backend/gen_insn_scheduling.cpp | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/backend/src/backend/gen_insn_scheduling.cpp b/backend/src/backend/gen_insn_scheduling.cpp index f3ed4b03..b3b70424 100644 --- a/backend/src/backend/gen_insn_scheduling.cpp +++ b/backend/src/backend/gen_insn_scheduling.cpp @@ -159,7 +159,7 @@ namespace gbe /*! Get an index in the node array for the given register */ uint32_t getIndex(GenRegister reg) const; /*! Get an index in the node array for the given memory system */ - uint32_t getIndex(uint32_t bti) const; + uint32_t getMemoryIndex() const; /*! Add a new dependency "node0 depends on node1" */ void addDependency(ScheduleDAGNode *node0, ScheduleDAGNode *node1, DepMode m); /*! Add a new dependency "node0 depends on node located at index" */ @@ -353,9 +353,9 @@ namespace gbe return reg.value.reg; } - uint32_t DependencyTracker::getIndex(uint32_t bti) const { + uint32_t DependencyTracker::getMemoryIndex() const { const uint32_t memDelta = grfNum + MAX_ARF_REGISTER; - return bti == 0xfe ? memDelta + LOCAL_MEMORY : (bti == 0xff ? memDelta + SCRATCH_MEMORY : memDelta + GLOBAL_MEMORY); + return memDelta; } void DependencyTracker::updateWrites(ScheduleDAGNode *node) { @@ -386,22 +386,21 @@ namespace gbe // Track writes in memory if (insn.isWrite()) { - const uint32_t index = this->getIndex(insn.getbti()); + const uint32_t index = this->getMemoryIndex(); this->nodes[index] = node; } // Track writes in scratch memory if(insn.opcode == SEL_OP_SPILL_REG) { - const uint32_t index = this->getIndex(0xff); + const uint32_t index = this->getMemoryIndex(); this->nodes[index] = node; } // Consider barriers and wait write to memory if (insn.opcode == SEL_OP_BARRIER || insn.opcode == SEL_OP_FENCE || insn.opcode == SEL_OP_WAIT) { - const uint32_t local = this->getIndex(0xfe); - const uint32_t global = this->getIndex(0x00); - this->nodes[local] = this->nodes[global] = node; + const uint32_t memIndex = this->getMemoryIndex(); + this->nodes[memIndex] = node; } } @@ -489,12 +488,12 @@ namespace gbe // read-after-write in memory if (insn.isRead()) { - const uint32_t index = tracker.getIndex(insn.getbti()); + const uint32_t index = tracker.getMemoryIndex(); 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); + const uint32_t index = tracker.getMemoryIndex(); tracker.addDependency(node, index, READ_AFTER_WRITE); } @@ -502,10 +501,8 @@ namespace gbe if (insn.opcode == SEL_OP_BARRIER || insn.opcode == SEL_OP_FENCE || insn.opcode == SEL_OP_WAIT) { - const uint32_t local = tracker.getIndex(0xfe); - const uint32_t global = tracker.getIndex(0x00); - tracker.addDependency(node, local, READ_AFTER_WRITE); - tracker.addDependency(node, global, READ_AFTER_WRITE); + const uint32_t memIndex = tracker.getMemoryIndex(); + tracker.addDependency(node, memIndex, READ_AFTER_WRITE); } // write-after-write in registers @@ -522,13 +519,13 @@ namespace gbe // write-after-write in memory if (insn.isWrite()) { - const uint32_t index = tracker.getIndex(insn.getbti()); + const uint32_t index = tracker.getMemoryIndex(); tracker.addDependency(node, index, WRITE_AFTER_WRITE); } // write-after-write in scratch memory if (insn.opcode == SEL_OP_SPILL_REG) { - const uint32_t index = tracker.getIndex(0xff); + const uint32_t index = tracker.getMemoryIndex(); tracker.addDependency(node, index, WRITE_AFTER_WRITE); } @@ -552,13 +549,13 @@ namespace gbe // write-after-read in memory if (insn.isRead()) { - const uint32_t index = tracker.getIndex(insn.getbti()); + const uint32_t index = tracker.getMemoryIndex(); tracker.addDependency(index, node, WRITE_AFTER_READ); } // write-after-read in scratch memory if (insn.opcode == SEL_OP_UNSPILL_REG) { - const uint32_t index = tracker.getIndex(0xff); + const uint32_t index = tracker.getMemoryIndex(); tracker.addDependency(index, node, WRITE_AFTER_READ); } @@ -566,10 +563,8 @@ namespace gbe if (insn.opcode == SEL_OP_BARRIER || insn.opcode == SEL_OP_FENCE || insn.opcode == SEL_OP_WAIT) { - const uint32_t local = tracker.getIndex(0xfe); - const uint32_t global = tracker.getIndex(0x00); - tracker.addDependency(local, node, WRITE_AFTER_READ); - tracker.addDependency(global, node, WRITE_AFTER_READ); + const uint32_t memIndex = tracker.getMemoryIndex(); + tracker.addDependency(memIndex, node, WRITE_AFTER_READ); } // Track all writes done by the instruction |