diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index c11294d2deccbda369d588904194662c5674647c..326af1944a193a76ee46b7587ac3a0e3d2cb4a0d 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index fb67f14ffef69d2e3ee39ce90af13151d911247a..6053feffc4e206eeed1e030ee6cbfa5a70c54d4d 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/deplibs/libmempool.a b/src/deplibs/libmempool.a index 7ae6e5c664d9cae22fed43a2e5b9a2f4b92309a7..291c74cec65d7b4142b20b454275b13ab2b4b571 100644 Binary files a/src/deplibs/libmempool.a and b/src/deplibs/libmempool.a differ diff --git a/src/deplibs/libmplphase.a b/src/deplibs/libmplphase.a index 155adbb875fca2dc4a8b608c315285aa28f8875e..6601d5dc731a9ec62f170265fafd258820a9ef8d 100644 Binary files a/src/deplibs/libmplphase.a and b/src/deplibs/libmplphase.a differ diff --git a/src/deplibs/libmplutil.a b/src/deplibs/libmplutil.a index 96fcc76e96ceec4aa2b0c811e16a26bf3e4f5b7b..6cc43036f8e924c6781f9c33bcd11f37d0ebc732 100644 Binary files a/src/deplibs/libmplutil.a and b/src/deplibs/libmplutil.a differ diff --git a/src/maple_be/src/be/lower.cpp b/src/maple_be/src/be/lower.cpp index e9b20fe29a5df979f1325d9514b5ff0a09677415..29565b71999e69db0e29777abab5b7bb44bbdc18 100644 --- a/src/maple_be/src/be/lower.cpp +++ b/src/maple_be/src/be/lower.cpp @@ -503,6 +503,7 @@ BlockNode *CGLowerer::LowerReturnStruct(NaryStmtNode &retNode) { } blk->AddStatement(iassign); retNode.GetNopnd().clear(); + retNode.SetNumOpnds(0); blk->AddStatement(&retNode); return blk; } @@ -1147,11 +1148,13 @@ StmtNode *CGLowerer::LowerCall(CallNode &callNode, StmtNode *&nextStmt, BlockNod AddrofNode *addrofNode = mirModule.CurFuncCodeMemPool()->New(OP_addrof); addrofNode->SetPrimType(LOWERED_PTR_TYPE); addrofNode->SetStIdx(dsgnSt->GetStIdx()); + addrofNode->SetFieldID(0); newNopnd.push_back(addrofNode); for (auto *opnd : callNode.GetNopnd()) { newNopnd.push_back(opnd); } callNode.SetNOpnd(newNopnd); + callNode.SetNumOpnds(static_cast(newNopnd.size())); CHECK_FATAL(nextStmt != nullptr, "nullptr is not expected"); nextStmt = nextStmt->GetNext(); return &callNode; @@ -1171,15 +1174,14 @@ void CGLowerer::LowerEntry(MIRFunction &func) { retSt->SetTyIdx(pointType->GetTypeIndex()); MapleVector formals(mirModule.GetMPAllocator().Adapter()); formals.push_back(retSt); - MapleVector &argsTy = func.GetMIRFuncType()->GetParamTypeList(); - argsTy.clear(); - argsTy.push_back(retSt->GetType()->GetTypeIndex()); for (uint32 i = 0; i < func.GetFormalCount(); ++i) { auto formal = func.GetFormal(i); formals.push_back(formal); - argsTy.push_back(formal->GetType()->GetTypeIndex()); } - func.SetFormals(formals); + func.ClearFormals(); + for (MapleVector::iterator it = formals.begin(); it != formals.end(); ++it) { + func.AddArgument(*it); + } func.SetReturnTyIdx(GlobalTables::GetTypeTable().GetTypeTable().at(static_cast(PTY_void))->GetTypeIndex()); } } diff --git a/src/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp b/src/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp index 660055c692597df9011ebb80624fdbac054d8e5d..b9e7454ae426d2f913ef572bd7c87769df5a7773 100644 --- a/src/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp +++ b/src/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp @@ -1345,7 +1345,7 @@ void AArch64CGFunc::SelectAddrof(Operand &result, StImmOperand &stImm) { } } else { auto it = immOpndsRequiringOffsetAdjustment.find(symLoc); - if (it != immOpndsRequiringOffsetAdjustment.end()) { + if ((it != immOpndsRequiringOffsetAdjustment.end()) && (symbol->GetType()->GetPrimType() != PTY_agg)) { offset = (*it).second; } else { offset = &CreateImmOperand(GetBaseOffset(*symLoc) + stImm.GetOffset(), k64BitSize, false); diff --git a/src/maple_be/src/cg/aarch64/aarch64_emitter.cpp b/src/maple_be/src/cg/aarch64/aarch64_emitter.cpp index a3615b6f85adac112a1da4c03dbf459ca4055ad2..d2dfa2da01537d2541d8d34b8b90f11dc1307ae6 100644 --- a/src/maple_be/src/cg/aarch64/aarch64_emitter.cpp +++ b/src/maple_be/src/cg/aarch64/aarch64_emitter.cpp @@ -87,14 +87,14 @@ void AArch64Emitter::EmitFastLSDA() { * .word .Label.LTest_3B_7C_3Cinit_3E_7C_28_29V3-func_start_label */ emitter->Emit("\t.word 0xFFFFFFFF\n"); - emitter->Emit("\t.word .Label." + funcName); + emitter->Emit("\t.word .Label." + funcName + "."); if (aarchCGFunc->NeedCleanup()) { emitter->Emit(cgFunc->GetCleanupLabel()->GetLabelIdx()); } else { ASSERT(!cgFunc->GetExitBBsVec().empty(), "exitbbsvec is empty in AArch64Emitter::EmitFastLSDA"); emitter->Emit(cgFunc->GetExitBB(0)->GetLabIdx()); } - emitter->Emit("-.Label." + funcName) + emitter->Emit("-.Label." + funcName + ".") .Emit(cgFunc->GetStartLabel()->GetLabelIdx()) .Emit("\n"); emitter->IncreaseJavaInsnCount(); @@ -159,11 +159,8 @@ void AArch64Emitter::EmitFullLSDA() { emitter->EmitLabelPair(funcName, cleaupCode); } else if (cgFunc->GetFunction().IsJava()) { ASSERT(!cgFunc->GetExitBBsVec().empty(), "exitbbsvec is empty in AArch64Emitter::EmitFullLSDA"); - emitter->Emit(".Label." + funcName) - .Emit(cgFunc->GetExitBB(0)->GetLabIdx()) - .Emit(" - .Label." + funcName) - .Emit(cgFunc->GetStartLabel()->GetLabelIdx()) - .Emit("\n"); + emitter->Emit(".Label." + funcName).Emit(".").Emit(cgFunc->GetExitBB(0)->GetLabIdx()); + emitter->Emit(" - .Label." + funcName).Emit(".").Emit(cgFunc->GetStartLabel()->GetLabelIdx()).Emit("\n"); } else { emitter->Emit("0\n"); } @@ -199,11 +196,8 @@ void AArch64Emitter::EmitFullLSDA() { emitter->EmitLabelPair(funcName, cleaupCode); } else { ASSERT(!cgFunc->GetExitBBsVec().empty(), "exitbbsvec is empty in AArch64Emitter::EmitFullLSDA"); - emitter->Emit(".Label." + funcName) - .Emit(cgFunc->GetExitBB(0)->GetLabIdx()) - .Emit(" - .Label." + funcName) - .Emit(cgFunc->GetStartLabel()->GetLabelIdx()) - .Emit("\n"); + emitter->Emit(".Label." + funcName).Emit(".").Emit(cgFunc->GetExitBB(0)->GetLabIdx()); + emitter->Emit(" - .Label." + funcName).Emit(".").Emit(cgFunc->GetStartLabel()->GetLabelIdx()).Emit("\n"); } emitter->Emit("\t.uleb128 0\n"); if (!cgFunc->GetFunction().IsJava()) { @@ -262,9 +256,10 @@ void AArch64Emitter::EmitBBHeaderLabel(const std::string &name, LabelIdx labIdx) currCG->IncreaseLabelOrderCnt(); } if (currCG->GenerateVerboseAsm()) { - emitter.Emit(".Label." + name).Emit(labIdx).Emit(":\t//label order ").Emit(label.GetLabelOrder()).Emit("\n"); + emitter.Emit(".Label.").Emit(name).Emit(".").Emit(labIdx).Emit(":\t//label order ").Emit(label.GetLabelOrder()); + emitter.Emit("\n"); } else { - emitter.Emit(".Label." + name).Emit(labIdx).Emit(":\n"); + emitter.Emit(".Label.").Emit(name).Emit(".").Emit(labIdx).Emit(":\n"); } } @@ -356,11 +351,8 @@ void AArch64Emitter::Run() { MIRSymbol *funcSymbol = GlobalTables::GetGsymTable().GetSymbolFromStidx(cgFunc->GetFunction().GetStIdx().Idx()); const std::string &funcName = funcSymbol->GetName(); /* .word .Label.lsda_label-func_start_label */ - emitter.Emit("\t.word .Label." + funcName) - .Emit(lsdaHeader->GetLSDALabel()->GetLabelIdx()) - .Emit("-.Label." + funcName) - .Emit(cgFunc->GetStartLabel()->GetLabelIdx()) - .Emit("\n"); + emitter.Emit("\t.word .Label." + funcName).Emit(".").Emit(lsdaHeader->GetLSDALabel()->GetLabelIdx()); + emitter.Emit("-.Label." + funcName).Emit(".").Emit(cgFunc->GetStartLabel()->GetLabelIdx()).Emit("\n"); emitter.IncreaseJavaInsnCount(); } else if (ehFunc->NeedFastLSDA()) { EmitFastLSDA(); @@ -429,7 +421,7 @@ void AArch64Emitter::Run() { for (size_t i = 0; i < arrayConst->GetConstVec().size(); i++) { MIRLblConst *lblConst = safe_cast(arrayConst->GetConstVecItem(i)); CHECK_FATAL(lblConst != nullptr, "null ptr check"); - emitter.Emit("\t.quad\t.Label." + funcSt->GetName()).Emit(lblConst->GetValue()); + emitter.Emit("\t.quad\t.Label." + funcSt->GetName()).Emit(".").Emit(lblConst->GetValue()); emitter.Emit(" - " + st->GetName() + "\n"); emitter.IncreaseJavaInsnCount(kQuadInsnCount); } diff --git a/src/maple_be/src/cg/aarch64/aarch64_immediate.cpp b/src/maple_be/src/cg/aarch64/aarch64_immediate.cpp index a4ae2e75e151f6cb81f47beaf69dadee799f3485..5c1f61c0ea28c8e9e9cad6d963af9437ec04245a 100644 --- a/src/maple_be/src/cg/aarch64/aarch64_immediate.cpp +++ b/src/maple_be/src/cg/aarch64/aarch64_immediate.cpp @@ -37,6 +37,9 @@ constexpr std::array bitmaskImmMultTable = { bool IsBitmaskImmediate(uint64 val, uint32 bitLen) { ASSERT(val != 0, "IsBitmaskImmediate() don's accept 0 or -1"); ASSERT(static_cast(val) != -1, "IsBitmaskImmediate() don's accept 0 or -1"); + if ((bitLen == k32BitSize) && (static_cast(val) == -1)) { + return false; + } if ((val & 0x1) != 0) { /* * we want to work with diff --git a/src/maple_be/src/cg/cg_option.cpp b/src/maple_be/src/cg/cg_option.cpp index 099306f688aea895012c722be0a4bbcbbd1fd852..5fb714153663e171d1bd486e493989d9a187d83a 100644 --- a/src/maple_be/src/cg/cg_option.cpp +++ b/src/maple_be/src/cg/cg_option.cpp @@ -114,7 +114,6 @@ enum OptionIndex : uint64 { kCGLazyBinding, kCGHotFix, kLongCalls, - kGcOnly, }; const Descriptor kUsage[] = { @@ -122,7 +121,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "pie", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --pie \tGenerate position-independent executable\n", "mplcg", @@ -131,7 +130,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "fpic", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --fpic \tGenerate position-independent shared library\n", "mplcg", @@ -140,7 +139,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "verbose-asm", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --verbose-asm \tAdd comments to asm output\n", "mplcg", @@ -149,7 +148,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "maplelinker", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --maplelinker \tGenerate the MapleLinker .s format\n", "mplcg", @@ -186,7 +185,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "lazy-binding", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --lazy-binding \tBind class symbols lazily[default off]\n", "mplcg", @@ -204,7 +203,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "nativeopt", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --nativeopt \tEnable native opt\n", "mplcg", @@ -258,7 +257,7 @@ const Descriptor kUsage[] = { 0, nullptr, "add-debug-trace", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyNone, " --add-debug-trace \tInstrument the output .s file to print call traces at runtime\n", "mplcg", @@ -278,7 +277,7 @@ const Descriptor kUsage[] = { kEnable, nullptr, "gen-c-macro-def", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --gen-c-macro-def \tGenerate a .def file that contains extra type metadata, including the\n" " \tclass instance sizes and field offsets (default)\n", @@ -316,7 +315,7 @@ const Descriptor kUsage[] = { 0, nullptr, "gdwarf", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyNone, " --gdwarf \tGenerate dwarf infomation\n", "mplcg", @@ -325,7 +324,7 @@ const Descriptor kUsage[] = { 0, nullptr, "gsrc", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyNone, " --gsrc \tUse original source file instead of mpl file for debugging\n", "mplcg", @@ -334,7 +333,7 @@ const Descriptor kUsage[] = { 0, nullptr, "gmixedsrc", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyNone, " --gmixedsrc \tUse both original source file and mpl file for debugging\n", "mplcg", @@ -398,7 +397,7 @@ const Descriptor kUsage[] = { 0, nullptr, "O2", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyOptional, " -O2 \tDo some optimization.\n", "mplcg", @@ -527,6 +526,16 @@ const Descriptor kUsage[] = { " --no-print-func\n", "mplcg", {} }, + { kProfileData, + 0, + nullptr, + "profile_data", + kBuildTypeAll, + kArgCheckPolicyRequired, + " --profile_data \tuse profile info to sort funcbody and class static field\n" + " \t--profile_data=FUNCINFOFILE[:]CLASSINFOFILE\n", + "mplcg", + {} }, { kCyclePatternList, 0, nullptr, @@ -541,7 +550,7 @@ const Descriptor kUsage[] = { 0, nullptr, "duplicate_asm_list", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyRequired, " --duplicate_asm_list \tDuplicate asm functions to delete plt call\n" " \t--duplicate_asm_list=list_file\n", @@ -574,11 +583,11 @@ const Descriptor kUsage[] = { " --long-calls \tgenerate long call\n", "mplcg", {} }, - { kGcOnly, + { kGCOnly, kEnable, nullptr, "gconly", - kBuildTypeAll, + kBuildTypeProduct, kArgCheckPolicyBool, " --gconly \tEnable GCONLY, generate code without RC\n", "mplcg", @@ -835,7 +844,7 @@ bool CGOptions::SolveOptions(const std::vector