diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index 9fb22fb473140263c4f9b4cc91c736aac24776a2..2261301b01ca270c942335418b431966cb9eecc2 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index 1dadbf5d35df836a1c2861c5f4deabf682c458fa..9027ae5185fe82a3ae64a834c1d1ae3814af3b5e 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/bin/mplcg b/src/bin/mplcg index e2bf31303114e2907c4b34d24c6270f43e6bac54..cdc16d24668b2471992f42394b5837ed5841f34e 100755 Binary files a/src/bin/mplcg and b/src/bin/mplcg differ diff --git a/src/maple_ir/include/global_tables.h b/src/maple_ir/include/global_tables.h index deaae238f2c6572f26d2d621d667706fed96cd68..7c3025e873bdc266fff2d5119e19c8d6fca093c5 100644 --- a/src/maple_ir/include/global_tables.h +++ b/src/maple_ir/include/global_tables.h @@ -63,8 +63,8 @@ class TypeTable { TypeTable(const TypeTable&) = delete; TypeTable &operator=(const TypeTable&) = delete; ~TypeTable(); - MIRType *CreateMirType(uint32 ti) const; - void PutToHashTable(MIRType *mirtype); + MIRType *CreateMirType(uint32 primTypeIdx) const; + void PutToHashTable(MIRType *mirType); std::vector &GetTypeTable() { return typeTable; @@ -90,16 +90,16 @@ class TypeTable { typeTable.at(tyIdx.GetIdx()) = type; } - TyIdx GetOrCreateMIRType(MIRType *ptype); + TyIdx GetOrCreateMIRType(MIRType *pType); - uint32 GetTypeTableSize(void) const { + size_t GetTypeTableSize() const { return typeTable.size(); } // Get primtive types. - MIRType *GetPrimType(PrimType ptyp) const { - ASSERT(ptyp < typeTable.size(), "array index out of range"); - return typeTable.at(ptyp); + MIRType *GetPrimType(PrimType primType) const { + ASSERT(primType < typeTable.size(), "array index out of range"); + return typeTable.at(primType); } MIRType *GetFloat() const { @@ -248,8 +248,8 @@ class TypeTable { } // Get or Create derived types. - MIRType *GetOrCreatePointerType(TyIdx pointedTyIdx, PrimType pty = PTY_ptr); - MIRType *GetOrCreatePointerType(const MIRType &pointTo, PrimType pty = PTY_ptr); + MIRType *GetOrCreatePointerType(TyIdx pointedTyIdx, PrimType primType = PTY_ptr); + MIRType *GetOrCreatePointerType(const MIRType &pointTo, PrimType primType = PTY_ptr); MIRType *GetPointedTypeIfApplicable(MIRType &type) const; MIRType *GetVoidPtr() const { ASSERT(voidPtrType != nullptr, "voidPtrType should not be null"); @@ -286,13 +286,13 @@ class TypeTable { private: using MIRTypePtr = MIRType*; struct Hash { - uint32 operator()(const MIRTypePtr &ty) const { + size_t operator()(const MIRTypePtr &ty) const { return ty->GetHashIndex(); } }; struct Equal { - uint32 operator()(const MIRTypePtr &tx, const MIRTypePtr &ty) const { + bool operator()(const MIRTypePtr &tx, const MIRTypePtr &ty) const { return tx->EqualTo(*ty); } }; @@ -300,7 +300,14 @@ class TypeTable { std::unordered_set typeHashTable; std::vector typeTable; - MIRType *CreateType(MIRType &oldType); + // create an entry in typeTable for the type node + MIRType *CreateType(MIRType &oldType) { + MIRType *newType = oldType.CopyMIRTypeNode(); + newType->SetTypeIndex(TyIdx(typeTable.size())); + typeTable.push_back(newType); + return newType; + } + MIRType *GetOrCreateStructOrUnion(const std::string &name, const FieldVector &fields, const FieldVector &prntFields, MIRModule &module, bool forStruct = true); MIRType *GetOrCreateClassOrInterface(const std::string &name, MIRModule &module, bool forClass); @@ -329,20 +336,13 @@ class StrPtrEqual { }; // T can be std::string or std::u16string -// U can be GStrIdx, UStrIdx_t, or u16stridx_t +// U can be GStrIdx, UStrIdx, or U16StrIdx template class StringTable { public: - StringTable &operator = (const StringTable &) = delete; - StringTable(const StringTable &) = delete; StringTable() = default; - - void Init() { - // initialize 0th entry of stringTable with an empty string - T *ptr = new T; - CHECK_FATAL(ptr != nullptr, "null ptr check"); - stringTable.push_back(ptr); - } + StringTable &operator=(const StringTable&) = delete; + StringTable(const StringTable&) = delete; ~StringTable() { stringTableMap.clear(); @@ -351,6 +351,12 @@ class StringTable { } } + void Init() { + // initialize 0th entry of stringTable with an empty string + T *ptr = new T; + stringTable.push_back(ptr); + } + U GetStrIdxFromName(const T &str) const { auto it = stringTableMap.find(&str); if (it == stringTableMap.end()) { @@ -370,7 +376,7 @@ class StringTable { return strIdx; } - size_t StringTableSize(void) const { + size_t StringTableSize() const { return stringTable.size(); } @@ -386,10 +392,10 @@ class StringTable { class FPConstTable { public: - FPConstTable &operator=(const FPConstTable &p) = delete; FPConstTable(const FPConstTable &p) = delete; - + FPConstTable &operator=(const FPConstTable &p) = delete; ~FPConstTable(); + MIRFloatConst *GetOrCreateFloatConst(float); // get the const from floatConstTable or create a new one MIRDoubleConst *GetOrCreateDoubleConst(double); // get the const from doubleConstTable or create a new one @@ -400,7 +406,7 @@ class FPConstTable { } private: - FPConstTable() : floatConstTable(), doubleConstTable(){}; + FPConstTable() : floatConstTable(), doubleConstTable() {}; void PostInit(); std::unordered_map floatConstTable; // map float const value to the table; std::unordered_map doubleConstTable; // map double const value to the table; @@ -418,17 +424,16 @@ class FPConstTable { // Each module maintains its own MIRTypeNameTable. class STypeNameTable { public: - STypeNameTable() : gStrIdxToTyIdxMap() {} + STypeNameTable() = default; + virtual ~STypeNameTable() = default; - virtual ~STypeNameTable() {} - - std::unordered_map &GetGStridxToTyidxMap() { + const std::unordered_map &GetGStridxToTyidxMap() const { return gStrIdxToTyIdxMap; } TyIdx GetTyIdxFromGStrIdx(GStrIdx idx) const { - auto it = gStrIdxToTyIdxMap.find(idx); - if (it == gStrIdxToTyIdxMap.end()) { + const auto it = gStrIdxToTyIdxMap.find(idx); + if (it == gStrIdxToTyIdxMap.cend()) { return TyIdx(0); } return it->second; @@ -448,7 +453,7 @@ class FunctionTable { funcTable.push_back(nullptr); } // puIdx 0 is reserved - virtual ~FunctionTable() {} + virtual ~FunctionTable() = default; std::vector &GetFuncTable() { return funcTable; @@ -495,15 +500,15 @@ class GSymbolTable { } StIdx GetStIdxFromStrIdx(GStrIdx idx) const { - auto it = strIdxToStIdxMap.find(idx); - if (it == strIdxToStIdxMap.end()) { + const auto it = strIdxToStIdxMap.find(idx); + if (it == strIdxToStIdxMap.cend()) { return StIdx(); } return it->second; } - MIRSymbol *GetSymbolFromStrIdx(GStrIdx idx, bool checkfirst = false) const { - return GetSymbolFromStidx(GetStIdxFromStrIdx(idx).Idx(), checkfirst); + MIRSymbol *GetSymbolFromStrIdx(GStrIdx idx, bool checkFirst = false) const { + return GetSymbolFromStidx(GetStIdxFromStrIdx(idx).Idx(), checkFirst); } size_t GetSymbolTableSize() const { @@ -521,9 +526,7 @@ class GSymbolTable { void Dump(bool islocal, int32 indent = 0) const; private: - MIRModule *module; - - private: + MIRModule *module = nullptr; // hash table mapping string index to st index std::unordered_map strIdxToStIdxMap; std::vector symbolTable; // map symbol idx to symbol node @@ -605,6 +608,14 @@ class GlobalTables { GlobalTables &operator=(const GlobalTables &&globalTables) = delete; private: + GlobalTables() : fpConstTablePtr(FPConstTable::Create()) { + gStringTable.Init(); + uStrTable.Init(); + u16StringTable.Init(); + } + virtual ~GlobalTables() = default; + static GlobalTables globalTables; + TypeTable typeTable; STypeNameTable typeNameTable; FunctionTable functionTable; @@ -614,13 +625,6 @@ class GlobalTables { StringTable gStringTable; StringTable uStrTable; StringTable u16StringTable; - static GlobalTables globalTables; - virtual ~GlobalTables() = default; - GlobalTables() : fpConstTablePtr(FPConstTable::Create()) { - gStringTable.Init(); - uStrTable.Init(); - u16StringTable.Init(); - } }; } // namespace maple #endif // MAPLE_IR_INCLUDE_GLOBAL_TABLES_H diff --git a/src/maple_ir/include/mir_const.h b/src/maple_ir/include/mir_const.h index 86596d8fa75e9a1686cccf1536bde03070529ead..1d2e1853048f228d29fb6570b223057e824bd6c6 100644 --- a/src/maple_ir/include/mir_const.h +++ b/src/maple_ir/include/mir_const.h @@ -150,22 +150,22 @@ class MIRIntConst : public MIRConst { } } - void Dump() const; - bool IsZero() const { + void Dump() const override; + bool IsZero() const override { return value == 0 && IsPrimitiveInteger(GetType().GetPrimType()); } - bool IsOne() const { + bool IsOne() const override { return value == 1 && IsPrimitiveInteger(GetType().GetPrimType()); }; - bool IsMagicNum() const { + bool IsMagicNum() const override { constexpr int64 kMagicNum = 51; return value == kMagicNum && IsPrimitiveInteger(GetType().GetPrimType()); }; bool IsAllBitsOne() const { return value == -1 && IsPrimitiveInteger(GetType().GetPrimType()); }; - void Neg() { + void Neg() override { value = -value; } @@ -177,7 +177,7 @@ class MIRIntConst : public MIRConst { value = val; } - bool operator==(MIRConst &rhs) const; + bool operator==(MIRConst &rhs) const override; private: int64 value; @@ -200,9 +200,9 @@ class MIRAddrofConst : public MIRConst { } /* virtual */ - void Dump() const; + void Dump() const override; /* virtual */ - bool operator==(MIRConst &rhs) const; + bool operator==(MIRConst &rhs) const override; private: StIdx stIdx; @@ -222,9 +222,9 @@ class MIRAddroffuncConst : public MIRConst { } /* virtual */ - void Dump() const; + void Dump() const override; /* virtual */ - bool operator==(MIRConst &rhs) const; + bool operator==(MIRConst &rhs) const override; private: PUIdx puIdx; @@ -238,7 +238,7 @@ class MIRLblConst : public MIRConst { ~MIRLblConst() = default; - bool operator==(MIRConst &rhs) const; + bool operator==(MIRConst &rhs) const override; LabelIdx GetValue() const { return value; @@ -258,8 +258,8 @@ class MIRStrConst : public MIRConst { ~MIRStrConst() = default; - void Dump() const; - bool operator==(MIRConst &rhs) const; + void Dump() const override; + bool operator==(MIRConst &rhs) const override; UStrIdx GetValue() const { return value; } @@ -287,8 +287,8 @@ class MIRStr16Const : public MIRConst { return kPrimType; } - void Dump() const; - bool operator==(MIRConst &rhs) const; + void Dump() const override; + bool operator==(MIRConst &rhs) const override; U16StrIdx GetValue() const { return value; } @@ -328,22 +328,22 @@ class MIRFloatConst : public MIRConst { return GetFloatValue(); } - void Dump() const; - bool IsZero() const { + void Dump() const override; + bool IsZero() const override { return fabs(value.floatValue) <= 1e-6; } - bool IsOne() const { + bool IsOne() const override { return value.floatValue == 1; }; bool IsAllBitsOne() const { return value.floatValue == -1; }; - void Neg() { + void Neg() override { value.floatValue = -value.floatValue; } - bool operator==(MIRConst &rhs) const; + bool operator==(MIRConst &rhs) const override; private: static const PrimType kPrimType = PTY_f32; @@ -385,22 +385,22 @@ class MIRDoubleConst : public MIRConst { return kPrimType; } - void Dump() const; - bool IsZero() const { + void Dump() const override; + bool IsZero() const override { return fabs(value.dValue) <= 1e-15; } - bool IsOne() const { + bool IsOne() const override { return value.dValue == 1; }; bool IsAllBitsOne() const { return value.dValue == -1; }; - void Neg() { + void Neg() override { value.dValue = -value.dValue; } - bool operator==(MIRConst &rhs) const; + bool operator==(MIRConst &rhs) const override; private: static const PrimType kPrimType = PTY_f64; @@ -427,12 +427,12 @@ class MIRFloat128Const : public MIRConst { return kPrimType; } - bool IsZero() const { + bool IsZero() const override { MIR_ASSERT(value && "value must not be nullptr!"); return value[0] == 0 && value[1] == 0; } - bool IsOne() const { + bool IsOne() const override { MIR_ASSERT(value && "value must not be nullptr!"); return value[0] == 0 && value[1] == 0x3FFF000000000000; }; @@ -440,8 +440,8 @@ class MIRFloat128Const : public MIRConst { MIR_ASSERT(value && "value must not be nullptr!"); return (value[0] == 0xffffffffffffffff && value[1] == 0xffffffffffffffff); }; - bool operator==(MIRConst &rhs) const; - void Dump() const; + bool operator==(MIRConst &rhs) const override; + void Dump() const override; private: static const PrimType kPrimType = PTY_f128; @@ -496,8 +496,8 @@ class MIRAggConst : public MIRConst { constVec.push_back(elem); } - void Dump() const; - bool operator==(MIRConst &rhs) const; + void Dump() const override; + bool operator==(MIRConst &rhs) const override; private: MapleAllocator allocator; diff --git a/src/maple_ir/include/mir_lower.h b/src/maple_ir/include/mir_lower.h index 45eab32df2d84b4b708597a5965a72df27de5d8b..35c1ba7a4918e5496424eaff6efe19a694b5fb6f 100644 --- a/src/maple_ir/include/mir_lower.h +++ b/src/maple_ir/include/mir_lower.h @@ -43,7 +43,7 @@ class MIRLower { virtual ~MIRLower() = default; - MIRFunction *GetMirFunc() const { + const MIRFunction *GetMirFunc() const { return mirFunc; } diff --git a/src/maple_ir/include/mir_symbol.h b/src/maple_ir/include/mir_symbol.h index 8431810c7105e1ddd79d128526a8872ae8bebef3..c0ea0fd306cb6bcef2b8fa66bf728703b20093de 100644 --- a/src/maple_ir/include/mir_symbol.h +++ b/src/maple_ir/include/mir_symbol.h @@ -58,34 +58,8 @@ class MIRSymbol { MIRPreg *preg; // the MIRSymKind must be kStPreg }; - MIRSymbol() - : tyIdx(0), - inferredTyIdx(kInitTyIdx), - storageClass(kScInvalid), - sKind(kStInvalid), - isTmp(false), - needForwDecl(false), - isDeleted(false), - instrumented(false), - isImported(false), - stIdx(0, 0), - nameStrIdx(0), - value({ nullptr }) { - } - MIRSymbol(uint32 idx, uint8 scp) - : tyIdx(0), - inferredTyIdx(kInitTyIdx), - storageClass(kScInvalid), - sKind(kStInvalid), - isTmp(false), - needForwDecl(false), - isDeleted(false), - instrumented(false), - isImported(false), - stIdx(scp, idx), - nameStrIdx(0), - value({ nullptr }) { - } + MIRSymbol() : stIdx(0, 0) {} + MIRSymbol(uint32 idx, uint8 scp) : stIdx(scp, idx) {} ~MIRSymbol() = default; void SetIsTmp(bool temp) { @@ -128,8 +102,8 @@ class MIRSymbol { return tyIdx; } - void SetInferredTyIdx(TyIdx i) { - inferredTyIdx = i; + void SetInferredTyIdx(TyIdx inferredTyIdx) { + this->inferredTyIdx = inferredTyIdx; } const TyIdx &GetInferredTyIdx() const { @@ -382,21 +356,22 @@ class MIRSymbol { bool operator<(const MIRSymbol &msym) const { return nameStrIdx < msym.nameStrIdx; } + // Please keep order of the fields, avoid paddings. private: - TyIdx tyIdx; - TyIdx inferredTyIdx; - MIRStorageClass storageClass; - MIRSymKind sKind; - bool isTmp; - bool needForwDecl; // addrof of this symbol used in initialization, NOT serialized - bool isDeleted; // tell if it is deleted, NOT serialized - bool instrumented; // a local ref pointer instrumented by RC opt, NOT serialized - bool isImported; + TyIdx tyIdx{ 0 }; + TyIdx inferredTyIdx{ kInitTyIdx }; + MIRStorageClass storageClass{ kScInvalid }; + MIRSymKind sKind{ kStInvalid }; + bool isTmp = false; + bool needForwDecl = false; // addrof of this symbol used in initialization, NOT serialized + bool isDeleted = false; // tell if it is deleted, NOT serialized + bool instrumented = false; // a local ref pointer instrumented by RC opt, NOT serialized + bool isImported = false; StIdx stIdx; TypeAttrs typeAttrs; - GStrIdx nameStrIdx; - SymbolType value; + GStrIdx nameStrIdx{ 0 }; + SymbolType value = { nullptr }; static GStrIdx reflectClassNameIdx; static GStrIdx reflectMethodNameIdx; static GStrIdx reflectFieldNameIdx; diff --git a/src/maple_ir/include/option.h b/src/maple_ir/include/option.h index 693c793db66ebc4da5847d472d2073012bf51c4f..cdeb60a26b018157dc3125d3784e1a0e7f4f85dd 100644 --- a/src/maple_ir/include/option.h +++ b/src/maple_ir/include/option.h @@ -32,11 +32,11 @@ class Options { public: explicit Options(maple::MemPool &memPool) : optionAlloc(&memPool) {} - bool ParseOptions(int argc, char **argv, std::string &fileName); + bool ParseOptions(int argc, char **argv, std::string &fileName) const; ~Options() = default; - void DumpOptions(); - std::vector &GetSequence() { + void DumpOptions() const; + const std::vector &GetSequence() const { return phaseSeq; } diff --git a/src/maple_ir/include/prim_types.h b/src/maple_ir/include/prim_types.h index a4e7d92d7c909c2ce070b6c72140d00baf4b7630..bd74e38e47114e8453142105958a72aa41301620 100644 --- a/src/maple_ir/include/prim_types.h +++ b/src/maple_ir/include/prim_types.h @@ -21,45 +21,43 @@ namespace maple { class PrimitiveType { public: // we need implicit conversion from PrimType to PrimitiveType, so there is no explicit keyword here. - PrimitiveType(PrimType type) { - property = &GetPrimitiveTypeProperty(type); - } + PrimitiveType(PrimType type) : property(GetPrimitiveTypeProperty(type)) {} ~PrimitiveType() = default; PrimType GetType() const { - return property->type; + return property.type; } bool IsInteger() const { - return property->isInteger; + return property.isInteger; } bool IsUnsigned() const { - return property->isUnsigned; + return property.isUnsigned; } bool IsAddress() const { - return property->isAddress; + return property.isAddress; } bool IsFloat() const { - return property->isFloat; + return property.isFloat; } bool IsPointer() const { - return property->isPointer; + return property.isPointer; } bool IsDynamic() const { - return property->isDynamic; + return property.isDynamic; } bool IsSimple() const { - return property->isSimple; + return property.isSimple; } bool IsDynamicAny() const { - return property->isDynamicAny; + return property.isDynamicAny; } bool IsDynamicNone() const { - return property->isDynamicNone; + return property.isDynamicNone; } private: - const PrimitiveTypeProperty *property; + const PrimitiveTypeProperty &property; }; } // namespace maple #endif // MAPLE_IR_INCLUDE_PRIM_TYPES_H diff --git a/src/maple_ir/src/driver.cpp b/src/maple_ir/src/driver.cpp index 72a050bb19aef184d4500a9e324484f457d35f56..c952ad628a0c87f86fc43abfd25380e647bb2249 100644 --- a/src/maple_ir/src/driver.cpp +++ b/src/maple_ir/src/driver.cpp @@ -25,7 +25,7 @@ using namespace maple; #if MIR_FEATURE_FULL void ConstantFoldModule(maple::MIRModule &module) { MapleVector &funcList = module.GetFunctionList(); - for (auto it = funcList.begin(); it != funcList.end(); it++) { + for (auto it = funcList.begin(); it != funcList.end(); ++it) { maple::MIRFunction *curFunc = *it; module.SetCurFunction(curFunc); } @@ -88,7 +88,7 @@ int main(int argc, char **argv) { binMplt.Import(modID, true); module.OutputAsciiMpl(".irb"); } - i++; + ++i; } return 0; } diff --git a/src/maple_ir/src/global_tables.cpp b/src/maple_ir/src/global_tables.cpp index 722f4e0823c1ddbb553df7936fe2a33ee0fb1aa2..806418457847cd81226f493ef0f7141f79b8ecac 100644 --- a/src/maple_ir/src/global_tables.cpp +++ b/src/maple_ir/src/global_tables.cpp @@ -20,20 +20,20 @@ #if MIR_FEATURE_FULL namespace maple { -MIRType *TypeTable::CreateMirType(uint32 ti) const { - MIRTypeKind defaultKind = ti == PTY_constStr ? kTypeConstString : kTypeScalar; - PrimType pti = static_cast(ti); - MIRType *type = new MIRType(defaultKind, pti); - return type; +MIRType *TypeTable::CreateMirType(uint32 primTypeIdx) const { + MIRTypeKind defaultKind = (primTypeIdx == PTY_constStr ? kTypeConstString : kTypeScalar); + auto primType = static_cast(primTypeIdx); + auto *mirType = new MIRType(defaultKind, primType); + return mirType; } TypeTable::TypeTable() { // enter the primitve types in type_table_ typeTable.push_back(static_cast(nullptr)); ASSERT(typeTable.size() == static_cast(PTY_void), "use PTY_void as the first index to type table"); - for (uint32 pti = static_cast(PTY_void); pti <= static_cast(PTY_agg); pti++) { - MIRType *type = CreateMirType(pti); - type->SetTypeIndex(TyIdx(pti)); + for (auto primTypeIdx = static_cast(PTY_void); primTypeIdx <= static_cast(PTY_agg); ++primTypeIdx) { + MIRType *type = CreateMirType(primTypeIdx); + type->SetTypeIndex(TyIdx{ primTypeIdx }); typeTable.push_back(type); PutToHashTable(type); } @@ -43,67 +43,59 @@ TypeTable::TypeTable() { } TypeTable::~TypeTable() { - for (uint32 pti = static_cast(PTY_void); pti < typeTable.size(); pti++) { - delete typeTable[pti]; - typeTable[pti] = nullptr; + for (auto index = static_cast(PTY_void); index < typeTable.size(); ++index) { + delete typeTable[index]; + typeTable[index] = nullptr; } } -void TypeTable::PutToHashTable(MIRType *mirtype) { - typeHashTable.insert(mirtype); +void TypeTable::PutToHashTable(MIRType *mirType) { + typeHashTable.insert(mirType); } -// create an entry in type_table_ for the type node -inline MIRType *TypeTable::CreateType(MIRType &oldType) { - MIRType *newType = oldType.CopyMIRTypeNode(); - newType->SetTypeIndex(TyIdx(typeTable.size())); - typeTable.push_back(newType); - return newType; -} - -TyIdx TypeTable::GetOrCreateMIRType(MIRType *ptype) { - auto it = typeHashTable.find(ptype); +TyIdx TypeTable::GetOrCreateMIRType(MIRType *pType) { + const auto it = typeHashTable.find(pType); if (it != typeHashTable.end()) { return (*it)->GetTypeIndex(); } - MIRType *newTy = CreateType(*ptype); + MIRType *newTy = CreateType(*pType); PutToHashTable(newTy); return newTy->GetTypeIndex(); } MIRType *TypeTable::voidPtrType = nullptr; // get or create a type that pointing to pointedTyIdx -MIRType *TypeTable::GetOrCreatePointerType(TyIdx pointedTyIdx, PrimType pty) { - MIRPtrType type(pointedTyIdx, pty); - TyIdx tyidx = GetOrCreateMIRType(&type); - ASSERT(tyidx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreatePointerType"); - return typeTable.at(tyidx.GetIdx()); +MIRType *TypeTable::GetOrCreatePointerType(TyIdx pointedTyIdx, PrimType primType) { + MIRPtrType type(pointedTyIdx, primType); + TyIdx tyIdx = GetOrCreateMIRType(&type); + ASSERT(tyIdx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreatePointerType"); + return typeTable.at(tyIdx.GetIdx()); } -MIRType *TypeTable::GetOrCreatePointerType(const MIRType &pointTo, PrimType pty) { +MIRType *TypeTable::GetOrCreatePointerType(const MIRType &pointTo, PrimType primType) { if (pointTo.GetPrimType() == PTY_constStr) { - pty = PTY_ptr; + primType = PTY_ptr; } - return GetOrCreatePointerType(pointTo.GetTypeIndex(), pty); + return GetOrCreatePointerType(pointTo.GetTypeIndex(), primType); } MIRType *TypeTable::GetPointedTypeIfApplicable(MIRType &type) const { if (type.GetKind() != kTypePointer) { return &type; } - MIRPtrType &ptype = static_cast(type); - return GetTypeFromTyIdx(ptype.GetPointedTyIdx()); + auto &ptrType = static_cast(type); + return GetTypeFromTyIdx(ptrType.GetPointedTyIdx()); } MIRArrayType *TypeTable::GetOrCreateArrayType(const MIRType &elem, uint8 dim, const uint32 *sizeArray) { std::vector sizeVector; - for (uint8 i = 0; i < dim; i++) { + for (uint8 i = 0; i < dim; ++i) { sizeVector.push_back(sizeArray != nullptr ? sizeArray[i] : 0); } - MIRArrayType type(elem.GetTypeIndex(), sizeVector); - TyIdx tyidx = GetOrCreateMIRType(&type); - return static_cast(typeTable[tyidx.GetIdx()]); + MIRArrayType arrayType(elem.GetTypeIndex(), sizeVector); + TyIdx tyIdx = GetOrCreateMIRType(&arrayType); + return static_cast(typeTable[tyIdx.GetIdx()]); } // For one dimension array @@ -114,29 +106,29 @@ MIRArrayType *TypeTable::GetOrCreateArrayType(const MIRType &elem, uint32 size) MIRType *TypeTable::GetOrCreateFarrayType(const MIRType &elem) { MIRFarrayType type; type.SetElemtTyIdx(elem.GetTypeIndex()); - TyIdx tyidx = GetOrCreateMIRType(&type); - ASSERT(tyidx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreateFarrayType"); - return typeTable.at(tyidx.GetIdx()); + TyIdx tyIdx = GetOrCreateMIRType(&type); + ASSERT(tyIdx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreateFarrayType"); + return typeTable.at(tyIdx.GetIdx()); } MIRType *TypeTable::GetOrCreateJarrayType(const MIRType &elem) { MIRJarrayType type; type.SetElemtTyIdx(elem.GetTypeIndex()); - TyIdx tyidx = GetOrCreateMIRType(&type); - ASSERT(tyidx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreateJarrayType"); - return typeTable.at(tyidx.GetIdx()); + TyIdx tyIdx = GetOrCreateMIRType(&type); + ASSERT(tyIdx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreateJarrayType"); + return typeTable.at(tyIdx.GetIdx()); } MIRType *TypeTable::GetOrCreateFunctionType(MIRModule &module, TyIdx retTyidx, const std::vector &vecType, const std::vector &vecAttrs, bool isVarg, bool isSimpCreate) { - MIRFuncType *funcType = module.GetMemPool()->New(retTyidx, vecType, vecAttrs); + auto *funcType = module.GetMemPool()->New(retTyidx, vecType, vecAttrs); funcType->SetVarArgs(isVarg); if (isSimpCreate) { return funcType; } - TyIdx tyidx = GetOrCreateMIRType(funcType); - ASSERT(tyidx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreateFunctionType"); - return typeTable.at(tyidx.GetIdx()); + TyIdx tyIdx = GetOrCreateMIRType(funcType); + ASSERT(tyIdx.GetIdx() < typeTable.size(), "index out of range in TypeTable::GetOrCreateFunctionType"); + return typeTable.at(tyIdx.GetIdx()); } MIRType *TypeTable::GetOrCreateStructOrUnion(const std::string &name, const FieldVector &fields, @@ -209,10 +201,10 @@ MIRFloatConst *FPConstTable::GetOrCreateFloatConst(float fval) { if (fval == 0.0 && std::signbit(fval)) { return minusZeroFloatConst; } - auto it = floatConstTable.find(fval); - if (it == floatConstTable.end()) { + const auto it = floatConstTable.find(fval); + if (it == floatConstTable.cend()) { // create a new one - MIRFloatConst *fconst = new MIRFloatConst(fval, *GlobalTables::GetTypeTable().GetTypeFromTyIdx((TyIdx)PTY_f32)); + auto *fconst = new MIRFloatConst(fval, *GlobalTables::GetTypeTable().GetTypeFromTyIdx(TyIdx{ PTY_f32 })); floatConstTable[fval] = fconst; return fconst; } else { @@ -230,8 +222,8 @@ MIRDoubleConst *FPConstTable::GetOrCreateDoubleConst(double fval) { if (fval == 0.0 && std::signbit(fval)) { return minusZeroDoubleConst; } - auto it = doubleConstTable.find(fval); - if (it == doubleConstTable.end()) { + const auto it = doubleConstTable.find(fval); + if (it == doubleConstTable.cend()) { // create a new one MIRDoubleConst *dconst = new MIRDoubleConst(fval, *GlobalTables::GetTypeTable().GetTypeFromTyIdx((TyIdx)PTY_f64)); doubleConstTable[fval] = dconst; @@ -250,28 +242,26 @@ FPConstTable::~FPConstTable() { delete infDoubleConst; delete minusInfDoubleConst; delete minusZeroDoubleConst; - for (auto it : floatConstTable) { - delete it.second; + for (const auto &floatConst : floatConstTable) { + delete floatConst.second; } - for (auto it : doubleConstTable) { - delete it.second; + for (const auto &doubleConst : doubleConstTable) { + delete doubleConst.second; } } -GSymbolTable::GSymbolTable() : module(nullptr) { +GSymbolTable::GSymbolTable() { symbolTable.push_back(static_cast(nullptr)); } GSymbolTable::~GSymbolTable() { for (MIRSymbol *symbol : symbolTable) { - if (symbol != nullptr) { - delete symbol; - } + delete symbol; } } MIRSymbol *GSymbolTable::CreateSymbol(uint8 scopeID) { - MIRSymbol *st = new MIRSymbol(symbolTable.size(), scopeID); + auto *st = new MIRSymbol(symbolTable.size(), scopeID); symbolTable.push_back(st); module->AddSymbol(st); return st; @@ -287,8 +277,8 @@ bool GSymbolTable::AddToStringSymbolMap(const MIRSymbol &st) { } bool GSymbolTable::RemoveFromStringSymbolMap(const MIRSymbol &st) { - auto it = strIdxToStIdxMap.find(st.GetNameStrIdx()); - if (it != strIdxToStIdxMap.end()) { + const auto it = strIdxToStIdxMap.find(st.GetNameStrIdx()); + if (it != strIdxToStIdxMap.cend()) { strIdxToStIdxMap.erase(it); return true; } @@ -296,8 +286,8 @@ bool GSymbolTable::RemoveFromStringSymbolMap(const MIRSymbol &st) { } void GSymbolTable::Dump(bool islocal, int32 indent) const { - for (size_t i = 1; i < symbolTable.size(); i++) { - MIRSymbol *symbol = symbolTable[i]; + for (size_t i = 1; i < symbolTable.size(); ++i) { + const MIRSymbol *symbol = symbolTable[i]; if (symbol != nullptr) { symbol->Dump(module, islocal, indent); } diff --git a/src/maple_ir/src/mir_const.cpp b/src/maple_ir/src/mir_const.cpp index 7750cf5860632e7803a7b487b551373c7b4ee2d1..614c23df5ce16963d6c853478974225feffe9510 100644 --- a/src/maple_ir/src/mir_const.cpp +++ b/src/maple_ir/src/mir_const.cpp @@ -194,7 +194,7 @@ void MIRAggConst::Dump() const { MIRConst::Dump(); LogInfo::MapleLogger() << "["; size_t size = constVec.size(); - for (size_t i = 0; i < size; i++) { + for (size_t i = 0; i < size; ++i) { constVec[i]->Dump(); if (i != size - 1) { LogInfo::MapleLogger() << ", "; diff --git a/src/maple_ir/src/mir_lower.cpp b/src/maple_ir/src/mir_lower.cpp index 50f5468f841a75cd412f43f39a2a91af1604afb5..f2dda546bd0fcde50348e400dcc827544063d54e 100644 --- a/src/maple_ir/src/mir_lower.cpp +++ b/src/maple_ir/src/mir_lower.cpp @@ -386,7 +386,7 @@ ForeachelemNode *MIRLower::ExpandArrayMrtForeachelemBlock(ForeachelemNode &node) void MIRLower::AddArrayMrtMpl(BaseNode &exp, BlockNode &newBlock) { MIRModule &mod = mirModule; MIRBuilder *builder = mod.GetMIRBuilder(); - for (size_t i = 0; i < exp.NumOpnds(); i++) { + for (size_t i = 0; i < exp.NumOpnds(); ++i) { ASSERT(exp.Opnd(i) != nullptr, "nullptr check"); AddArrayMrtMpl(*exp.Opnd(i), newBlock); } diff --git a/src/maple_ir/src/mir_symbol.cpp b/src/maple_ir/src/mir_symbol.cpp index c0891f62cb576a04ce75e054dddaa79f152f9c69..4c06fb8ee64db74dcc1675f59471d0a7004e385e 100644 --- a/src/maple_ir/src/mir_symbol.cpp +++ b/src/maple_ir/src/mir_symbol.cpp @@ -38,11 +38,11 @@ bool MIRSymbol::HasAddrOfValues() const { } bool MIRSymbol::IsLiteral() const { - return (GetName().find(kConstString) == 0); + return GetName().find(kConstString) == 0; } bool MIRSymbol::IsLiteralPtr() const { - return (GetName().find(kConstStringPtr) == 0); + return GetName().find(kConstStringPtr) == 0; } MIRType *MIRSymbol::GetType() const { @@ -66,27 +66,27 @@ bool MIRSymbol::IsConstString() const { } bool MIRSymbol::IsReflectionStrTab() const { - return ((GetName().find(kReflectionStrtabPrefixStr) == 0) || - (GetName().find(kReflectionStartHotStrtabPrefixStr) == 0) || - (GetName().find(kReflectionBothHotStrTabPrefixStr) == 0) || - (GetName().find(kReflectionRunHotStrtabPrefixStr) == 0) || - (GetName().find(kReflectionNoEmitStrtabPrefixStr) == 0)); + return (GetName().find(kReflectionStrtabPrefixStr) == 0) || + (GetName().find(kReflectionStartHotStrtabPrefixStr) == 0) || + (GetName().find(kReflectionBothHotStrTabPrefixStr) == 0) || + (GetName().find(kReflectionRunHotStrtabPrefixStr) == 0) || + (GetName().find(kReflectionNoEmitStrtabPrefixStr) == 0); } bool MIRSymbol::IsRegJNITab() const { - return (GetName().find(kRegJNITabPrefixStr) == 0); + return GetName().find(kRegJNITabPrefixStr) == 0; } bool MIRSymbol::IsRegJNIFuncTab() const { - return (GetName().find(kRegJNIFuncTabPrefixStr) == 0); + return GetName().find(kRegJNIFuncTabPrefixStr) == 0; } bool MIRSymbol::IsMuidTab() const { - return (GetName().find(kMuidPrefixStr) == 0); + return GetName().find(kMuidPrefixStr) == 0; } bool MIRSymbol::IsCodeLayoutInfo() const { - return (GetName().find(kFunctionLayoutStr) == 0); + return GetName().find(kFunctionLayoutStr) == 0; } std::string MIRSymbol::GetMuidTabName() const { @@ -94,81 +94,81 @@ std::string MIRSymbol::GetMuidTabName() const { return ""; } size_t idx = GetName().find(kFileNameSplitterStr); - return ((idx != std::string::npos) ? GetName().substr(0, idx) : ""); + return (idx != std::string::npos) ? GetName().substr(0, idx) : ""; } bool MIRSymbol::IsMuidFuncDefTab() const { - return (GetName().find(kMuidFuncDefTabPrefixStr) == 0); + return GetName().find(kMuidFuncDefTabPrefixStr) == 0; } bool MIRSymbol::IsMuidFuncDefOrigTab() const { - return (GetName().find(kMuidFuncDefOrigTabPrefixStr) == 0); + return GetName().find(kMuidFuncDefOrigTabPrefixStr) == 0; } bool MIRSymbol::IsMuidFuncInfTab() const { - return (GetName().find(kMuidFuncInfTabPrefixStr) == 0); + return GetName().find(kMuidFuncInfTabPrefixStr) == 0; } bool MIRSymbol::IsMuidFuncUndefTab() const { - return (GetName().find(kMuidFuncUndefTabPrefixStr) == 0); + return GetName().find(kMuidFuncUndefTabPrefixStr) == 0; } bool MIRSymbol::IsMuidDataDefTab() const { - return (GetName().find(kMuidDataDefTabPrefixStr) == 0); + return GetName().find(kMuidDataDefTabPrefixStr) == 0; } bool MIRSymbol::IsMuidDataDefOrigTab() const { - return (GetName().find(kMuidDataDefOrigTabPrefixStr) == 0); + return GetName().find(kMuidDataDefOrigTabPrefixStr) == 0; } bool MIRSymbol::IsMuidDataUndefTab() const { - return (GetName().find(kMuidDataUndefTabPrefixStr) == 0); + return GetName().find(kMuidDataUndefTabPrefixStr) == 0; } bool MIRSymbol::IsMuidFuncDefMuidTab() const { - return (GetName().find(kMuidFuncDefMuidTabPrefixStr) == 0); + return GetName().find(kMuidFuncDefMuidTabPrefixStr) == 0; } bool MIRSymbol::IsMuidFuncUndefMuidTab() const { - return (GetName().find(kMuidFuncUndefMuidTabPrefixStr) == 0); + return GetName().find(kMuidFuncUndefMuidTabPrefixStr) == 0; } bool MIRSymbol::IsMuidDataDefMuidTab() const { - return (GetName().find(kMuidDataDefMuidTabPrefixStr) == 0); + return GetName().find(kMuidDataDefMuidTabPrefixStr) == 0; } bool MIRSymbol::IsMuidDataUndefMuidTab() const { - return (GetName().find(kMuidDataUndefMuidTabPrefixStr) == 0); + return GetName().find(kMuidDataUndefMuidTabPrefixStr) == 0; } bool MIRSymbol::IsMuidRangeTab() const { - return (GetName().find(kMuidRangeTabPrefixStr) == 0); + return GetName().find(kMuidRangeTabPrefixStr) == 0; } bool MIRSymbol::IsClassInitBridge() const { - return (GetName().find(CLASS_INIT_BRIDGE_PREFIX_STR) == 0); + return GetName().find(CLASS_INIT_BRIDGE_PREFIX_STR) == 0; } bool MIRSymbol::IsReflectionHashTabBucket() const { - return (GetName().compare(0, strlen(kMuidClassMetadataBucketPrefixStr), kMuidClassMetadataBucketPrefixStr) == 0); + return GetName().compare(0, strlen(kMuidClassMetadataBucketPrefixStr), kMuidClassMetadataBucketPrefixStr) == 0; } bool MIRSymbol::IsReflectionInfo() const { - return (IsReflectionClassInfo() || IsReflectionClassInfoRO() || IsReflectionFieldsInfo() || - IsReflectionFieldsInfoCompact() || IsReflectionMethodsInfo() || IsReflectionPrimitiveClassInfo() || - IsReflectionSuperclassInfo() || IsReflectionMethodsInfoCompact()); + return IsReflectionClassInfo() || IsReflectionClassInfoRO() || IsReflectionFieldsInfo() || + IsReflectionFieldsInfoCompact() || IsReflectionMethodsInfo() || IsReflectionPrimitiveClassInfo() || + IsReflectionSuperclassInfo() || IsReflectionMethodsInfoCompact(); } bool MIRSymbol::IsReflectionFieldsInfo() const { - return (GetName().find(kFieldsInfoPrefixStr) == 0); + return GetName().find(kFieldsInfoPrefixStr) == 0; } bool MIRSymbol::IsReflectionFieldsInfoCompact() const { - return (GetName().find(kFieldsInfoCompactPrefixStr) == 0); + return GetName().find(kFieldsInfoCompactPrefixStr) == 0; } bool MIRSymbol::IsReflectionSuperclassInfo() const { - return (GetName().find(SUPERCLASSINFO_PREFIX_STR) == 0); + return GetName().find(SUPERCLASSINFO_PREFIX_STR) == 0; } bool MIRSymbol::IsReflectionFieldOffsetData() const { @@ -176,43 +176,43 @@ bool MIRSymbol::IsReflectionFieldOffsetData() const { } bool MIRSymbol::IsReflectionClassInfo() const { - return (GetName().find(CLASSINFO_PREFIX_STR) == 0); + return GetName().find(CLASSINFO_PREFIX_STR) == 0; } bool MIRSymbol::IsReflectionArrayClassInfo() const { - return (GetName().find(kArrayClassInfoPrefixStr) == 0); + return GetName().find(kArrayClassInfoPrefixStr) == 0; } bool MIRSymbol::IsReflectionClassInfoPtr() const { - return (GetName().find(kClassINfoPtrPrefixStr) == 0); + return GetName().find(kClassINfoPtrPrefixStr) == 0; } bool MIRSymbol::IsReflectionClassInfoRO() const { - return (GetName().find(CLASSINFO_RO_PREFIX_STR) == 0); + return GetName().find(CLASSINFO_RO_PREFIX_STR) == 0; } bool MIRSymbol::IsITabConflictInfo() const { - return (GetName().find(ITAB_CONFLICT_PREFIX_STR) == 0); + return GetName().find(ITAB_CONFLICT_PREFIX_STR) == 0; } bool MIRSymbol::IsVTabInfo() const { - return (GetName().find(VTAB_PREFIX_STR) == 0); + return GetName().find(VTAB_PREFIX_STR) == 0; } bool MIRSymbol::IsITabInfo() const { - return (GetName().find(ITAB_PREFIX_STR) == 0); + return GetName().find(ITAB_PREFIX_STR) == 0; } bool MIRSymbol::IsReflectionPrimitiveClassInfo() const { - return (GetName().find(PRIMITIVECLASSINFO_PREFIX_STR) == 0); + return GetName().find(PRIMITIVECLASSINFO_PREFIX_STR) == 0; } bool MIRSymbol::IsReflectionMethodsInfo() const { - return (GetName().find(kMethodsInfoPrefixStr) == 0); + return GetName().find(kMethodsInfoPrefixStr) == 0; } bool MIRSymbol::IsReflectionMethodsInfoCompact() const { - return (GetName().find(kMethodsInfoCompactPrefixStr) == 0); + return GetName().find(kMethodsInfoCompactPrefixStr) == 0; } bool MIRSymbol::IsPrimordialObject() const { @@ -220,7 +220,7 @@ bool MIRSymbol::IsPrimordialObject() const { } bool MIRSymbol::IsGctibSym() const { - return (GetName().find(GCTIB_PREFIX_STR) == 0); + return GetName().find(GCTIB_PREFIX_STR) == 0; } // [Note] @@ -261,7 +261,7 @@ bool MIRSymbol::IgnoreRC() const { return strIdx == reflectClassNameIdx; } -void MIRSymbol::Dump(bool isLocal, int32 indent, bool suppressinit) const { +void MIRSymbol::Dump(bool isLocal, int32 indent, bool suppressInit) const { // exclude unused symbols, formal symbols and extern functions if (GetStorageClass() == kScUnused || GetStorageClass() == kScFormal || (GetStorageClass() == kScExtern && sKind == kStFunc)) { @@ -303,7 +303,7 @@ void MIRSymbol::Dump(bool isLocal, int32 indent, bool suppressinit) const { LogInfo::MapleLogger() << '\n'; return; } - if (IsConst() && !suppressinit && !(IsLiteral() && GetStorageClass() == kScExtern)) { + if (IsConst() && !suppressInit && !(IsLiteral() && GetStorageClass() == kScExtern)) { LogInfo::MapleLogger() << " = "; GetKonst()->Dump(); } @@ -332,14 +332,14 @@ void MIRSymbolTable::Dump(bool isLocal, int32 indent, bool printDeleted) const { } LabelIdx MIRLabelTable::CreateLabelWithPrefix(char c) { - LabelIdx labidx = labelTable.size(); + LabelIdx labelIdx = labelTable.size(); std::ostringstream labelNameStream; - labelNameStream << "@" << c << labidx; - std::string lname = labelNameStream.str(); - GStrIdx nameIdx = GlobalTables::GetStrTable().GetOrCreateStrIdxFromName(lname); + labelNameStream << "@" << c << labelIdx; + std::string labelName = labelNameStream.str(); + GStrIdx nameIdx = GlobalTables::GetStrTable().GetOrCreateStrIdxFromName(labelName); labelTable.push_back(nameIdx); - strIdxToLabIdxMap[nameIdx] = labidx; - return labidx; + strIdxToLabIdxMap[nameIdx] = labelIdx; + return labelIdx; } const std::string &MIRLabelTable::GetName(LabelIdx labelIdx) const { @@ -347,18 +347,18 @@ const std::string &MIRLabelTable::GetName(LabelIdx labelIdx) const { return GlobalTables::GetStrTable().GetStringFromStrIdx(labelTable[labelIdx]); } -bool MIRLabelTable::AddToStringLabelMap(LabelIdx lidx) { - CHECK_FATAL(lidx < labelTable.size(), "index out of range in MIRLabelTable::AddToStringLabelMap"); - if (labelTable[lidx] == 0) { +bool MIRLabelTable::AddToStringLabelMap(LabelIdx labelIdx) { + CHECK_FATAL(labelIdx < labelTable.size(), "index out of range in MIRLabelTable::AddToStringLabelMap"); + if (labelTable[labelIdx] == 0) { // generate a label name based on lab_idx std::ostringstream labelNameStream; - labelNameStream << "@" << lidx; - std::string lname; - lname = labelNameStream.str(); - labelTable[lidx] = GlobalTables::GetStrTable().GetOrCreateStrIdxFromName(lname); + labelNameStream << "@" << labelIdx; + std::string labelName; + labelName = labelNameStream.str(); + labelTable[labelIdx] = GlobalTables::GetStrTable().GetOrCreateStrIdxFromName(labelName); } - GStrIdx strIdx = labelTable[lidx]; - strIdxToLabIdxMap[strIdx] = lidx; + GStrIdx strIdx = labelTable[labelIdx]; + strIdxToLabIdxMap[strIdx] = labelIdx; return true; } diff --git a/src/maple_ir/src/option.cpp b/src/maple_ir/src/option.cpp index ace0f6d0881a3276df5f69ed97c60f42bd71286b..42b6ba76a300ffbe215e67dc75954849021e8478 100644 --- a/src/maple_ir/src/option.cpp +++ b/src/maple_ir/src/option.cpp @@ -107,7 +107,7 @@ const Descriptor kUsage[] = { { 0, 0, nullptr, nullptr, kBuildTypeAll, kArgCheckPolicyNone, nullptr } }; -bool Options::ParseOptions(int argc, char **argv, std::string &fileName) { +bool Options::ParseOptions(int argc, char **argv, std::string &fileName) const { bool result = true; OptionParser optionParser(kUsage); int ret = optionParser.Parse(argc, argv); @@ -195,12 +195,12 @@ bool Options::ParseOptions(int argc, char **argv, std::string &fileName) { return result; } -void Options::DumpOptions() { +void Options::DumpOptions() const { LogInfo::MapleLogger() << "phase sequence : \t"; if (phaseSeq.empty()) { LogInfo::MapleLogger() << "default phase sequence\n"; } else { - for (size_t i = 0; i < phaseSeq.size(); i++) { + for (size_t i = 0; i < phaseSeq.size(); ++i) { LogInfo::MapleLogger() << " " << phaseSeq[i].c_str(); } } diff --git a/src/maple_me/include/me_ir.h b/src/maple_me/include/me_ir.h index 16fad687f245d4d224f583de1ec36d94d9b4b1a7..59be62b16e48b1128f5dbdaf172763a23ad3ab96 100644 --- a/src/maple_me/include/me_ir.h +++ b/src/maple_me/include/me_ir.h @@ -853,6 +853,10 @@ class OpMeExpr : public MeExpr { return opndType; } + PrimType GetOpndType() const { + return opndType; + } + void SetOpndType(PrimType opndTypeVal) { opndType = opndTypeVal; } @@ -944,9 +948,9 @@ class IvarMeExpr : public MeExpr { return IsVolatile(); } - bool IsVolatile(); + bool IsVolatile() const; bool IsFinal(); - bool IsRCWeak(); + bool IsRCWeak() const; bool IsUseSameSymbol(const MeExpr &) const override; bool IsIdentical(IvarMeExpr &expr) const; MeExpr *GetIdenticalExpr(MeExpr &expr) const override; @@ -1172,6 +1176,10 @@ class MeStmt { return nullptr; } + const virtual MapleVector &GetMustDefList() const { + CHECK_FATAL(false, "should be implemented"); + } + const virtual MeExpr *GetAssignedLHS() const { return nullptr; } @@ -1325,7 +1333,11 @@ class ChiMeNode { isLive = value; } - VarMeExpr *GetRHS() const { + VarMeExpr *GetRHS() { + return rhs; + } + + const VarMeExpr *GetRHS() const { return rhs; } @@ -2057,6 +2069,10 @@ class CallMeStmt : public NaryMeStmt, public MuChiMePart, public AssignedPart { return &mustDefList; } + const MapleVector &GetMustDefList() const { + return mustDefList; + } + MustDefMeNode &GetMustDefListItem(int i) { return mustDefList[i]; } @@ -2151,6 +2167,10 @@ class IcallMeStmt : public NaryMeStmt, public MuChiMePart, public AssignedPart { return &mustDefList; } + const MapleVector &GetMustDefList() const { + return mustDefList; + } + const MeExpr *GetAssignedLHS() const { return mustDefList.empty() ? nullptr : mustDefList.front().GetLHS(); } @@ -2252,6 +2272,10 @@ class IntrinsiccallMeStmt : public NaryMeStmt, public MuChiMePart, public Assign return &mustDefList; } + const MapleVector &GetMustDefList() const { + return mustDefList; + } + MustDefMeNode &GetMustDefListItem(int i) { return mustDefList[i]; } diff --git a/src/maple_me/include/orig_symbol.h b/src/maple_me/include/orig_symbol.h index a65414882c333c63384921d9c515be8740f764da..71b36821c8fa42699999d54a7374918ade42f287 100644 --- a/src/maple_me/include/orig_symbol.h +++ b/src/maple_me/include/orig_symbol.h @@ -31,19 +31,10 @@ class OriginalSt { : ostType(kUnkonwnOst), index(index), versionsIndex(alloc.Adapter()), - zeroVersionIndex(0), - tyIdx(0), fieldID(fieldIDPara), - indirectLev(0), isLocal(local), isFormal(isFormal), - addressTaken(false), - isFinal(false), - isPrivate(false), - ignoreRC(false), - epreLocalRefVar(false), - symOrPreg(), - puIdx(0) {} + symOrPreg() {} OriginalSt(uint32 index, PregIdx rIdx, PUIdx pIdx, MapleAllocator &alloc) : OriginalSt(OStIdx(index), alloc, true, false, 0) { @@ -219,17 +210,17 @@ class OriginalSt { OStIdx index; // index number in originalStVector MapleVector versionsIndex; // the i-th element refers the index of versionst in versionst table - size_t zeroVersionIndex; // same as versionsIndex[0] - TyIdx tyIdx; // type of this symbol at this level; 0 for unknown + size_t zeroVersionIndex = 0; // same as versionsIndex[0] + TyIdx tyIdx{ 0 }; // type of this symbol at this level; 0 for unknown FieldID fieldID; // at each level of indirection - int8 indirectLev; // level of indirection; -1 for address, 0 for itself + int8 indirectLev = 0; // level of indirection; -1 for address, 0 for itself bool isLocal; // get from defined stmt or use expr bool isFormal; // it's from the formal parameters so the type must be kSymbolOst or kPregOst after rename2preg - bool addressTaken; - bool isFinal; // if the field has final attribute, only when fieldID != 0 - bool isPrivate; // if the field has private attribute, only when fieldID != 0 - bool ignoreRC; // base on MIRSymbol's IgnoreRC() - bool epreLocalRefVar; // is a localrefvar temp created by epre phase + bool addressTaken = false; + bool isFinal = false; // if the field has final attribute, only when fieldID != 0 + bool isPrivate = false; // if the field has private attribute, only when fieldID != 0 + bool ignoreRC = false; // base on MIRSymbol's IgnoreRC() + bool epreLocalRefVar = false; // is a localrefvar temp created by epre phase union { PregIdx pregIdx; MIRSymbol *mirSt; diff --git a/src/maple_me/include/ver_symbol.h b/src/maple_me/include/ver_symbol.h index ab5c84ef421bad64daf74a5b5e58a3b49d924ca2..12c6244e30a02cac2a1c1db28e904a36ed3fdfbf 100644 --- a/src/maple_me/include/ver_symbol.h +++ b/src/maple_me/include/ver_symbol.h @@ -43,11 +43,7 @@ class VersionSt { : index(index), version(version), ost(ost), - defBB(nullptr), - defType(kDassign), - defStmt(), - live(false), - isReturn(false) {} + defStmt() {} ~VersionSt() = default; @@ -176,8 +172,8 @@ class VersionSt { size_t index; // index number in versionst_table_ int version; // starts from 0 for each symbol OriginalSt *ost; // the index of related originalst in originalst_table - BB *defBB; - DefType defType; + BB *defBB = nullptr; + DefType defType = kDassign; union DefStmt { DassignNode *dassign; @@ -187,8 +183,8 @@ class VersionSt { MustDefNode *mustDef; } defStmt; // only valid after SSA - bool live; // helper of dse - bool isReturn; // the symbol will return in its function + bool live = false; // helper of dse + bool isReturn = false; // the symbol will return in its function }; class VersionStTable { diff --git a/src/maple_me/src/irmap_emit.cpp b/src/maple_me/src/irmap_emit.cpp index e66007db3e7452fce6bb78728b9fd21f1b98bb37..4290e9b201d9fe6623504a8f4a2d3be6db7a96bb 100644 --- a/src/maple_me/src/irmap_emit.cpp +++ b/src/maple_me/src/irmap_emit.cpp @@ -175,7 +175,7 @@ BaseNode &OpMeExpr::EmitExpr(SSATab &ssaTab) { TernaryNode *ternaryNode = ssaTab.GetModule().CurFunction()->GetCodeMempool()->New( Opcode(GetOp()), PrimType(GetPrimType())); constexpr size_t kOpndNumOfTernary = 3; - for (size_t i = 0; i < kOpndNumOfTernary; i++) { + for (size_t i = 0; i < kOpndNumOfTernary; ++i) { ternaryNode->SetOpnd(&opnds[i]->EmitExpr(ssaTab), i); } return *ternaryNode; @@ -246,7 +246,7 @@ BaseNode &NaryMeExpr::EmitExpr(SSATab &ssaTab) { nopndPart = intrinNode; nodeToReturn = intrinNode; } - for (auto it = GetOpnds().begin(); it != GetOpnds().end(); it++) { + for (auto it = GetOpnds().begin(); it != GetOpnds().end(); ++it) { nopndPart->GetNopnd().push_back(&(*it)->EmitExpr(ssaTab)); } return *nodeToReturn; @@ -335,14 +335,14 @@ StmtNode &CallMeStmt::EmitStmt(SSATab &ssaTab) { callNode->SetPUIdx(puIdx); callNode->SetTyIdx(tyIdx); callNode->GetNopnd().resize(NumMeStmtOpnds()); - for (size_t i = 0; i < NumMeStmtOpnds(); i++) { + for (size_t i = 0; i < NumMeStmtOpnds(); ++i) { callNode->SetOpnd(&GetOpnd(i)->EmitExpr(ssaTab), i); } callNode->SetNumOpnds(callNode->GetNopndSize()); callNode->SetSrcPos(GetSrcPosition()); if (kOpcodeInfo.IsCallAssigned(GetOp())) { EmitCallReturnVector(ssaTab, callNode->GetReturnVec()); - for (size_t j = 0; j < callNode->GetReturnVec().size(); j++) { + for (size_t j = 0; j < callNode->GetReturnVec().size(); ++j) { CallReturnPair retPair = callNode->GetReturnVec()[j]; if (!retPair.second.IsReg()) { StIdx stIdx = retPair.first; @@ -359,7 +359,7 @@ StmtNode &CallMeStmt::EmitStmt(SSATab &ssaTab) { IcallNode *icallNode = ssaTab.GetModule().CurFunction()->GetCodeMempool()->New(ssaTab.GetModule(), Opcode(GetOp())); icallNode->GetNopnd().resize(NumMeStmtOpnds()); - for (size_t i = 0; i < NumMeStmtOpnds(); i++) { + for (size_t i = 0; i < NumMeStmtOpnds(); ++i) { icallNode->SetOpnd(&GetOpnd(i)->EmitExpr(ssaTab), i); } icallNode->SetNumOpnds(icallNode->GetNopndSize()); @@ -367,7 +367,7 @@ StmtNode &CallMeStmt::EmitStmt(SSATab &ssaTab) { if (kOpcodeInfo.IsCallAssigned(GetOp())) { EmitCallReturnVector(ssaTab, icallNode->GetReturnVec()); icallNode->SetRetTyIdx(TyIdx(PTY_void)); - for (size_t j = 0; j < icallNode->GetReturnVec().size(); j++) { + for (size_t j = 0; j < icallNode->GetReturnVec().size(); ++j) { CallReturnPair retPair = icallNode->GetReturnVec()[j]; if (!retPair.second.IsReg()) { StIdx stIdx = retPair.first; @@ -392,7 +392,7 @@ StmtNode &IcallMeStmt::EmitStmt(SSATab &ssaTab) { IcallNode *icallNode = ssaTab.GetModule().CurFunction()->GetCodeMempool()->New(ssaTab.GetModule(), Opcode(GetOp())); icallNode->GetNopnd().resize(NumMeStmtOpnds()); - for (size_t i = 0; i < NumMeStmtOpnds(); i++) { + for (size_t i = 0; i < NumMeStmtOpnds(); ++i) { icallNode->SetOpnd(&GetOpnd(i)->EmitExpr(ssaTab), i); } icallNode->SetNumOpnds(icallNode->GetNopndSize()); @@ -400,7 +400,7 @@ StmtNode &IcallMeStmt::EmitStmt(SSATab &ssaTab) { if (kOpcodeInfo.IsCallAssigned(GetOp())) { EmitCallReturnVector(ssaTab, icallNode->GetReturnVec()); icallNode->SetRetTyIdx(TyIdx(PTY_void)); - for (size_t j = 0; j < icallNode->GetReturnVec().size(); j++) { + for (size_t j = 0; j < icallNode->GetReturnVec().size(); ++j) { CallReturnPair retPair = icallNode->GetReturnVec()[j]; if (!retPair.second.IsReg()) { StIdx stIdx = retPair.first; @@ -427,14 +427,14 @@ StmtNode &IntrinsiccallMeStmt::EmitStmt(SSATab &ssaTab) { callNode->SetIntrinsic(intrinsic); callNode->SetTyIdx(tyIdx); callNode->GetNopnd().resize(NumMeStmtOpnds()); - for (size_t i = 0; i < NumMeStmtOpnds(); i++) { + for (size_t i = 0; i < NumMeStmtOpnds(); ++i) { callNode->SetOpnd(&GetOpnd(i)->EmitExpr(ssaTab), i); } callNode->SetNumOpnds(callNode->GetNopndSize()); callNode->SetSrcPos(GetSrcPosition()); if (kOpcodeInfo.IsCallAssigned(GetOp())) { EmitCallReturnVector(ssaTab, callNode->GetReturnVec()); - for (size_t j = 0; j < callNode->GetReturnVec().size(); j++) { + for (size_t j = 0; j < callNode->GetReturnVec().size(); ++j) { CallReturnPair retPair = callNode->GetReturnVec()[j]; if (!retPair.second.IsReg()) { StIdx stIdx = retPair.first; @@ -453,7 +453,7 @@ StmtNode &NaryMeStmt::EmitStmt(SSATab &ssaTab) { NaryStmtNode *naryStmt = ssaTab.GetModule().CurFunction()->GetCodeMempool()->New(ssaTab.GetModule(), Opcode(GetOp())); naryStmt->GetNopnd().resize(NumMeStmtOpnds()); - for (size_t i = 0; i < NumMeStmtOpnds(); i++) { + for (size_t i = 0; i < NumMeStmtOpnds(); ++i) { naryStmt->SetOpnd(&opnds[i]->EmitExpr(ssaTab), i); } naryStmt->SetNumOpnds(naryStmt->GetNopndSize()); @@ -494,7 +494,7 @@ StmtNode &JsTryMeStmt::EmitStmt(SSATab &ssaTab) { StmtNode &TryMeStmt::EmitStmt(SSATab &ssaTab) { TryNode *tryNode = ssaTab.GetModule().CurFunction()->GetCodeMempool()->New(ssaTab.GetModule()); tryNode->ResizeOffsets(offsets.size()); - for (size_t i = 0; i < offsets.size(); i++) { + for (size_t i = 0; i < offsets.size(); ++i) { tryNode->SetOffset(offsets[i], i); } tryNode->SetSrcPos(GetSrcPosition()); diff --git a/src/maple_me/src/me_ir.cpp b/src/maple_me/src/me_ir.cpp index 72c301222cd33d5041ae4d88d1a5fd9966f772a1..5b809051da0fd734eb22864f40fa3d555ec6537d 100644 --- a/src/maple_me/src/me_ir.cpp +++ b/src/maple_me/src/me_ir.cpp @@ -312,7 +312,7 @@ bool IvarMeExpr::IsUseSameSymbol(const MeExpr &expr) const { return false; } -bool IvarMeExpr::IsVolatile() { +bool IvarMeExpr::IsVolatile() const { MIRPtrType *ty = static_cast(GlobalTables::GetTypeTable().GetTypeFromTyIdx(tyIdx)); MIRType *pointedType = GlobalTables::GetTypeTable().GetTypeFromTyIdx(ty->GetPointedTyIdx()); if (fieldID == 0) { @@ -334,7 +334,7 @@ bool IvarMeExpr::IsFinal() { * check paragma * pragma 0 var %keySet <$Ljava_2Flang_2Fannotation_2FRCWeakRef_3B> */ -bool IvarMeExpr::IsRCWeak() { +bool IvarMeExpr::IsRCWeak() const { MIRPtrType *ty = static_cast(GlobalTables::GetTypeTable().GetTypeFromTyIdx(tyIdx)); MIRType *pointedType = GlobalTables::GetTypeTable().GetTypeFromTyIdx(ty->GetPointedTyIdx()); if (pointedType->GetKind() == kTypeClass) { diff --git a/src/maple_me/src/orig_symbol.cpp b/src/maple_me/src/orig_symbol.cpp index 91678aa6567edaa9a9f67c22f479d5723c85c2d6..f07ae8b01526e13a65d76a666d307649c74c600b 100644 --- a/src/maple_me/src/orig_symbol.cpp +++ b/src/maple_me/src/orig_symbol.cpp @@ -17,10 +17,12 @@ namespace maple { bool OriginalSt::Equal(const OriginalSt &ost) const { if (IsSymbolOst()) { - return (symOrPreg.mirSt == ost.symOrPreg.mirSt && fieldID == ost.GetFieldID() && - GetIndirectLev() == ost.GetIndirectLev()); - } else if (IsPregOst()) { - return (symOrPreg.pregIdx == ost.symOrPreg.pregIdx && GetIndirectLev() == ost.GetIndirectLev()); + return symOrPreg.mirSt == ost.symOrPreg.mirSt && + fieldID == ost.GetFieldID() && + GetIndirectLev() == ost.GetIndirectLev(); + } + if (IsPregOst()) { + return symOrPreg.pregIdx == ost.symOrPreg.pregIdx && GetIndirectLev() == ost.GetIndirectLev(); } return false; }