[SPIR-V] Introduce SPIR-V global entities tracking and deduplication infra.
SPIR-V module typically contains some global entities that were not global before made it to SPIR-V, e.g. types and constants are not usually declared globally in LLVM. By design SPIR-V requires such stuff to be declared once and in the module's global section. Since MIR is not able to represent such things properly they were generated per-function, and then at the very end of the backend's pipeline hoisted into some 'meta' function minding possible duplicates. New SPIRVDuplicatesTracker keeps mapping of the original LLVM entities such as types, constant, global variables, etc to their MIR counterparts - (MachineFunction, Register). Later SPIRVModuleAnalysis (apart from other thing it's responsible for) performs topological sorting of the tracker's entries to ensure proper ordering before the hoisting, and actually performs the hoisting in a duplicates-free manner by the tracker's nature. Differential Revision: https://reviews.llvm.org/D128471
Loading
Please sign in to comment