Esempio n. 1
0
 private boolean isCommonDomFrontier(BasicBlock bb, BasicBlock entry, BasicBlock exit) {
   for (BasicBlock p : cfg.getPredecessorsOf(bb)) {
     if (getDomInfo().dominates(entry, p) && !getDomInfo().dominates(exit, p)) {
       return false;
     }
   }
   return true;
 }
Esempio n. 2
0
 /** Test if two canonical regions could be merge in one non canonical region. */
 private boolean isNonCanonicalRegion(RPST rpst, Region region1, Region region2) {
   if (!region1.getExit().equals(region2.getEntry())) {
     return false;
   }
   if (rpst.getChildCount(region2) == 0) {
     return false;
   }
   // basic blocks of merged region
   Set<BasicBlock> basicBlocks = new HashSet<>();
   basicBlocks.addAll(rpst.getBasicBlocks(region1));
   basicBlocks.addAll(rpst.getBasicBlocks(region2));
   basicBlocks.add(region2.getExit());
   if (!basicBlocks.containsAll(cfg.getSuccessorsOf(region1.getExit()))) {
     return false;
   }
   if (!basicBlocks.containsAll(cfg.getPredecessorsOf(region1.getExit()))) {
     return false;
   }
   return true;
 }