BasicBlockSpliter.h 756 B

123456789101112131415161718192021222324252627282930
  1. #pragma once
  2. #include <set>
  3. #include "../CommonDef.h"
  4. #include "../metadata/MetadataDef.h"
  5. namespace hybridclr
  6. {
  7. namespace transform
  8. {
  9. class BasicBlockSpliter
  10. {
  11. public:
  12. typedef Il2CppHashSet<uint32_t, il2cpp::utils::PassThroughHash<uint32_t>> Uin32Set;
  13. BasicBlockSpliter(const metadata::MethodBody& body) : _body(body) { }
  14. void SplitBasicBlocks();
  15. const std::set<uint32_t>& GetSplitOffsets() const { return _splitOffsets; }
  16. private:
  17. const metadata::MethodBody& _body;
  18. std::set<uint32_t> _splitOffsets;
  19. void SplitNormal(const byte* ilcodeStart, uint32_t codeSize, Uin32Set& ilOffsets);
  20. void SplitExceptionHandles(const byte* ilcodeStart, uint32_t codeSize, const std::vector<metadata::ExceptionClause>& exceptionClauses);
  21. };
  22. }
  23. }