diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index 9c12512cf7599ef2e2f09ad27d4714f0b829703e..65ce781285bc223cffc2aeb7d0baa494d8974a8a 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index f8985a17d30724083a2ea8440d000d15d3bf47c5..1af0a5fab1f910352713c650a7e1dd2a6befca63 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/bin/mplcg b/src/bin/mplcg index 8c2e95b17e01ae0e72dacc34349cc22f2df169e3..037f6eb3e1bfe63978ec8e0fe8fcbb8f32aaa50c 100755 Binary files a/src/bin/mplcg and b/src/bin/mplcg differ diff --git a/src/deplibs/libmempool.a b/src/deplibs/libmempool.a index 7e5e19554d39f95f8e02746e608052a4aa0fdc2d..13285b2155ba67f1dddf8898f84ea59f4ac864d6 100644 Binary files a/src/deplibs/libmempool.a and b/src/deplibs/libmempool.a differ diff --git a/src/maple_me/include/me_ir.h b/src/maple_me/include/me_ir.h index cd9eb370ecf4eda7acd5872c631ac74c20bb7960..9320af4f0c80ed172b0d49f99642befd2f2d987e 100644 --- a/src/maple_me/include/me_ir.h +++ b/src/maple_me/include/me_ir.h @@ -224,6 +224,7 @@ class VarMeExpr final : public MeExpr { BB *GetDefByBBMeStmt(const Dominance&, MeStmtPtr&); bool IsSameVariableValue(const VarMeExpr&) const override; VarMeExpr &ResolveVarMeValue(); + bool PointsToStringLiteral(); const OStIdx &GetOStIdx() const { return ostIdx; diff --git a/src/maple_me/src/irmap.cpp b/src/maple_me/src/irmap.cpp index 2a021eaeaf00493373df6cf866892fcd8a0dcfdb..75abf71e9ed0a0df73a424251796df140fc971da 100644 --- a/src/maple_me/src/irmap.cpp +++ b/src/maple_me/src/irmap.cpp @@ -742,6 +742,7 @@ bool IRMap::ReplaceMeExprStmt(MeStmt &meStmt, MeExpr &meExpr, MeExpr &repexpr) { curOpndReplaced = (newBase != oldBase); } if (curOpndReplaced) { + ASSERT_NOT_NULL(newBase); ivarStmt.SetLHSVal(BuildLHSIvar(*newBase, ivarStmt, ivarStmt.GetLHSVal()->GetFieldID())); } } else { diff --git a/src/maple_me/src/me_ir.cpp b/src/maple_me/src/me_ir.cpp index 9fba48afb021149bf4ddb2e4826321acbc4cec76..ea045affebe3ccda077a187210a3afead3b75d93 100644 --- a/src/maple_me/src/me_ir.cpp +++ b/src/maple_me/src/me_ir.cpp @@ -1287,6 +1287,21 @@ bool VarMeExpr::IsVolatile(const SSATab &ssatab) { return structType->IsFieldVolatile(fieldID); } +bool VarMeExpr::PointsToStringLiteral() { + VarMeExpr &var = ResolveVarMeValue(); + if (var.GetDefBy() == kDefByMustDef) { + MeStmt *baseStmt = var.GetDefMustDef().GetBase(); + if (baseStmt->GetOp() == OP_callassigned) { + auto *call = static_cast(baseStmt); + MIRFunction &callFunc = call->GetTargetFunction(); + if (callFunc.GetName() == "MCC_GetOrInsertLiteral") { + return true; + } + } + } + return false; +} + MeExpr *MeExpr::FindSymAppearance(OStIdx oidx) { if (meOp == kMeOpVar) { if (static_cast(this)->GetOStIdx() == oidx) { @@ -1332,15 +1347,8 @@ bool MeExpr::PointsToSomethingThatNeedsIncRef() { } if (meOp == kMeOpVar) { auto *var = static_cast(this); - if (var->GetDefBy() == kDefByMustDef) { - MeStmt *baseStmt = var->GetDefMustDef().GetBase(); - if (baseStmt->GetOp() == OP_callassigned) { - auto *call = static_cast(baseStmt); - MIRFunction &callFunc = call->GetTargetFunction(); - if (callFunc.GetName() == "MCC_GetOrInsertLiteral") { - return false; - } - } + if (var->PointsToStringLiteral()) { + return false; } return true; } diff --git a/src/maple_util/include/name_mangler.h b/src/maple_util/include/name_mangler.h index 63442dc4db8443f918131531162e902223c97afc..a988b4df4b9333b2dfedfa31a79d4a10cedf84c6 100644 --- a/src/maple_util/include/name_mangler.h +++ b/src/maple_util/include/name_mangler.h @@ -105,6 +105,8 @@ static constexpr const char kDecoupleOption[] = "__decouple_option"; static constexpr const char kDecoupleStr[] = "__decouple"; static constexpr const char kCompilerVersionNum[] = "__compilerVersionNum"; static constexpr const char kCompilerVersionNumStr[] = "__compilerVersionNumTab"; +static constexpr const char kCompilerMfileStatus[] = "__compiler_mfile_status"; + static constexpr const char kSourceMuid[] = "__sourceMuid"; static constexpr const char kSourceMuidSectionStr[] = "__sourceMuidTab"; diff --git a/src/mempool/include/maple_string.h b/src/mempool/include/maple_string.h index 7a1613b8001b67547f496819a5658cce08528bb8..bf95cb54c56bbd3bc3d2f66dbb5d4d6fcd24875c 100644 --- a/src/mempool/include/maple_string.h +++ b/src/mempool/include/maple_string.h @@ -240,7 +240,7 @@ class MapleString { char *data = nullptr; MemPool *memPool = nullptr; - size_t dataLength = 0; + unsigned int dataLength = 0; }; // global operators diff --git a/src/mpl2mpl/src/muid_replacement.cpp b/src/mpl2mpl/src/muid_replacement.cpp index d3b7ef1ed7cedc46358c0733d6be66b67e746671..5213487c60b02d6ccaab706b720d0883e6c56a76 100644 --- a/src/mpl2mpl/src/muid_replacement.cpp +++ b/src/mpl2mpl/src/muid_replacement.cpp @@ -1183,6 +1183,7 @@ void MUIDReplacement::GenerateGlobalRootList() { } } +// should use a new pass to generate these information void MUIDReplacement::GenerateCompilerVersionNum() { MIRType *ptrType = GlobalTables::GetTypeTable().GetVoidPtr(); MIRArrayType &arrayType = *GlobalTables::GetTypeTable().GetOrCreateArrayType(*ptrType, 0); @@ -1197,6 +1198,7 @@ void MUIDReplacement::GenerateCompilerVersionNum() { versionNum->SetKonst(newConst); } + void MUIDReplacement::GenerateTables() { GenerateGlobalRootList(); CollectFuncAndDataFromKlasses();