// decompose converts phi ops on compound builtin types into phi // ops on simple types, then invokes rewrite rules to decompose // other ops on those types. func decomposeBuiltIn(f *Func) { … } func maybeAppend(f *Func, ss []*LocalSlot, s *LocalSlot) []*LocalSlot { … } func maybeAppend2(f *Func, ss []*LocalSlot, s1, s2 *LocalSlot) []*LocalSlot { … } func decomposeBuiltInPhi(v *Value) { … } func decomposeStringPhi(v *Value) { … } func decomposeSlicePhi(v *Value) { … } func decomposeInt64Phi(v *Value) { … } func decomposeComplexPhi(v *Value) { … } func decomposeInterfacePhi(v *Value) { … } func decomposeUser(f *Func) { … } // decomposeUserArrayInto creates names for the element(s) of arrays referenced // by name where possible, and appends those new names to slots, which is then // returned. func decomposeUserArrayInto(f *Func, name *LocalSlot, slots []*LocalSlot) []*LocalSlot { … } // decomposeUserStructInto creates names for the fields(s) of structs referenced // by name where possible, and appends those new names to slots, which is then // returned. func decomposeUserStructInto(f *Func, name *LocalSlot, slots []*LocalSlot) []*LocalSlot { … } func decomposeUserPhi(v *Value) { … } // decomposeStructPhi replaces phi-of-struct with structmake(phi-for-each-field), // and then recursively decomposes the phis for each field. func decomposeStructPhi(v *Value) { … } // decomposeArrayPhi replaces phi-of-array with arraymake(phi-of-array-element), // and then recursively decomposes the element phi. func decomposeArrayPhi(v *Value) { … } const MaxStruct … type namedVal … // deleteNamedVals removes particular values with debugger names from f's naming data structures, // removes all values with OpInvalid, and re-sorts the list of Names. func deleteNamedVals(f *Func, toDelete []namedVal) { … }