/** * Merges the interference set for a register into a given bit set * * @param reg {@code >= 0;} register * @param set {@code non-null;} interference set; will be merged * with set for given register */ public void mergeInterferenceSet(int reg, IntSet set) { if (reg < interference.size()) { set.merge(interference.get(reg)); } }
/** * Converts a bit set of SSA registers into a RegisterSpecList containing * the definition specs of all the registers. * * @param ssaSet {@code non-null;} set of SSA registers * @return list of RegisterSpecs as noted above */ RegisterSpecList ssaSetToSpecs(IntSet ssaSet) { RegisterSpecList result = new RegisterSpecList(ssaSet.elements()); IntIterator iter = ssaSet.iterator(); int i = 0; while (iter.hasNext()) { result.set(i++, getDefinitionSpecForSsaReg(iter.next())); } return result; }
worklist.clear(workBlockIndex); IntIterator dfIterator = domInfos[workBlockIndex].dominanceFrontiers.iterator();
/** * Adds a register pair to the interference/liveness graph. Parameter * order is insignificant. * * @param regV one register index * @param regW another register index */ public void add(int regV, int regW) { ensureCapacity(Math.max(regV, regW) + 1); interference.get(regV).add(regW); interference.get(regW).add(regV); }
/** * Checks to see if old namespace reg {@code oldReg} interferes * with what currently maps to {@code newReg}. * * @param oldReg old namespace register * @param newReg new namespace register * @param category category of old namespace register * @return true if oldReg will interfere with newReg */ public boolean interferes(int oldReg, int newReg, int category) { if (newReg >= newRegInterference.size()) { return false; } else { IntSet existing = newRegInterference.get(newReg); if (existing == null) { return false; } else if (category == 1) { return existing.has(oldReg); } else { return existing.has(oldReg) || (interferes(oldReg, newReg+1, category-1)); } } }
/** * Converts a bit set of SSA registers into a RegisterSpecList containing * the definition specs of all the registers. * * @param ssaSet {@code non-null;} set of SSA registers * @return list of RegisterSpecs as noted above */ RegisterSpecList ssaSetToSpecs(IntSet ssaSet) { RegisterSpecList result = new RegisterSpecList(ssaSet.elements()); IntIterator iter = ssaSet.iterator(); int i = 0; while (iter.hasNext()) { result.set(i++, getDefinitionSpecForSsaReg(iter.next())); } return result; }
worklist.clear(workBlockIndex); IntIterator dfIterator = domInfos[workBlockIndex].dominanceFrontiers.iterator();
/** * Adds a register pair to the interference/liveness graph. Parameter * order is insignificant. * * @param regV one register index * @param regW another register index */ public void add(int regV, int regW) { ensureCapacity(Math.max(regV, regW) + 1); interference.get(regV).add(regW); interference.get(regW).add(regV); }
/** * Checks to see if old namespace reg {@code oldReg} interferes * with what currently maps to {@code newReg}. * * @param oldReg old namespace register * @param newReg new namespace register * @param category category of old namespace register * @return true if oldReg will interfere with newReg */ public boolean interferes(int oldReg, int newReg, int category) { if (newReg >= newRegInterference.size()) { return false; } else { IntSet existing = newRegInterference.get(newReg); if (existing == null) { return false; } else if (category == 1) { return existing.has(oldReg); } else { return existing.has(oldReg) || (interferes(oldReg, newReg+1, category-1)); } } }
/** * Converts a bit set of SSA registers into a RegisterSpecList containing * the definition specs of all the registers. * * @param ssaSet {@code non-null;} set of SSA registers * @return list of RegisterSpecs as noted above */ RegisterSpecList ssaSetToSpecs(IntSet ssaSet) { RegisterSpecList result = new RegisterSpecList(ssaSet.elements()); IntIterator iter = ssaSet.iterator(); int i = 0; while (iter.hasNext()) { result.set(i++, getDefinitionSpecForSsaReg(iter.next())); } return result; }
worklist.clear(workBlockIndex); IntIterator dfIterator = domInfos[workBlockIndex].dominanceFrontiers.iterator();
/** * Adds a register pair to the interference/liveness graph. Parameter * order is insignificant. * * @param regV one register index * @param regW another register index */ public void add(int regV, int regW) { ensureCapacity(Math.max(regV, regW) + 1); interference.get(regV).add(regW); interference.get(regW).add(regV); }
/** * Checks to see if old namespace reg {@code oldReg} interferes * with what currently maps to {@code newReg}. * * @param oldReg old namespace register * @param newReg new namespace register * @param category category of old namespace register * @return true if oldReg will interfere with newReg */ public boolean interferes(int oldReg, int newReg, int category) { if (newReg >= newRegInterference.size()) { return false; } else { IntSet existing = newRegInterference.get(newReg); if (existing == null) { return false; } else if (category == 1) { return existing.has(oldReg); } else { return existing.has(oldReg) || (interferes(oldReg, newReg+1, category-1)); } } }
/** * Merges the interference set for a register into a given bit set * * @param reg {@code >= 0;} register * @param set {@code non-null;} interference set; will be merged * with set for given register */ public void mergeInterferenceSet(int reg, IntSet set) { if (reg < interference.size()) { set.merge(interference.get(reg)); } }
/** * Converts a bit set of SSA registers into a RegisterSpecList containing * the definition specs of all the registers. * * @param ssaSet {@code non-null;} set of SSA registers * @return list of RegisterSpecs as noted above */ RegisterSpecList ssaSetToSpecs(IntSet ssaSet) { RegisterSpecList result = new RegisterSpecList(ssaSet.elements()); IntIterator iter = ssaSet.iterator(); int i = 0; while (iter.hasNext()) { result.set(i++, getDefinitionSpecForSsaReg(iter.next())); } return result; }
worklist.clear(workBlockIndex); IntIterator dfIterator = domInfos[workBlockIndex].dominanceFrontiers.iterator();
/** * Adds a register pair to the interference/liveness graph. Parameter * order is insignificant. * * @param regV one register index * @param regW another register index */ public void add(int regV, int regW) { ensureCapacity(Math.max(regV, regW) + 1); interference.get(regV).add(regW); interference.get(regW).add(regV); }