]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose: don't build empty sparse iter subprograms
authorJustin Viiret <justin.viiret@intel.com>
Mon, 20 Jun 2016 06:38:03 +0000 (16:38 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Fri, 8 Jul 2016 00:59:40 +0000 (10:59 +1000)
src/rose/rose_build_bytecode.cpp

index 6d485b0c87ea16bc8afb639eda9526cf7b464014..cab0d60a3c220ac45744855e940a3d5f5ff758c9 100644 (file)
@@ -3409,6 +3409,7 @@ void addPredBlocksSingle(
 
     for (const auto &m : predProgramLists) {
         const u32 &pred_state = m.first;
+        assert(!m.second.empty());
         auto subprog = flattenProgram(m.second);
 
         // Check our pred state.
@@ -3465,6 +3466,7 @@ void addPredBlocksMulti(build_context &bc,
         DEBUG_PRINTF("subprogram %zu has offset %u\n", jump_table.size(),
                      curr_offset);
         jump_table.push_back(curr_offset);
+        assert(!e.second.empty());
         auto subprog = flattenProgram(e.second);
 
         if (e.first != keys.back()) {
@@ -3800,6 +3802,9 @@ vector<RoseInstruction> buildLiteralProgram(RoseBuildImpl &build,
         assert(contains(bc.roleStateIndices, u));
         u32 pred_state = bc.roleStateIndices.at(u);
         auto program = makeProgram(build, bc, e);
+        if (program.empty()) {
+            continue;
+        }
         predProgramLists[pred_state].push_back(program);
     }
 
@@ -4047,6 +4052,9 @@ void addEodAnchorProgram(RoseBuildImpl &build, build_context &bc,
             u32 predStateIdx = bc.roleStateIndices.at(u);
 
             auto program = makeEodAnchorProgram(build, bc, e, multiple_preds);
+            if (program.empty()) {
+                continue;
+            }
             predProgramLists[predStateIdx].push_back(program);
         }
     }