GBE: Fix a potential issue if increase srcNum.
authorRuiling Song <ruiling.song@intel.com>
Fri, 7 Mar 2014 05:48:47 +0000 (13:48 +0800)
committerZhigang Gong <zhigang.gong@intel.com>
Mon, 10 Mar 2014 06:53:03 +0000 (14:53 +0800)
If increase MAX_SRC_NUM for ir::Instruction, unpredicted behaviour may happen.

Signed-off-by: Ruiling Song <ruiling.song@intel.com>
Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
backend/src/backend/gen_insn_selection.cpp

index d5d86de..46f0123 100644 (file)
@@ -229,6 +229,7 @@ namespace gbe
   public:
     INLINE SelectionDAG(const ir::Instruction &insn) :
       insn(insn), mergeable(0), childNum(insn.getSrcNum()), isRoot(0) {
+      GBE_ASSERT(insn.getSrcNum() < 127);
       for (uint32_t childID = 0; childID < childNum; ++childID)
         this->child[childID] = NULL;
     }
@@ -243,7 +244,7 @@ namespace gbe
     /*! When sources have been overwritten, a child insn cannot be merged */
     uint32_t mergeable:ir::Instruction::MAX_SRC_NUM;
     /*! Number of children we have in the pattern */
-    uint32_t childNum:4;
+    uint32_t childNum:7;
     /*! A root must be generated, no matter what */
     uint32_t isRoot:1;
   };