diff --git a/src/mapleall/maple_me/src/irmap_build.cpp b/src/mapleall/maple_me/src/irmap_build.cpp index 3380e6e102f75d96e236c956d0576b30188b92d5..eb1efb63f89aa109c85c6ac6ff9549026bcad408 100644 --- a/src/mapleall/maple_me/src/irmap_build.cpp +++ b/src/mapleall/maple_me/src/irmap_build.cpp @@ -340,7 +340,8 @@ MeExpr *IRMapBuild::BuildExpr(BaseNode &mirNode, bool atParm, bool noProp) { opmeexpr.SetOpnd(0, retmeexpr); retmeexpr = irMap->HashMeExpr(opmeexpr); } else { - retmeexpr = irMap->CreateMeExprTypeCvt(addrOfNode.GetPrimType(), retmeexpr->GetPrimType(), *retmeexpr); + bool isSigned = IsSignedInteger(addrOfNode.GetPrimType()); + retmeexpr = irMap->CreateMeExprTypeCvt(addrOfNode.GetPrimType(), isSigned ? PTY_i32 : PTY_u32, *retmeexpr); } } return retmeexpr; diff --git a/src/mapleall/mpl2mpl/src/constantfold.cpp b/src/mapleall/mpl2mpl/src/constantfold.cpp index 585b570094b0c4f2af426f0af7e00273a2176092..e04775d1f0e2ee5422253c503fcb678c5b33ff53 100644 --- a/src/mapleall/mpl2mpl/src/constantfold.cpp +++ b/src/mapleall/mpl2mpl/src/constantfold.cpp @@ -1444,7 +1444,8 @@ std::pair ConstantFold::FoldTypeCvt(TypeCvtNode *node) { } } else if (node->GetOpCode() == OP_cvt && GetPrimTypeSize(node->FromType()) == GetPrimTypeSize(node->GetPrimType())) { if ((IsPossible64BitAddress(node->FromType()) && IsPossible64BitAddress(node->GetPrimType())) || - (IsPossible32BitAddress(node->FromType()) && IsPossible32BitAddress(node->GetPrimType()))) { + (IsPossible32BitAddress(node->FromType()) && IsPossible32BitAddress(node->GetPrimType())) || + (IsPrimitivePureScalar(node->FromType()) && IsPrimitivePureScalar(node->GetPrimType()) && GetPrimTypeSize(node->FromType()) == GetPrimTypeSize(node->GetPrimType()))) { return p; // the cvt is redundant } } else if (node->GetOpCode() == OP_cvt && p.second != 0 &&