From c6b2563df62492a6ac0a33b7d68943ec223e7bcc Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Wed, 14 Dec 2016 17:13:49 +1100 Subject: [PATCH] rose: delete literal_info requires_explode flag --- src/rose/rose_build_bytecode.cpp | 8 +-- src/rose/rose_build_compile.cpp | 2 - src/rose/rose_build_impl.h | 1 - src/rose/rose_build_matchers.cpp | 86 ++++++++++---------------------- 4 files changed, 28 insertions(+), 69 deletions(-) diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index c87946f2..b4270278 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -4660,14 +4660,8 @@ map 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; diff --git a/src/rose/rose_build_compile.cpp b/src/rose/rose_build_compile.cpp index a46b3a16..24df8427 100644 --- a/src/rose/rose_build_compile.cpp +++ b/src/rose/rose_build_compile.cpp @@ -568,8 +568,6 @@ void promoteEodToFloating(RoseBuildImpl &tbi, const vector &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; } diff --git a/src/rose/rose_build_impl.h b/src/rose/rose_build_impl.h index 7421dbfa..d5f37b5a 100644 --- a/src/rose/rose_build_impl.h +++ b/src/rose/rose_build_impl.h @@ -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; }; diff --git a/src/rose/rose_build_matchers.cpp b/src/rose/rose_build_matchers.cpp index dfbde375..e16a0ac7 100644 --- a/src/rose/rose_build_matchers.cpp +++ b/src/rose/rose_build_matchers.cpp @@ -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"); + auto lit_final = lit; // copy - // 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); - } - - const auto &s = lit_final.get_string(); - bool nocase = lit_final.any_nocase(); - - 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()); - - 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); + 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); } + + const auto &s = lit_final.get_string(); + bool nocase = lit_final.any_nocase(); + + 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()); + + 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);