diff --git a/src/mapleall/maple_be/src/be/lower.cpp b/src/mapleall/maple_be/src/be/lower.cpp index f0b30ee7d0f640559860b695d40c613ffa44fd70..d457a8bc167ca7470f347bef4fe103de475c3407 100644 --- a/src/mapleall/maple_be/src/be/lower.cpp +++ b/src/mapleall/maple_be/src/be/lower.cpp @@ -1304,9 +1304,16 @@ bool CGLowerer::LowerStructReturn(BlockNode &newBlk, StmtNode *stmt, StmtNode *n regassign u64 %1 (regread u64 %%retval0) regassign ptr %2 (addrof ptr $s) iassign <* u64> 0 (regread ptr %2, regread u64 %1) */ + if (CGOptions::GetInstance().GetOptimizeLevel() == CGOptions::kLevel0) { + return false; + } MIRSymbol *symbol = mirModule.CurFunction()->GetLocalOrGlobalSymbol(dnode_stmt->GetStIdx()); MIRStructType *structType = static_cast(symbol->GetType()); int32 size = structType->GetSize(); + for (size_t i = 0; i < callnode->GetNopndSize(); ++i) { + BaseNode *newOpnd = LowerExpr(*callnode, *callnode->GetNopndAt(i), newBlk); + callnode->SetOpnd(newOpnd, i); + } CallNode *callStmt = mirModule.GetMIRBuilder()->CreateStmtCall( callnode->GetPUIdx(), callnode->GetNopnd()); newBlk.AddStatement(callStmt);