#pragma once #include "DvmhRegions/DvmhRegionInserter.h" class RegionsMerger { std::vector ®ions; ReadWriteAnalyzer &rw_analyzer; bool canBeMoved(SgStatement* st, const DvmhRegion *region) const; std::vector getStatementsToMove(const DvmhRegion *first, const DvmhRegion *second, bool&) const; void moveStatements(const std::vector& sts, const DvmhRegion* region); bool sets_intersect(const std::set&, const std::set&) const; static bool compareByStart(const DvmhRegion* a, const DvmhRegion* b); public: explicit RegionsMerger(std::vector& old_regions, ReadWriteAnalyzer& rw) : regions(old_regions), rw_analyzer(rw) { } std::vector mergeRegions(); };