MachineInstr.h is a commonly included file and this includes
llvm/ADT/SmallSet.h for one function getUsedDebugRegs(), which is
used only in one place.
According to ClangBuildAnalyzer (run solely on building LLVM, no other
projects) the second most expensive template to instantiate is the
SmallSet::insert method used in the inline implementation in
getUsedDebugRegs():
**** Templates that took longest to instantiate: 554239 ms: std::unordered_map<int, int> (2826 times, avg 196 ms) 521187 ms: llvm::SmallSet<llvm::Register, 4>::insert (930 times, avg 560 ms) ...
By removing this method and putting its implementation in the one call
site we greatly reduce the template instantiation time and reduce the
number of includes.
When copying the implementation, I removed a check on MO.getReg() as
this is checked within MO.isVirtual().
clang-format not found in user’s local PATH; not linting file.