diff --git a/src/mapleall/maple_be/include/cg/cg_option.h b/src/mapleall/maple_be/include/cg/cg_option.h index 551f2f3bbaf334541e01de4bb29b5a59412c6877..cfe1163b18d1ebb1bc9106ca78a0e6d199afd28e 100644 --- a/src/mapleall/maple_be/include/cg/cg_option.h +++ b/src/mapleall/maple_be/include/cg/cg_option.h @@ -119,7 +119,7 @@ class CGOptions : public MapleDriverOptionBase { * Generate yieldpoints for GC. * Do not generate separate GCTIB file. */ - static const GenerateFlag kDefaultGflags = GenerateFlag(kGrootList | kPrimorList); + static const GenerateFlag kDefaultGflags = GenerateFlag(0); public: static CGOptions &GetInstance(); diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp index c2d81537b43f9e180316dfe0e4fd398d472bc68f..d41f22a76ac0a2db19e584335dcfbfa335539828 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_cgfunc.cpp @@ -3664,9 +3664,13 @@ Operand *AArch64CGFunc::SelectMalloc(UnaryNode &node, Operand &opnd0) { opndVec.emplace_back(&opnd0); /* Use calloc to make sure allocated memory is zero-initialized */ const std::string &funcName = "calloc"; - Operand &opnd1 = CreateImmOperand(1, PTY_u32, false); + PrimType srcPty = PTY_u64; + if (opnd0.GetSize() <= k32BitSize) { + srcPty = PTY_u32; + } + Operand &opnd1 = CreateImmOperand(1, srcPty, false); opndVec.emplace_back(&opnd1); - SelectLibCall(funcName, opndVec, PTY_u32, retType); + SelectLibCall(funcName, opndVec, srcPty, retType); return &resOpnd; } diff --git a/src/mapleall/maple_be/src/cg/cg_option.cpp b/src/mapleall/maple_be/src/cg/cg_option.cpp index 8f0d8ba721a825ad2b2269917b703db40836cdce..70c8e346849afe67f48449e10c00936a1b7f0c5c 100644 --- a/src/mapleall/maple_be/src/cg/cg_option.cpp +++ b/src/mapleall/maple_be/src/cg/cg_option.cpp @@ -1095,7 +1095,7 @@ void CGOptions::ParseCyclePattern(const std::string &fileName) { /* Set default options according to different languages. */ void CGOptions::SetDefaultOptions(const maple::MIRModule &mod) { if (mod.IsJavaModule()) { - generateFlag = generateFlag | kGenYieldPoint | kGenLocalRc; + generateFlag = generateFlag | kGenYieldPoint | kGenLocalRc | kGrootList | kPrimorList; } insertYieldPoint = GenYieldPoint(); } diff --git a/src/mapleall/maple_be/src/cg/cgfunc.cpp b/src/mapleall/maple_be/src/cg/cgfunc.cpp index 5600f7453655a3eb445095d4aeed7af40862fba3..fe238da768136f30d45044e6699ad79b2b54c435 100644 --- a/src/mapleall/maple_be/src/cg/cgfunc.cpp +++ b/src/mapleall/maple_be/src/cg/cgfunc.cpp @@ -538,7 +538,11 @@ void HandleDassign(StmtNode &stmt, CGFunc &cgFunc) { ASSERT(dassignNode.GetOpCode() == OP_dassign, "expect dassign"); BaseNode *rhs = dassignNode.GetRHS(); ASSERT(rhs != nullptr, "get rhs of dassignNode failed"); - if (rhs->GetPrimType() == PTY_agg) { + if (rhs->GetOpCode() == OP_malloc || rhs->GetOpCode() == OP_alloca) { + UnaryStmtNode &uNode = static_cast(stmt); + Operand *opnd0 = cgFunc.HandleExpr(dassignNode, *(uNode.Opnd())); + cgFunc.SelectDassign(dassignNode, *opnd0); + } else if (rhs->GetPrimType() == PTY_agg) { cgFunc.SelectAggDassign(dassignNode); return; }