From ad842dc70502bfbfab1ab39a89a8022d5ea38094 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 23 Mar 2021 08:11:19 -0700 Subject: [PATCH 1/3] Support INTRN_C_constant_p --- src/mapleall/maple_be/src/be/lower.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/mapleall/maple_be/src/be/lower.cpp b/src/mapleall/maple_be/src/be/lower.cpp index 38b8f96344..ce781b55a4 100644 --- a/src/mapleall/maple_be/src/be/lower.cpp +++ b/src/mapleall/maple_be/src/be/lower.cpp @@ -2568,6 +2568,11 @@ BaseNode *CGLowerer::LowerIntrinsicop(const BaseNode &parent, IntrinsicopNode &i if (intrinNode.GetIntrinsic() == INTRN_MPL_READ_ARRAYCLASS_CACHE_ENTRY) { return &intrinNode; } + if (intrnID == INTRN_C_constant_p) { + BaseNode *opnd = intrinNode.Opnd(0); + return mirModule.GetMIRBuilder()->CreateIntConst(opnd->op == OP_constval || opnd->op == OP_sizeoftype || + opnd->op == OP_conststr || opnd->op == OP_conststr16, PTY_i32); + } CHECK_FATAL(false, "unexpected intrinsic type in CGLowerer::LowerIntrinsicop"); return &intrinNode; } -- Gitee From f33190d546f648d01b367090b9677fbdd41c8b04 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 23 Mar 2021 08:11:37 -0700 Subject: [PATCH 2/3] no emit of static func without globl declaration --- src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp b/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp index c48057a64f..865856889e 100644 --- a/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp +++ b/src/mapleall/maple_be/src/cg/aarch64/aarch64_emitter.cpp @@ -364,6 +364,8 @@ void AArch64AsmEmitter::Run(FuncEmitInfo &funcEmitInfo) { (void)emitter.Emit("\t.hidden\t" + funcStName + "\n"); } else if (funcSt->GetFunction()->GetAttr(FUNCATTR_local)) { (void)emitter.Emit("\t.local\t" + funcStName + "\n"); + } else if (funcSt->GetFunction() && (funcSt->GetFunction()->IsJava() == false) && funcSt->GetFunction()->IsStatic()) { + // nothing } else { bool isExternFunction = false; (void)emitter.Emit("\t.globl\t").Emit(funcSt->GetName()).Emit("\n"); -- Gitee From 43a6ecf63e333e6287aba527a8e7ca2a0253c7d7 Mon Sep 17 00:00:00 2001 From: William Chen Date: Tue, 23 Mar 2021 08:11:56 -0700 Subject: [PATCH 3/3] GetFieldOffset handle field of union being union, struct, array of union/struct --- src/mapleall/maple_be/src/be/becommon.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/mapleall/maple_be/src/be/becommon.cpp b/src/mapleall/maple_be/src/be/becommon.cpp index 755114bf21..ee8c32a021 100644 --- a/src/mapleall/maple_be/src/be/becommon.cpp +++ b/src/mapleall/maple_be/src/be/becommon.cpp @@ -584,14 +584,17 @@ std::pair BECommon::GetFieldOffset(MIRStructType &structType, Fiel } else { /* for unions, bitfields are treated as non-bitfields */ if (curFieldID == fieldID) { return std::pair(0, 0); - } else if (fieldType->GetKind() == kTypeStruct) { - /* union cannot be kTypeClass */ - if ((curFieldID + GetStructFieldCount(fieldTyIdx)) >= fieldID) { - return GetFieldOffset(static_cast(*fieldType), fieldID - curFieldID); - } - curFieldID += GetStructFieldCount(fieldTyIdx) + 1; } else { - ++curFieldID; + MIRStructType *subStructTy = fieldType->EmbeddedStructType(); + if (subStructTy == nullptr) { + curFieldID++; + } else { + if ((curFieldID + GetStructFieldCount(subStructTy->GetTypeIndex())) < fieldID) { + curFieldID += GetStructFieldCount(subStructTy->GetTypeIndex()) + 1; + } else { + return GetFieldOffset(*subStructTy, fieldID - curFieldID); + } + } } } } -- Gitee