]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose: delete literal_info requires_explode flag
authorJustin Viiret <justin.viiret@intel.com>
Wed, 14 Dec 2016 06:13:49 +0000 (17:13 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 04:43:28 +0000 (14:43 +1000)
src/rose/rose_build_bytecode.cpp
src/rose/rose_build_compile.cpp
src/rose/rose_build_impl.h
src/rose/rose_build_matchers.cpp

index c87946f2fed303510953913a4afa6dba61b17624..b4270278f2e880d01aadc151a4fbc788e00eb6fa 100644 (file)
@@ -4660,14 +4660,8 @@ map<u32, u32> groupByFragment(const RoseBuildImpl &build) {
             continue;
         }
 
-        // Combining exploded fragments with others is unsafe.
-        const auto &info = build.literal_info[lit_id];
-        if (info.requires_explode) {
-            final_to_frag.emplace(final_id, frag_id++);
-            continue;
-        }
-
         // Combining fragments that squash their groups is unsafe.
+        const auto &info = build.literal_info[lit_id];
         if (info.squash_group) {
             final_to_frag.emplace(final_id, frag_id++);
             continue;
index a46b3a16b0ea4289f6c017b4c49d4e1facbfcf39..24df842758a7c8d4e5ebd6a79d308ffee3652025 100644 (file)
@@ -568,8 +568,6 @@ void promoteEodToFloating(RoseBuildImpl &tbi, const vector<u32> &eodLiterals) {
             tbi.g[v].literals.insert(floating_id);
         }
 
-        tbi.literal_info[floating_id].requires_explode
-            = tbi.literal_info[eod_id].requires_explode;
         tbi.literal_info[floating_id].requires_benefits
             = tbi.literal_info[eod_id].requires_benefits;
     }
index 7421dbfa1afc2a975c0d31ca3790b8e396cff1de..d5f37b5a148eb65452ce6bd128f9cec7d83c1def 100644 (file)
@@ -265,7 +265,6 @@ struct rose_literal_info {
     u32 undelayed_id = MO_INVALID_IDX;
     u32 final_id = MO_INVALID_IDX; /* id reported by fdr */
     bool squash_group = false;
-    bool requires_explode = false;
     bool requires_benefits = false;
 };
 
index dfbde375b05cea150930b6778b97efeb536c0b57..e16a0ac7ad696458fad2c3dc528461a9291c3028 100644 (file)
@@ -408,7 +408,6 @@ void findMoreLiteralMasks(RoseBuildImpl &build) {
         lit_info.vertices.clear();
 
         // Preserve other properties.
-        new_info.requires_explode = lit_info.requires_explode;
         new_info.requires_benefits = lit_info.requires_benefits;
     }
 }
@@ -716,66 +715,35 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
         DEBUG_PRINTF("lit requires %zu bytes of history\n", lit_hist_len);
         assert(lit_hist_len <= build.cc.grey.maxHistoryAvailable);
 
-        if (info.requires_explode) {
-            DEBUG_PRINTF("exploding lit\n");
-
-            // We do not require_explode for literals that need confirm
-            // (long/medium length literals).
-            assert(lit.length() <= ROSE_SHORT_LITERAL_LEN_MAX);
-
-            case_iter cit = caseIterateBegin(lit);
-            case_iter cite = caseIterateEnd();
-            for (; cit != cite; ++cit) {
-                string s = *cit;
-                bool nocase = false;
-
-                DEBUG_PRINTF("id=%u, s='%s', nocase=%d, noruns=%d msk=%s, "
-                             "cmp=%s (exploded)\n",
-                             final_id, escapeString(s).c_str(), nocase, noruns,
-                             dumpMask(msk).c_str(), dumpMask(cmp).c_str());
-
-                if (!maskIsConsistent(s, nocase, msk, cmp)) {
-                    DEBUG_PRINTF("msk/cmp for literal can't match, skipping\n");
-                    continue;
-                }
-
-                mp.accel_lits.emplace_back(s, nocase, msk, cmp, groups);
-                mp.history_required = max(mp.history_required, lit_hist_len);
-                mp.lits.emplace_back(move(s), nocase, noruns, final_id, groups,
-                                     msk, cmp);
-            }
-        } else {
-            auto lit_final = lit; // copy
-
-            if (lit_final.length() > ROSE_SHORT_LITERAL_LEN_MAX) {
-                DEBUG_PRINTF("truncating to tail of length %zu\n",
-                             size_t{ROSE_SHORT_LITERAL_LEN_MAX});
-                lit_final.erase(0, lit_final.length() -
-                                       ROSE_SHORT_LITERAL_LEN_MAX);
-                // We shouldn't have set a threshold below 8 chars.
-                assert(msk.size() <= ROSE_SHORT_LITERAL_LEN_MAX);
-                assert(!noruns);
-            }
+        auto lit_final = lit; // copy
 
-            const auto &s = lit_final.get_string();
-            bool nocase = lit_final.any_nocase();
+        if (lit_final.length() > ROSE_SHORT_LITERAL_LEN_MAX) {
+            DEBUG_PRINTF("truncating to tail of length %zu\n",
+                         size_t{ROSE_SHORT_LITERAL_LEN_MAX});
+            lit_final.erase(0, lit_final.length() - ROSE_SHORT_LITERAL_LEN_MAX);
+            // We shouldn't have set a threshold below 8 chars.
+            assert(msk.size() <= ROSE_SHORT_LITERAL_LEN_MAX);
+            assert(!noruns);
+        }
 
-            DEBUG_PRINTF("id=%u, s='%s', nocase=%d, noruns=%d, msk=%s, "
-                         "cmp=%s\n",
-                         final_id, escapeString(s).c_str(), (int)nocase, noruns,
-                         dumpMask(msk).c_str(), dumpMask(cmp).c_str());
+        const auto &s = lit_final.get_string();
+        bool nocase = lit_final.any_nocase();
 
-            if (!maskIsConsistent(s, nocase, msk, cmp)) {
-                DEBUG_PRINTF("msk/cmp for literal can't match, skipping\n");
-                continue;
-            }
+        DEBUG_PRINTF("id=%u, s='%s', nocase=%d, noruns=%d, msk=%s, "
+                     "cmp=%s\n",
+                     final_id, escapeString(s).c_str(), (int)nocase, noruns,
+                     dumpMask(msk).c_str(), dumpMask(cmp).c_str());
 
-            mp.accel_lits.emplace_back(lit.get_string(), lit.any_nocase(), msk,
-                                       cmp, groups);
-            mp.history_required = max(mp.history_required, lit_hist_len);
-            mp.lits.emplace_back(move(s), nocase, noruns, final_id, groups, msk,
-                                 cmp);
+        if (!maskIsConsistent(s, nocase, msk, cmp)) {
+            DEBUG_PRINTF("msk/cmp for literal can't match, skipping\n");
+            continue;
         }
+
+        mp.accel_lits.emplace_back(lit.get_string(), lit.any_nocase(), msk, cmp,
+                                   groups);
+        mp.history_required = max(mp.history_required, lit_hist_len);
+        mp.lits.emplace_back(move(s), nocase, noruns, final_id, groups, msk,
+                             cmp);
     }
 
     auto frag_group_map = makeFragGroupMap(build, final_to_frag_map);