]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose: eliminate global final to fragment map
authorJustin Viiret <justin.viiret@intel.com>
Tue, 21 Feb 2017 23:28:40 +0000 (10:28 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:04:31 +0000 (15:04 +1000)
src/rose/rose_build_bytecode.cpp
src/rose/rose_build_impl.h

index 36f7707d0b88272eb8be7e1995707aa5ae5e9172..c17c8b86710969aade5e05bd6ab1c32b4c02d8d1 100644 (file)
@@ -4675,8 +4675,8 @@ void groupByFragment(RoseBuildImpl &build, const build_context &bc) {
     };
 
     map<rose_literal_id, FragmentInfo> frag_info;
+    map<u32, u32> final_to_frag;
 
-    auto &final_to_frag = build.final_to_frag_map;
     auto &fragments = build.fragments;
 
     for (const auto &m : bc.final_id_to_literal) {
@@ -4747,8 +4747,11 @@ static
 void buildLiteralPrograms(RoseBuildImpl &build, build_context &bc) {
     // Build a reverse mapping from fragment -> final_id.
     map<u32, flat_set<u32>> frag_to_final_map;
-    for (const auto &m : build.final_to_frag_map) {
-        frag_to_final_map[m.second].insert(m.first);
+    for (const auto &info : build.literal_info) {
+        if (info.fragment_id == MO_INVALID_IDX) {
+            continue;
+        }
+        frag_to_final_map[info.fragment_id].insert(info.final_id);
     }
 
     DEBUG_PRINTF("%zu fragments\n", build.fragments.size());
index b7bf4f19604eae393edb2e1f0b57bb4aac1051d7..860404b469e84d957d1caa412e8c0eda5ba538c6 100644 (file)
@@ -590,7 +590,6 @@ public:
      * overlap calculation in history assignment. */
     std::map<u32, rose_literal_id> anchoredLitSuffix;
 
-    std::map<u32, u32> final_to_frag_map;
     std::vector<LitFragment> fragments;
 
     unordered_set<left_id> transient;