[Beignet] [PATCH] GBE: avoid vector registers when there is high register pressure.

Zhigang Gong zhigang.gong at intel.com
Sun Sep 6 02:21:29 PDT 2015


If the reservedSpillRegs is not zero, it indicates we are in a
very high register pressure. Use register vector will likely
increase that pressure and will cause significant performance
problem which is much worse than use a short-live temporary
vector register with several additional MOVs.

So let's simply avoid use vector registers and just use a
temporary short-live-interval vector.

Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
---
 backend/src/backend/gen_reg_allocation.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/backend/src/backend/gen_reg_allocation.cpp b/backend/src/backend/gen_reg_allocation.cpp
index 39f1934..36ad914 100644
--- a/backend/src/backend/gen_reg_allocation.cpp
+++ b/backend/src/backend/gen_reg_allocation.cpp
@@ -318,7 +318,7 @@ namespace gbe
       if (it == vectorMap.end() &&
           ctx.sel->isScalarReg(reg) == false &&
           ctx.isSpecialReg(reg) == false &&
-          (intervals[reg].maxID - intervals[reg].minID) < 2048)
+          ctx.reservedSpillRegs == 0 )
       {
         const VectorLocation location = std::make_pair(vector, regID);
         this->vectorMap.insert(std::make_pair(reg, location));
-- 
1.9.1



More information about the Beignet mailing list