]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose: write fragment ids into literal_info
authorJustin Viiret <justin.viiret@intel.com>
Mon, 13 Feb 2017 04:54:16 +0000 (15:54 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:04:30 +0000 (15:04 +1000)
src/rose/rose_build_bytecode.cpp
src/rose/rose_build_impl.h

index 197ceb4add9501ad85306ed8480f8ed5c483f10c..a50ebb8ee045a356e6b0c873cb8799ec46814459 100644 (file)
@@ -5409,6 +5409,15 @@ aligned_unique_ptr<RoseEngine> RoseBuildImpl::buildFinalEngine(u32 minWidth) {
     allocateFinalLiteralId(*this, bc);
     final_to_frag_map = groupByFragment(*this, bc);
 
+    // Write the fragment IDs into the literal_info structures.
+    for (auto &info : literal_info) {
+        if (info.final_id == MO_INVALID_IDX) {
+            continue;
+        }
+        assert(contains(final_to_frag_map, info.final_id));
+        info.fragment_id = final_to_frag_map.at(info.final_id).fragment_id;
+    }
+
     auto anchored_dfas = buildAnchoredDfas(*this);
 
     bc.floatingMinLiteralMatchOffset =
index addd703cc588f13e93f1d67c33af2ed8822dd6c5..bf5885539c730e7b0a6a9ac5f76c4f1c6f3ed57d 100644 (file)
@@ -264,7 +264,8 @@ struct rose_literal_info {
     ue2::flat_set<RoseVertex> vertices;
     rose_group group_mask = 0;
     u32 undelayed_id = MO_INVALID_IDX;
-    u32 final_id = MO_INVALID_IDX; /* id reported by fdr */
+    u32 final_id = MO_INVALID_IDX; // TODO: remove
+    u32 fragment_id = MO_INVALID_IDX; //!< ID corresponding to literal prog.
     bool squash_group = false;
     bool requires_benefits = false;
 };