MCPcopy Create free account
hub / github.com/Amanieu/regalloc3 / superclasses

Function superclasses

src/debug_utils/display.rs:201–226  ·  view source on GitHub ↗

Helper function to compute superclasses for a register class.

(class: RegClass, reginfo: &impl RegInfo)

Source from the content-addressed store, hash-verified

199
200/// Helper function to compute superclasses for a register class.
201fn superclasses(class: RegClass, reginfo: &impl RegInfo) -> RegClassSet {
202 // Collect all transitive superclass: all classes that have this class as
203 // a subclass.
204 let mut superclasses = RegClassSet::new();
205 for superclass in reginfo.classes() {
206 // Exclude the current class.
207 if superclass == class {
208 break;
209 }
210
211 if reginfo.sub_classes(superclass).contains(class) {
212 superclasses.insert(superclass);
213 }
214 }
215
216 // Only keep direct superclasses: if a superclass includes a different
217 // superclass then it is redundant.
218 let mut direct_superclasses = superclasses;
219 for superclass in superclasses {
220 if (reginfo.sub_classes(superclass) & superclasses).count() > 1 {
221 direct_superclasses.remove(superclass);
222 }
223 }
224
225 direct_superclasses
226}
227
228impl<R: RegInfo> fmt::Display for DisplayRegInfo<'_, R> {
229 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {

Callers 1

fmtMethod · 0.85

Calls 6

classesMethod · 0.80
sub_classesMethod · 0.80
containsMethod · 0.45
insertMethod · 0.45
countMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected